Hauptmenü

DOIF mit wait reset protection

Begonnen von h0nIg, 05 März 2023, 23:32:40

Vorheriges Thema - Nächstes Thema

h0nIg

Hallo,

ich zerbreche mir jetzt schon lange genug den Kopf. Hat jemand eine Idee wieso nach einmaliger Ausführung das DOIF nie wieder ausgeühft wird? Die Bedingung wird erneut wahr, jedoch hängt er seit der Beendigung wohl bei "cmd_1" fest und kommt niemals bei "cmd_2" an? Oder anders, wieso muss immer bei den Einsteigerleitfaden Beispielen explizit das DOIF aktualisiert werden? https://wiki.fhem.de/wiki/DOIF/partielle_Deaktivierung_der_Befehlsausf%C3%BChrung,_Zur%C3%BCcksetzen_eines_Wait-Timers_mit_%24SELF_oder_IsDisabled_verhindern,_im_Vergleich#:~:text=Mit%20der%20internen%20FHEM%2DFunktion,cmdState%20auf%20inactive%20gesetzt%20werden.


define verdichter_hyst_regelproblem DOIF (..... [vclient:KK_VerdichterLeistung] == 23.0) ({Log 1, "START"})(set vitoconnect XX 1)(set vitoconnect XX 2)(set vitoconnect XX 3)({Log 1, "END"})\
DOELSEIF ([$SELF] !~ "cmd_1_1|cmd_1_2|cmd_1_3|cmd_1_4") \
   ({Log 1, "should never happen"})
attr verdichter_hyst_regelproblem wait 0,0,300,1800,0


Ich will eigentlich nur ein DOIF das nach dem Start nicht unterbrochen werden kann , auch wenn sich Bedingungen ändern und damit der (leere) DOELSE Fall eintritt.

Grüße

Damian

Zitat von: h0nIg am 05 März 2023, 23:32:40
Hallo,

ich zerbreche mir jetzt schon lange genug den Kopf. Hat jemand eine Idee wieso nach einmaliger Ausführung das DOIF nie wieder ausgeühft wird? Die Bedingung wird erneut wahr, jedoch hängt er seit der Beendigung wohl bei "cmd_1" fest und kommt niemals bei "cmd_2" an? Oder anders, wieso muss immer bei den Einsteigerleitfaden Beispielen explizit das DOIF aktualisiert werden? https://wiki.fhem.de/wiki/DOIF/partielle_Deaktivierung_der_Befehlsausf%C3%BChrung,_Zur%C3%BCcksetzen_eines_Wait-Timers_mit_%24SELF_oder_IsDisabled_verhindern,_im_Vergleich#:~:text=Mit%20der%20internen%20FHEM%2DFunktion,cmdState%20auf%20inactive%20gesetzt%20werden.


define verdichter_hyst_regelproblem DOIF (..... [vclient:KK_VerdichterLeistung] == 23.0) ({Log 1, "START"})(set vitoconnect XX 1)(set vitoconnect XX 2)(set vitoconnect XX 3)({Log 1, "END"})\
DOELSEIF ([$SELF] !~ "cmd_1_1|cmd_1_2|cmd_1_3|cmd_1_4") \
   ({Log 1, "should never happen"})
attr verdichter_hyst_regelproblem wait 0,0,300,1800,0


Ich will eigentlich nur ein DOIF das nach dem Start nicht unterbrochen werden kann , auch wenn sich Bedingungen ändern und damit der (leere) DOELSE Fall eintritt.

Grüße

Wenn du nicht mit Zuständen arbeiten willst, dann solltest du DOIF im Perlmodus nutzen, dort wird nichts unterbrochen und es wird immer alles wiederholt:

https://wiki.fhem.de/wiki/DOIF/Perl-Modus


Das Konzept des DOIF im FHEM-Modus musst du dir noch mal in der Einleitung genau durchlesen, dort steht warum etwas nicht wiederholt wird und wie die wait-Timer funktionieren.

https://fhem.de/commandref_DE.html#DOIF
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zwei Stichpunkte: Selftriggerung und do always.
Zwei Lösungsansätze: einen Dummy setzen und wieder löschen oder mit AT Timer statt wait arbeiten.