FHTTK: Benachrichtigung bei offenem Fenster: Unterschied zwischen den Versionen

Aus FHEMWiki
(Beispiel-confi-Auszug umgestellt von @/% auf $NAME/$EVENT)
K (Code Snippets als "source" formatiert)
Zeile 1: Zeile 1:
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:
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 [[CUL_FHTTK|FHTTK-devices]] mitgeliefert bekommt, die den Status "Window: Open" haben:


in 99_marte.pm
in (z.B.) [[99 myUtils anlegen|99_myUtils.pm]]:


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


<nowiki>define n_Fenster notify .*:Window.*(Open|Closed) { \
in die [[Konfiguration]] (hier für Eingabe in fhem.cfg formatiert):
  my $window_state=ReadingsVal(&quot;$NAME&quot;, &quot;Window&quot;, &quot;nA&quot;);;\
 
<source lang="perl">define n_Fenster notify .*:Window.*(Open|Closed) { \
  my $window_state=ReadingsVal("$NAME", "Window", "nA");;\
  my $deftype=$defs{$NAME}{TYPE};;\
  my $deftype=$defs{$NAME}{TYPE};;\
  return if ( $deftype ne &quot;CUL_FHTTK&quot; );;\
  return if ( $deftype ne "CUL_FHTTK" );;\
  if ( $defs{$NAME}{PREVSTATE} ne $window_state ) { \
  if ( $defs{$NAME}{PREVSTATE} ne $window_state ) { \
   my $fhttk_status=FHTTK_status;;\
   my $fhttk_status=FHTTK_status;;\
   my $subject=&quot;FHEM: Fenster $NAME &quot;.$window_state;; \
   my $subject="FHEM: Fenster $NAME ".$window_state;; \
   fb_mail('xxx@@xxx.de',$subject,$fhttk_status);;\
   fb_mail('xxx@@xxx.de',$subject,$fhttk_status);;\
   Log 3, &quot;$NAME: Window &quot;.$window_state;;\
   Log 3, "$NAME: Window ".$window_state;;\
  }\
  }\
}</nowiki>
}</source>
 
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.
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 &lt;sensor&gt;:Open" alleine reicht nicht. Da der Sensor in alle 2 Minuten seinen Status sendet, muss zudem der vorherige Status abgefragt werden, um nur bei Statusänderungen zu reagieren.
Randbemerkung zum Config-Code: Ein "notify &lt;sensor&gt;:Open" alleine reicht nicht. Da der Sensor etwa alle zwei Minuten seinen Status sendet, muss zudem der vorherige Status abgefragt werden, um nur bei Statusänderungen zu reagieren.
 
[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Version vom 19. Februar 2016, 14:48 Uhr

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 (z.B.) 99_myUtils.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 Konfiguration (hier für Eingabe in fhem.cfg formatiert):

define n_Fenster notify .*:Window.*(Open|Closed) { \
 my $window_state=ReadingsVal("$NAME", "Window", "nA");;\
 my $deftype=$defs{$NAME}{TYPE};;\
 return if ( $deftype ne "CUL_FHTTK" );;\
 if ( $defs{$NAME}{PREVSTATE} ne $window_state ) { \
  my $fhttk_status=FHTTK_status;;\
  my $subject="FHEM: Fenster $NAME ".$window_state;; \
  fb_mail('xxx@@xxx.de',$subject,$fhttk_status);;\
  Log 3, "$NAME: 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" alleine reicht nicht. Da der Sensor etwa alle zwei Minuten seinen Status sendet, muss zudem der vorherige Status abgefragt werden, um nur bei Statusänderungen zu reagieren.