DOIF bleibt bei cmd_1 stehen, obwohl Bedingung nicht mehr wahr ist (gelöst)

Begonnen von edition, 16 April 2024, 20:58:31

Vorheriges Thema - Nächstes Thema

edition

Guten Abend zusammen

Ich nutze das gassistant Modul zur Sprachsteuerung in fhem. Für "Mehrfachschaltungen" habe ich einen dummy namens "Fernbedienung", der per homebridgeMapping vordefinierte states annehmen kann. Darauf reagiert dann das jeweilige DOIF.
Beispiel:
([Fernbedienung:state] eq "Nachtschicht")(set harmony_79260316 command PowerOff; set DM900UHD off; set Schummerlicht_Fernseher off; set Schummerlicht_Sofa off; set RGBW_Fenster_Dim off; define tmp_time1 at +00:00:05 set Fernbedienung neutral)
Hier wird der Fernseher, die Dreambox und die Lichter im Wohnzimmer ausgeschaltet und  die "Fernbedienung auf den state "neutral" gesetzt, damit sie nicht auf "Nachtschicht stehen bleibt. Das DOIF nimmt in dem Moment auch den state cmd_2 ein. Ich kann den Befehl also mehrfach nutzen, ohne das etwas anderes passieren muß. So ist das auch gewünscht.

Anders verhält es sich, wenn ein DOELSEIF ins Spiel kommt.
Beispiel:
    
([Fernbedienung:state]eq"feierabend" and ([Progwechsel_Wohnzimmer:Status]eq"Frühschicht" or [Progwechsel_Wohnzimmer:Status]eq"Spätschicht"))(set harmony_79260316 command PowerOff; set DM900UHD off; set Schummerlicht_Fernseher off; set Schummerlicht_Sofa off; set RGBW_Fenster_Dim off; set Flurlicht_oben on; set Schalter_Schlafzimmer_Sw_01 on; define tmp_time2 at +00:00:05 set Fernbedienung neutral) DOELSEIF ([Fernbedienung:state]eq"feierabend" and [Progwechsel_Wohnzimmer:Status]eq"Nachtschicht")(set harmony_79260316 command PowerOff; set DM900UHD off; set Schummerlicht_Fernseher off; set Schummerlicht_Sofa off; set RGBW_Fenster_Dim off; set Schalter_Schlafzimmer_Sw_01 on; define tmp_time3 at +00:00:05 set Fernbedienung neutral)
Hier sollen unterschiedliche Schaltungen durchgeführt werden, abhängig davon, ob ich Früh- oder Spätschicht bzw. Nachtschicht habe. Das funktioniert leider nur einmal. Die "Fernbedienung" wird zwar ebenfalls auf "neutral" gesetzt, aber das DOIF bleibt bei cmd_1 stehen.
Warum?
Beim 2. mal schaltet nichts und die "Fernbedienung" bleibt auf "feierabend" stehen. Wenn ich nicht aufpasse, wird am Sonntag bei "Progwechsel" auf die Schicht der Folgewoche das Licht im Flur und im Schlafzimmer eingeschaltet. Das soll natürlich nicht sein.
Habe ich da einen Fehler drin, oder ist das so?

Gruß
edition

Per

Entweder packst du ein DOELSEIF "neutral" oder ein DOELSE dazu.
Einzeiler haben ein virtuelles DOELSE "integriert".

edition

Einfach DOELSE dahintersetzen? Also so:

([Fernbedienung:state]eq"feierabend" and ([Progwechsel_Wohnzimmer:Status]eq"Frühschicht" or [Progwechsel_Wohnzimmer:Status]eq"Spätschicht"))(set harmony_79260316 command PowerOff; set DM900UHD off; set Schummerlicht_Fernseher off; set Schummerlicht_Sofa off; set RGBW_Fenster_Dim off; set Flurlicht_oben on; set Schalter_Schlafzimmer_Sw_01 on; define tmp_time2 at +00:00:05 set Fernbedienung neutral) DOELSEIF ([Fernbedienung:state]eq"feierabend" and [Progwechsel_Wohnzimmer:Status]eq"Nachtschicht")(set harmony_79260316 command PowerOff; set DM900UHD off; set Schummerlicht_Fernseher off; set Schummerlicht_Sofa off; set RGBW_Fenster_Dim off; set Schalter_Schlafzimmer_Sw_01 on; define tmp_time3 at +00:00:05 set Fernbedienung neutral) DOELSE

Per

Ja, aber wg der Lesbarkeit würde ich für jeden Fall (und hier für jedes Cmd) eine neue Zeile nehmen. (So erkennt man auch besser, das beide Fälle das gleiche Doing haben)
   
([Fernbedienung:state] eq "feierabend" and ([Progwechsel_Wohnzimmer:Status] eq "Frühschicht" or [Progwechsel_Wohnzimmer:Status] eq "Spätschicht"))
(set harmony_79260316 command PowerOff,
 set DM900UHD off,
 set Schummerlicht_Fernseher off,
 set Schummerlicht_Sofa off,
 set RGBW_Fenster_Dim off,
 set Flurlicht_oben on,
 set Schalter_Schlafzimmer_Sw_01 on,
 define tmp_time2 at +00:00:05 set Fernbedienung neutral)
DOELSEIF ([Fernbedienung:state] eq "feierabend" and [Progwechsel_Wohnzimmer:Status] eq "Nachtschicht")
(set harmony_79260316 command PowerOff,
 set DM900UHD off,
 set Schummerlicht_Fernseher off,
 set Schummerlicht_Sofa off,
 set RGBW_Fenster_Dim off,
 set Schalter_Schlafzimmer_Sw_01 on,
 define tmp_time3 at +00:00:05 set Fernbedienung neutral)
DOELSE
Weiterhin statt defi at mit attr wait.
Außerdem würde ich überlegen, ob die jeweiligen Devices noch durch andere Ereignisse gesteuert werden. Ich (!) finde es übersichtlicher, alles für ein Zieldevice an einer Stelle zu haben.
Und gewöhn dir an, Perl/Fhem Befehle mit Leerzeichen zu trennen, sonst kannst du die lustigsten Fehlfunktionen bekommen.

edition

Hat gestern Abend funktioniert und steht jetzt auf "cmd_3". Sollte also auch heute wieder funktionieren. Danke dafür!

Ja, sieht wirklich übersichtlicher aus. Werde ich mir mal angewöhnen.

Gruß
edition

juemuc

Hat das Attribut "do allways" nicht funktioniert? Das spart den "dummy-Zweig".

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).