Schalten mit mehreren Bedingungen: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „== Aufgabe: == Der FHT heizung_bad soll morgens mit Aktivierung des Bewegungsmelders piri_schlafzimmer für eineinhalb Stunden die Temperatur auf 23 Grad Celsi…“)
 
(→‎Script: %% => %)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 26: Zeile 26:
== Script ==
== Script ==
  <nowiki>define badbenutzung_on notify piri_schlafzimmer:on.* {\  
  <nowiki>define badbenutzung_on notify piri_schlafzimmer:on.* {\  
  my $hm = sprintf("%%02d:%%02d", $hour, $min);;\  
  my $hm = sprintf("%02d:%02d", $hour, $min);;\  
  if( $hm gt "04:30" &amp;&amp; $hm lt "09:00" &amp;&amp;\  
  if( $hm gt "04:30" &amp;&amp; $hm lt "09:00" &amp;&amp;\  
   $value{tfk_tuer} eq "on" &amp;&amp;\  
   $value{tfk_tuer} eq "on" &amp;&amp;\  
Zeile 41: Zeile 41:
   delete($data{badbenutzung_on})\  
   delete($data{badbenutzung_on})\  
}</nowiki>
}</nowiki>
== Erläuterungen ==
== Erläuterungen ==
  <nowiki>notify piri_schlafzimmer:on.*</nowiki>
  <nowiki>notify piri_schlafzimmer:on.*</nowiki>
Zeile 47: Zeile 48:


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.
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.
[[Kategorie:Code Snippets]]

Aktuelle Version vom 17. November 2015, 23:48 Uhr

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.