DOIF Ausführungsteil nicht abbrechen -> Einfache Methode ?

Begonnen von gadget, 15 November 2022, 11:48:23

Vorheriges Thema - Nächstes Thema

gadget

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




Per

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.

gadget


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gadget

Ich hatte irgendwie im Hinterkopf, dass man sleep vermeiden soll weil blocking ? Oder ist das nicht (mehr) richtig ?

Damian

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. :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gadget

o.k., dann baue ich das entsprechend um. Danke für die Aufklärung !