Schalten mit mehreren Bedingungen
Aufgabe:
Der FHT heizung_bad soll morgens mit Aktivierung des Bewegungsmelders piri_schlafzimmer für eineinhalb Stunden die Temperatur auf 23 Grad Celsius erhöhen und danach wieder auf 18 Grad absenken.
Allerdings nur, wenn folgende Bedingungen erfüllt sind:
- Es ist zwischen 4:30 Uhr und 9:00 Uhr,
- der Fensterkontakt Fenster_bad ist "Closed"
- der Türkontakt tfk_tuer ist "on".
Sinn soll sein, bei Bewegung im Schlafzimmer zu möglichen Aufstehzeiten (also z.b. nach dem Wecker greifen) das Bad vorzuheizen, aber nur wenn das Fenster nicht auf ist und die Tür zu (also überhaupt jemand im Schlafzimmer ist, da Tür sonst auf). Die Badheizung soll nach 1,5 Stunden von alleine wieder ausgehen.
Die Abfrage des Fensterkontakts TF ist auch dann sinnvoll wenn er mit dem FHT80b gepaired ist. Beim Öffnen des Fensters wird zwar die aktuelle Temperatur des gepairten FHT auf die Window-Temp abgesenkt, nachträgliche Änderungen werden aber als erwünschte Anhebung der Window-Temp interpretiert und auch ausgeführt. D.H. bei Auslösung des notify würde der Bad-FHT auf 23 Grad stellen, obwohl das Fenster auf ist. Daher muss der TF einzeln abgefragt werden. Dazu den TF trotz pairing vorher mit
define Fenster_bad CUL_FHTTK <TF ID>
definieren. Die (fest im TF eingestellte) TF ID ist vor dem Pairen dem Logfile zu entnehmen:
FHTTK unknown device <TF ID>, please define it
Voraussetzungen:
Definierter FHT80TF (gepairt oder ungepairt mit dem Bad FHT), Türkontakt TFK.
Script
define badbenutzung_on notify piri_schlafzimmer:on.* {\ my $hm = sprintf("%02d:%02d", $hour, $min);;\ if( $hm gt "04:30" && $hm lt "09:00" &&\ $value{tfk_tuer} eq "on" &&\ $value{Fenster_bad} eq "Closed" &&\ !$data{badbenutzung_on}) {\ $data{badbenutzung_on} = 1;;\ fhem "set heizung_bad desired-temp 23.0";;\ fhem "define at_badbenutzung_off at +01:30 trigger badbenutzung_off"\ }\ } define badbenutzung_off notify badbenutzung_off {\ fhem "set heizung_bad desired-temp 18.0";;\ delete($data{badbenutzung_on})\ }
Erläuterungen
notify piri_schlafzimmer:on.*
Filtert die Events des piri_schlafzimmer so, das nur bei Events die mit "on" beginnen notified wird. Die RegEx ".*" akzeptiert dabei auch bieliebige Zeichen (".") in beliebiger Menge ("*") nach "on", sodasss auch events wie "on-for-timer" auslösen, nicht jedoch z.b. "off".
Zu beachten ist, dass ";" und "%" innerhalb der perl expressions "{ }", z.b. "sprintf { } " verdoppelt (escaped) werden müssen , um zu verhindern, dass die Zeichen als FHEM-Kommando interpretiert werden.