... als Anregung ein EIN/AUS-Timer als DOIF...für uns Anfänger :-[:
Interessant finde ich, den DOIF-Statuswechsel durch den at-Befehl => quasi Selbstvernichtung ;)
set Timer_di start
set Timer_di stop
EIN/AUS-Timer:
( [Timer_di:"start"] )
( delete Timer_di_at )
( define -temporary Timer_di_at at +00:30:00 set Timer_di stop ) ## ..in 30Min stop
( set Wasser ein ) ### action !
DOELSEIF
( [Timer_di:"stop"] )
( delete Timer_di_at )
( set Wasser aus ) ### ..hier steht aber ggfs. eine User-Funktion
...oder als Einschaltverzögerung
( [Timer_di:"start"] )
( delete Timer_di_at )
( define -temporary Timer_di_at at +00:00:10 set Timer_di stop )
DOELSEIF
( [Timer_di:"stop"] )
( delete Timer_di_at )
( set Wasser ein) ### action !
defmod Timer_di DOIF ( [Timer_di:"start"] )\
( delete Timer_di_at )\
( define -temporary Timer_di_at at +00:00:10 set Timer_di stop )\
\
( set Wasser ein ) ### action !\
\
\
DOELSEIF\
( [Timer_di:"stop"] )\
\
( set Wasser aus ) ### action !\
attr Timer_di DbLogExclude .*
attr Timer_di alias Schaltverzögerung
attr Timer_di devStateIcon cmd_1:on cmd_2:off\
attr Timer_di do always
attr Timer_di setList start stop
attr Timer_di startup set Timer_di stop
setstate Timer_di initialized
setstate Timer_di 2022-08-19 15:40:58 cmd 0
setstate Timer_di 2022-08-19 15:40:58 mode enabled
setstate Timer_di 2022-08-19 15:40:58 state initialized
...weitere Anpassung:
statt Ausschalten in 10 Min ( define -temporary Timer_di_at at +00:10:00 set Timer_di stop )
könnte man auch zu einer fixen Uhrzeit (z.B. 06:00) ausschalten: ( define -temporary Timer_di_at at 06:00:00 set Timer_di stop )
Kann man machen. Oder einfach ohne at:
( [Timer_di:"start"] ) ## an/aus
(set Wasser ein )(set Wasser aus) ### action !
DOELSEIF( [Timer_di:"stop"] )
(set Wasser aus ) ### ..hier steht aber ggfs. eine User-Funktion
attr do resetwait
attr wait 0,30
( [Timer_di:"start"] ) ## verzögertes Einschalten
( set Wasser ein ) ### action !
DOELSEIF ([Timer_di:"stop"]) ## Abbruch der Verzögerung
attr do resetwait
attr wait 10
Hallo Damian,
Danke auch für deine Teilnahme am Trivialstatements ;D
Super elegant und funktional, da lernt man als Neuling was.
...aber ...aus dem Status cmd_1 kommt man mit "set Timer_di start" nicht automatisch raus...
....und das war für mich das interessante:
man startet, auf der GUI steht ON und nach Ablauf des Zeitlimits dann automatisch OFF.
Das liefe dann in deiner eleganten Form als "Symbiose" darauf hinaus:
... und da ist das pöse ;) at-Statement wieder:
P.S: leider existiert kein: defmod -temporary
( [Timer_di:"start"] ) ## an/aus
(set Wasser ein )
(set Wasser aus) ### action !
( delete Timer_di_at ) ## leider existiert kein defmod -temporary
( define -temporary Timer_di_at at +00:30:00 set Timer_di stop )
DOELSEIF( [Timer_di:"stop"] or [08:00] ) ### 08:00 safety first, da ist dann spätestens Schluss
( delete Timer_di_at )
(set Wasser aus ) ### ..hier steht aber ggfs. eine User-Funktion
attr do resetwait
attr wait 0,30,0,0
Wer es auf der GUI nicht benötigt, hat jetzt deine o.e. schöne, knackige Alternative ....
So war's gemeint ::)
Zitat von: daedalus0815 am 19 August 2022, 18:40:28
...aber ...aus dem Status cmd_1 kommt man mit "set Timer_di start" nicht automatisch raus...
....und das war für mich das interessante:
man startet, auf der GUI steht ON und nach Ablauf des Zeitlimits dann automatisch OFF.
Muss man auch nicht. Wenn du:
attr cmdState on,off|off
setzt, dann siehst du immer den richtigen Status.
Danke Damian,
...echt super ... cmdState hab ich noch NIE benutzt und jetzt verstehe ich/wir? das erstmals ;D
Die Endlösung/Zusammenfassung:
( [Timer_di:"start"] )
(set Wasser ein )
(set Wasser aus)
DOELSEIF( [Timer_di:"stop"] )
(set Wasser aus )
attr do resetwait
attr wait 0,30:0
attr cmdState on,off|off
attr setList start stop
attr startup set Timer_di stop
attr webCmd on:off
mit Kommando:
set Timer_di start
set Timer_di stop
@Damian
Wie immer ein Nachzügler der Nimmersatten :
Mit "webCmd on:off" kann ich nun schalten,
allerdings mit "webCmd :" funktioniert das Schalten mit dem Icon leider NICHT...Idee zur Abschlussperfektion ?
P.S.:
...denke gerade drüber nach, vielleicht sollte ich mit mal
mit eventMap wegen on/start und off/stop experementieren !! => Versuch gescheitert
...und das ist nun das funktionierende Resultat....
( [Timer2_di:"start|on"] ) ## an/aus
(set FIBARO5 on )
(set FIBARO5 off) ### action !
DOELSEIF( [Timer2_di:"stop|off"] )
(set FIBARO5 on ) ### ..hier steht aber ggfs. eine User-Funktion
attr do resetwait
attr wait 0,30:0
attr cmdState on,off|off
attr setList start stop
attr startup set Timer_di stop
attr webCmd :
Coole Sache unsere Diskussion und die resultierende Entwicklung ;D
Aufruf an @alle: ......für Neulinge ist es immer hilfreich, wenn
wirklich gaaaaaaaaaanz am Ende auch mal ein funktionierendes copy/paste-Beispiel steht ....sollten wir machen, wenn eure/unsere Probleme hier schon so toll gelöst werden !
.... das war jetzt hoffentlich nicht zu schlimm 8)