Hallo die Runde,
ich habe ein mehrere DOIF für die Heizungsteuerung laufen.
Wie hier z.B. im Wohnzimmer:
defmod WZ.DOIF.Steuerung.Heizung DOIF ((( [06:00-22:00|Mo Di Mi Do] or \
[06:00-23:59|Fr] or \
[08:30-23:59|Sa] or \
[08:30-22:00|So]) and [$SELF:TargetTemp] and [Bewohner] eq "home" and [WZ.Sensor.Tuer.TR] eq "closed") or [HA.Dummy.Party] eq "IsParty" )\
(\
setex WZ.Heizung_Clima desired-temp [$SELF:TargetTemp]\
\
)\
DOELSEIF([WZ.Sensor.Tuer.TR] eq "closed")\
(\
setex WZ.Heizung_Clima desired-temp 16.0\
)\
DOELSEIF([WZ.Sensor.Tuer.TR] ne "closed")\
(\
setex WZ.Heizung_Clima desired-temp off\
)
attr WZ.DOIF.Steuerung.Heizung do always
attr WZ.DOIF.Steuerung.Heizung icon helper_doif
attr WZ.DOIF.Steuerung.Heizung readingList TargetTemp
attr WZ.DOIF.Steuerung.Heizung room 1.1_Wohnzimmer,2.0_Heizung,9.2_DOIF
attr WZ.DOIF.Steuerung.Heizung selftrigger all
attr WZ.DOIF.Steuerung.Heizung wait 0:0:150
Mir ist aber gestern Nacht (00:30) aufgefallen das es nicht getriggert wurde, erst wo ich dann ein set WZ.DOIF.Steuerung.Heizung checkall
angestoßen habe ist das DOIF im cmd 2 gesprungen.
Mache ich hier was falsch ?
Gruß
Dennis
Hallo Dennis,
ich habe mal irgendwann verstanden: Es kommt ein trigger von einem der beteiligten Geräte , DOIF rattert los, beim ersten erfüllten Bedingungszweig bleibt er hängen (alle weiteren werden nicht abgearbeitet).
Dies hier [WZ.Sensor.Tuer.TR] eq "closed") tritt in zwei Zweigen auf.
Ich würde also deine Frage mit ja beantworten :)
Gruß Otto
Hi Otto,
so hatte ich es auch erwartet, da der erste Zweig getriggert wurde und nicht zutrifft sollte er doch die Bedingung von den zweiten Zweig prüfen.
Oder ?
Ich kann nicht ausschließen, dass er nicht zutrifft. Zumindest nicht aus diesen Infos.
Ansonsten solltest Du in Zweig 1 die Klammern prüfen, es wird erst and abgearbeitet und dann or -> http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
Und ich würde sagen Du brauchst hier do always nicht, aber vielleicht ist es egal.
Gruß Otto