Bisher lief die Einstellung der Temperatur der Thermostate immer über Notify. Dabei zeigte sich aber zunehmend ein Problem. Wenn zum Beispiel das Fenster offen ist und sich dann der Home-Status ändert, wird die Temperatur trotzdem gesendet und die Fenster-Offen-Temperatur übersteuert.
Um das Problem zu umgehen, hätte ich unzählige Notify anlegen müssen. Mit DOIF reicht eine Schleife pro Raum.
defmod doif_Temp_Computerzimmer DOIF ([HM_6591A8:state] eq "closed" and [p_Eltern:state] eq "present" and [HomeStatus:state] == 1) (set HM_5029B4_Clima controlManu 21.0) \
DOELSEIF ([HM_6591A8:state] eq "closed" and [p_Eltern:state] eq "absent" and [HomeStatus:state] <3) (set HM_5029B4_Clima controlManu 19.0) \
DOELSEIF ([HM_6591A8:state] eq "closed" and [HomeStatus:state] == 2) (set HM_5029B4_Clima controlManu 19.0) \
DOELSEIF ([HM_6591A8:state] eq "open") (set HM_5029B4_Clima controlManu 12.0)
attr doif_Temp_Computerzimmer room Computerzimmer
hier kann ich jetzt für jeden Raum die Temperatur steuern. Auch wird hier das offene Fenster berücksichtigt. Wichtig zum Verständnis: DOIF läuft nicht ständig in einer Schleife, sondern nur wenn Sie getriggert wird. Trigger sind hier nur die Geräte im DOIF selbst:
NOTIFYDEV | HM_6591A8,HomeStatus,p_Eltern,global |
Erklärung:
HomeStatus == 1 bedeutet Tag
HomeStatus == 2 Nacht
HomeStatus == 3 & 4 Abwesenheit bzw. Urlaub
p_Eltern:state ist der Status der Anwesenheit (structure von mehreren G-TAGs und Handy)
HM_6591A8:state ist ein Fensterkontakt
Natürlich lässt sich die Logik noch weiter ausbauen, aber fürs erste läuft es jetzt wie gewünscht.