FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: gadget am 15 November 2022, 11:48:23

Titel: DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: gadget am 15 November 2022, 11:48:23
Hallo,

DOIF mit folgender Struktur:


(Bedingung 1)
  (Befehl 1a)
  (Befehl 1b)

DOELSEIF

(Bedingung 2)
  (Befehl 2a)
  (Befehl 2b)

DOELSE



und dann dazu ein wait 0,10:0,10

Wenn jetzt der Befehl 1a dazu führt, dass Bedingung 1 nicht mehr zutrifft, wird der Befehl 1b nicht mehr ausgeführt, sondern es wird in den DOELSE Zweig gesprungen.
Falls der Befehl 1a dazu führt, dass Bedingung 2 erfüllt ist, wird in diesem Zweig Befehl 2a ausgeführt.

Bin ich der einzige, der das konter-Intuitiv findet ? Gibt es eine einfache Möglichkeit, dafür zu sorgen, dass die Ausführungsteile immer erst komplett abgearbeitet werden ? Ich habe mir jetzt zusätzliche Abfragen für  [$SELF:cmd_nr] und [$SELF:cmd_seqnr] in die Bedingungen reingebastelt, aber das ist sehr unschön und nicht pflegeleicht. cmdpause scheint an dieser Stelle auch nicht zu helfen.

Grüße, gadget



Titel: Antw:DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: Per am 15 November 2022, 13:17:04
Wenn du die Befehle nicht einzeln klammerst, sondern gemeinsam und mit Komma getrennt (Standardfall!), sollte das von dir gewünschte Verhalten auftreten.
Und weil es die meisten so machen, kann es sein, dass du der einzige bist.
Titel: Antw:DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: gadget am 15 November 2022, 13:22:49
... dannn klappt der wait aber nicht mehr.
Titel: Antw:DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: Damian am 15 November 2022, 13:27:17
ja, wenn zwei zeitlich getrennte Befehle auf jeden Fall ausgeführt werden sollen, dann muss man sleep angeben: (befehl 1a,sleep 10;befehl 1b)

Oder eben im Perlmodus mit setExec-Funktion arbeiten.

Alternativ versuchen ohne DOELSE-Fall auszukommen (ist oft kontraproduktiv bei mehreren Abzweigungen). Dann wird der Ablauf von Zweig 1 nur unterbrochen, wenn die Bedingung von Zweig2 wahr wird und sonst nicht - und das war die eigentliche Intention des im DOIF programmierten Abbruchs.
Titel: Antw:DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: gadget am 15 November 2022, 13:29:39
Ich hatte irgendwie im Hinterkopf, dass man sleep vermeiden soll weil blocking ? Oder ist das nicht (mehr) richtig ?
Titel: Antw:DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: Damian am 15 November 2022, 13:32:16
Zitat von: gadget am 15 November 2022, 13:29:39
Ich hatte irgendwie im Hinterkopf, dass man sleep vermeiden soll weil blocking ? Oder ist das nicht (mehr) richtig ?

Nicht unbedingt, wenn man sleep in der richtigen Syntax an der richtigen Stelle angibt. :)
Titel: Antw:DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?
Beitrag von: gadget am 15 November 2022, 13:35:38
o.k., dann baue ich das entsprechend um. Danke für die Aufklärung !