FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Morgennebel am 04 März 2017, 16:57:36

Titel: DOIF: verzögerte Befehlssequenz nicht-unterbrechbar abarbeiten?
Beitrag von: Morgennebel am 04 März 2017, 16:57:36
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
Titel: Antw:DOIF: verzögerte Befehlssequenz nicht-unterbrechbar abarbeiten?
Beitrag von: viegener am 04 März 2017, 18:30:34
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.
Titel: Antw:DOIF: verzögerte Befehlssequenz nicht-unterbrechbar abarbeiten?
Beitrag von: Ellert am 04 März 2017, 19:34:38
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)
Titel: Antw:DOIF: verzögerte Befehlssequenz nicht-unterbrechbar abarbeiten?
Beitrag von: Morgennebel am 05 März 2017, 11:41:44
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
Titel: Antw:DOIF: verzögerte Befehlssequenz nicht-unterbrechbar abarbeiten?
Beitrag von: Ellert am 05 März 2017, 14:20:33
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)