FHTTK: Benachrichtigung bei offenem Fenster: Unterschied zwischen den Versionen
Uli (Diskussion | Beiträge) (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 | in (z.B.) [[99 myUtils anlegen|99_myUtils.pm]]: | ||
<source lang="perl">sub FHTTK_status { | |||
my @fhttks = devspec2array( | my @fhttks = devspec2array("TYPE=CUL_FHTTK"); | ||
my @wopen = (); | my @wopen = (); | ||
foreach(@fhttks) { | foreach(@fhttks) { | ||
my $fhttk_window = ReadingsVal($_, | my $fhttk_window = ReadingsVal($_, "Window", "nA"); | ||
push (@wopen,$_) if ($fhttk_window eq | 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= | $resultstring="folgende Fenster sind noch offen:\n\n"; | ||
foreach(@wopen) { | foreach(@wopen) { | ||
$resultstring.= | $resultstring.="- ".$_."\n"; | ||
Log 4, | Log 4, "FHTTK_status: ". $_. "noch offen"; | ||
} | } | ||
} else { | } else { | ||
$resultstring= | $resultstring="alle Fenster sind derzeit geschlossen."; | ||
} | } | ||
return $resultstring; | return $resultstring; | ||
}</ | }</source> | ||
in die [[Konfiguration]] (hier für Eingabe in fhem.cfg formatiert): | |||
my $window_state=ReadingsVal( | |||
<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 | 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= | 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, | Log 3, "$NAME: Window ".$window_state;;\ | ||
}\ | }\ | ||
}</ | }</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 <sensor>:Open" alleine reicht nicht. Da der Sensor | 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. | ||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] |
Version vom 19. Februar 2016, 13: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.