Moin Moin,
laut https://fhem.de/commandref_DE.html#DOIF_wait kann eine Verzögerung durch einen neuen Event des DOIF-Befehls zurückgesetzt werden (2. letzter Paragraph).
Wie kann ich dann eine Befehlssequenz mit Pausen (dauert in der Summe ca. 4 Minuten), die nicht unterbrochen werden darf, realisieren?
Danke, -MN
Mein erster Vorschlag wäre die Befehlssequenz in einen anderen DOIF oder sonstwie auszulagern, dann läuft die Sequenz getrennt ab. Wenn es nur wenige befehle sind, kann das wait ja auch durch andere Möglichkeiten erreicht werden.
Hier gibt es ein Beispiel Zurücksetzen eines Wait-Timers mit $SELF verhindern (https://wiki.fhem.de/wiki/DOIF/partielle_Deaktivierung_der_Befehlsausf%C3%BChrung,_Zur%C3%BCcksetzen_eines_Wait-Timers_mit_$SELF_oder_IsDisabled_verhindern,_im_Vergleich#Zur.C3.BCcksetzen_eines_Wait-Timers_mit_.24SELF_verhindern)
Puh.
Das übersteigt meine bisherigen Kenntnisse von DOIF doch beträchtlich... Ich denke, daß Beispiel mit
and [$SELF] !~ "cmd_1_1|cmd_1_2"
habe ich ansatzweise verstanden. Jedoch setzen die Beispiele immer einen DOELSEIF-Zweig voraus...? Reicht es aus, einen leeren DOELSEIF-Zweig zu haben, d.h. von
([EG.HWR.Fussbodenmischer:position] < 0 or [EG.Heizung.Mischer.Vorlauf] > 45 or [EG.HWR.Fussbodenmischer:position] > 100)
(set DI_MischerCommands disable) ## CMD 1.1
(set EG.HWR.Fussbodenmischer calibrate) ## CMD 1.2
(set EG.HWR.Fussbodenmischer reset) ## CMD 1.3
(set EG.HWR.Fussbodenmischer 35) ## CMD 1.4
(IF ([EG.HWR.Fussbodenmischer:position] < 0) (set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - negative Position')) ## CMD 1.5
(IF ([EG.Heizung.Mischer.Vorlauf] > 45) (set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - zu hohe Vorlauftemperatur')) ## CMD 1.6
(IF ([EG.HWR.Fussbodenmischer:position] > 100) (set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - Position groesser 100')) ## CMD 1.7
(set DI_MischerCommands initialize) ## CMD 1.8
DOELSE
## CMD 2
hin zu
([EG.HWR.Fussbodenmischer:position] < 0 or [EG.Heizung.Mischer.Vorlauf] > 45 or [EG.HWR.Fussbodenmischer:position] > 100)
(set DI_MischerCommands disable) ## CMD 1.1
(set EG.HWR.Fussbodenmischer calibrate) ## CMD 1.2
(set EG.HWR.Fussbodenmischer reset) ## CMD 1.3
(set EG.HWR.Fussbodenmischer 35) ## CMD 1.4
(IF ([EG.HWR.Fussbodenmischer:position] < 0) (set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - negative Position')) ## CMD 1.5
(IF ([EG.Heizung.Mischer.Vorlauf] > 45) (set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - zu hohe Vorlauftemperatur')) ## CMD 1.6
(IF ([EG.HWR.Fussbodenmischer:position] > 100) (set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - Position groesser 100')) ## CMD 1.7
(set DI_MischerCommands initialize) ## CMD 1.8
DOELSEIF ([$SELF] !~ "cmd_1_\d")
## CMD 2
d.h. der leere DOELSE-Zweig wird zu DOELSEIF, das DOELSE implizit?
Danke, -MN
Du müsstest bei DOELSEIF auch die bei DOELSE implizite Bedingung angeben, also
DOELSEIF (!([EG.HWR.Fussbodenmischer:position] < 0 or [EG.Heizung.Mischer.Vorlauf] > 45 or [EG.HWR.Fussbodenmischer:position] > 100) and $cmd > 1.7)