FHTTK: Benachrichtigung bei offenem Fenster

Aus FHEMWiki
Version vom 10. Mai 2013, 21:44 Uhr von Generix (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Wer wird nicht gerne per Mail benachrichtigt, wenn ein Fenster auf- oder zugemacht wird? Richtig komfortabel ist es, wenn man dann auch noch gleich eine Liste …“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Wer wird nicht gerne per Mail benachrichtigt, wenn ein Fenster auf- oder zugemacht wird? Richtig komfortabel ist es, wenn man dann auch noch gleich eine Liste aller FHTTK-devices mitgeliefert bekommt, die den Status "Window: Open" haben:

in 99_marte.pm

sub FHTTK_status {
 my @fhttks = devspec2array("TYPE=CUL_FHTTK");
 my @wopen = ();
 foreach(@fhttks) {
  my $fhttk_window = ReadingsVal($_, "Window", "nA");
  push (@wopen,$_) if ($fhttk_window eq "Open" );
 }
 my $num_wopen = @wopen;
 my $resultstring='';
 if ( $num_wopen gt 0 ) {
  $resultstring="folgende Fenster sind noch offen:\n\n";
  foreach(@wopen) {
   $resultstring.="- ".$_."\n";
   Log 4, "FHTTK_status: ". $_. "noch offen";
  }
 } else {
  $resultstring="alle Fenster sind derzeit geschlossen.";
 }
 return $resultstring;
}

in die Config

define n_Fenster notify .*:Window.*(Open|Closed) { \
 my $window_state=ReadingsVal("@", "Window", "nA");;\
 my $deftype=$defs{@}{TYPE};;\
 return if ( $deftype ne "CUL_FHTTK" );;\
 if ( $defs{@}{PREVSTATE} ne $window_state ) { \
  my $fhttk_status=FHTTK_status;;\
  my $subject="FHEM: Fenster @ ".$window_state;; \
  fb_mail('xxx@@xxx.de',$subject,$fhttk_status);;\
  Log 3, "@: Window ".$window_state;;\
 }\
}

Achtung: Hier wird fb_mail als Mailer benutzt (siehe auch E-Mail senden) - je nach *nix-Version muss u.U. der Pfad angepasst sowie die entsprechenden Codezeilen in die .pm-Datei übernommen werden.

Randbemerkung zum Config-Code: Ein "notify <sensor>:Open" funktioniert nicht. Da der Sensor in regelmässigen Abständen seinen Status sendet, muss zudem der vorherige Status abgefragt werden, um nur bei Statusänderungen zu reagieren.