[erledigt] DOIF - wait für einzelne Bedingung umgehen/überspringen

Begonnen von Jogi, 11 Dezember 2020, 12:18:54

Vorheriges Thema - Nächstes Thema

Jogi

Hallo,
ich habe ein DOIF mit 7 cmd´s. list siehe unten.
Dieses schaltet eine Lampe im Flur, je nach Bedingung unterschiedlich einschaltet (cmd1-6) und verzögert wieder ausschaltet oder runter dimmt.(cmd7)
Funktioniert.
Was ich jetzt realisieren möchte betrifft lediglich cmd6.
Wenn cmd6 NICHT mehr zutrifft soll sofort in das neue cmd geschaltet werden ohne dass wait (besonders das wait von 300s bei cmd7) das Umschalten beeinflusst.
Leider habe ich keine Ahnung, wie ich das realisieren soll. Mir fehlt der Ansatz.
Natürlich habe ich schon recherchiert und z.B. cmdpause oder timerwithwait gefunden und ausprobiert, aber entweder habe ich es nicht verstanden, es ist der falsche Ansatz, oder ich mache etwas falsch.
   

Hier das DOIF um das es geht:
Internals:
   DEF        (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Helligkeit] <450 and [Freigabe_WeihnBel] eq "off" and [Deckenlampe_Flur] eq "off") (set Lampe_Flur pct 70) (set Lampe_Flur ct 400)## 1 Ohne Weihnachtsbeleuchtung bei Bewegung
DOELSEIF (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Helligkeit] <450 and [Freigabe_WeihnBel] eq "on" and [Claudia_anwesend] eq "off" and [Deckenlampe_Flur] eq "off") (set Lampe_Flur pct 60) (set Lampe_Flur ct 380)## 2 Mit Weihnachtsbeleuchtung und Claudia ist nicht anwesend
DOELSEIF (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Helligkeit] <450 and [Freigabe_WeihnBel] eq "on" and [Claudia_anwesend] eq "on" and ![17:00-23:30] and [Deckenlampe_Flur] eq "off") (set Lampe_Flur pct 30)  (set Lampe_Flur ct 450)## 3 Mit Weihnachtsbeleuchtung und Anwesenheit VOR 17 Uhr
DOELSEIF (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Helligkeit] <450 and [Freigabe_WeihnBel] eq "on" and [Claudia_anwesend] eq "on" and [17:00-23:30] and [Deckenlampe_Flur] eq "off") (set Lampe_Flur pct 20)  (set Lampe_Flur ct 450)## 4 Mit Weihnachtsbeleuchtung und Anwesenheit nach 17 Uhr
DOELSEIF ((([Freigabe_Flur_Nacht] eq "on" and [Helligkeit] <450 and [Bewegungsmelder:state] eq "noMotion" and [Wohnzimmer] eq "off" and [Deckenlampe_Flur] eq "off")))
(set Lampe_Flur pct 6)  (set Lampe_Flur ct 490) ## 5
DOELSEIF ([Deckenlampe_Flur] eq "on") (set Lampe_Flur pct 100) (set Lampe_Flur ct 215) ## 6
DOELSE (set Lampe_Flur ct 450) (set Lampe_Flur pct [Dimmwert_Flur:state]) ## 7
Attributes:
   checkall   all
   do         always
   wait       0,2:0,2:0,2:0,2:0,1:0,1:300,1


Wo liegt mein Denkfehler, und kann mir jemand einen Schubs in die richtige Richtung geben?
Danke vorab.

amenomade

Da muss vor Bedingung 7 eine neue DOELSEIF Bedingung hinzugefügt werden, die mittels ...eq "off"  and [$SELF] eq "cmd6"... den Ausgang aus cmd6 testet.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Jogi

Zitat von: amenomade am 11 Dezember 2020, 21:29:32
Da muss vor Bedingung 7 eine neue DOELSEIF Bedingung hinzugefügt werden, die mittels ...eq "off"  and [$SELF] eq "cmd6"... den Ausgang aus cmd6 testet.
Vielen Dank für den Tipp, damit hat es funktioniert.
Ich habe jetzt ein zusätzliche DOELSEIF eingefügt und das wait für den Zweig auf 0,0 gesetzt.
(([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [?Helligkeit] <450 and [Deckenlampe_Flur] eq "off" and [Freigabe_WeihnBel] eq "off" and [Deckenlampe_Flur] eq "off") (set Lampe_Flur bri 200) (set Lampe_Flur ct 380)## 1 Ohne Weihnachtsbeleuchtung bei Bewegung
DOELSEIF (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Deckenlampe_Flur] eq "off" and [?Helligkeit] <450 and [Freigabe_WeihnBel] eq "on" and [Claudia_anwesend] eq "off" and [Deckenlampe_Flur] eq "off") (set Lampe_Flur bri 180) (set Lampe_Flur ct 380)## 2 Mit Weihnachtsbeleuchtung und Claudia ist nicht anwesend
DOELSEIF (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Deckenlampe_Flur] eq "off" and [?Helligkeit] <450 and [Freigabe_WeihnBel] eq "on" and [Claudia_anwesend] eq "on" and ![17:00-23:30] and [Deckenlampe_Flur] eq "off") (set Lampe_Flur bri 160)  (set Lampe_Flur ct 390)## 3 Mit Weihnachtsbeleuchtung und Anwesenheit VOR 17 Uhr
DOELSEIF (([Bewegungsmelder:state] eq "motion" or [Bewegung_PIR_Flur] eq "on" or [Haustuer] eq "on") and [Deckenlampe_Flur] eq "off" and [?Helligkeit] <450 and [Freigabe_WeihnBel] eq "on" and [Claudia_anwesend] eq "on" and [17:00-23:30] and [Deckenlampe_Flur] eq "off") (set Lampe_Flur bri 70)  (set Lampe_Flur ct 450)## 4 Mit Weihnachtsbeleuchtung und Anwesenheit nach 17 Uhr
DOELSEIF ((([Freigabe_Flur_Nacht] eq "on" and [?Helligkeit] <450 and [Bewegungsmelder:state] eq "noMotion" and [Wohnzimmer] eq "off" and [Deckenlampe_Flur] eq "off")))
(set Lampe_Flur bri 14)  (set Lampe_Flur ct 490) ## 5
DOELSEIF ([Deckenlampe_Flur] eq "on") (set Lampe_Flur bri 254) (set Lampe_Flur ct 215) ## 6
DOELSEIF ([Deckenlampe_Flur] eq "off" and  [$SELF] eq "cmd6") (set Lampe_Flur bri [Dimmwert_Flur:state]) ## 7
DOELSE (set Lampe_Flur ct 450) (set Lampe_Flur bri [Dimmwert_Flur:state]) ## 8


Jetzt springt das DOIF von cmd6 sofort nach cmd8 wenn die Deckenlampe ausschaltet. So wie es sein soll.

Was da genau passiert, und wieso das wait von -jetzt- cmd8 nicht zuschlägt habe ich allerdings nicht verstanden.

Ich verstehe das so (entschuldige die laienhafte Ausdrucksweise):
cmd7 sorgt dafür, dass bei Ausschalten der Deckenlampe_Flur über cmd7 gegangen wird. cmd7 ist dann aber sofort unwahr, weil [$SELF] eq "cmd6" nicht stimmt, also geht es weiter nach cmd8. Aber wieso wirkt das wait dann nicht?
Wie gesagt, es funktioniert jetzt, aber ich würde es auch gerne verstehen.
Gruß,
Jogi




amenomade

Nicht ganz.

Beim ausschalten, geht er auf cmd7, der hat kein Timer => Lampe sofort aus.
Würde nix mehr triggern, würde er auf cmd7 bleiben.
Aber irgendein anderes Device triggert wieder das DOIF, und dann springt er auf cmd8
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Jogi