Hi,
ich habe den HM-SEC-SC-2 an meinem Fenster installiert.
Alles gut, funktioniert.
Damit ich mitbekomme, wann das Fenster geöffnet wird, schicke ich Push notifications via Pushover. Auch das funktioniert.
Etwas verwundert war ich, dass ich für das Öffnen des Fensters gleich drei Nachrichten bekomme.
Im Log sehe ich auch drei Events: Zwei gehen jeweils zu den gepeerten Heizkörpern, eins zum LAN-Adapter.
Ich vermute, das Push wird einfach durch jedes Eventziel ausgelöst...
Kann ich das irgendwie für die Push Notifications filtern?
Beste Grüße,
Markus
das geht ganz einfach...
poste doch bitte deine Definition vom notify oder DOIF in CodeTags die Raute oben in der Knubbelleiste
vermutlich ist es nur die RegEx
Hallo Markus,
oder mach den Eventmonitor auf, schau Dir die Events genau an die gefeuert werden und passe Dein Regex vom notify so an, dass Du nur eine Nachricht bekommst.
Gruß Otto
meine Glaskugel sagt mir:
open
open (to device1)
open (to device)
also wäre open.* das tripple Event
sorry, war zu früh heute morgen...
Push notify:
define wz_fenster_rechts_notify notify fsensor_wz_rechts { if ("$EVENT" eq "open") { fhem("set push msg 'Alarm' 'Fenster rechts im Wohnzimmer wurde geöffnet.'") }}
btw: Kann man das noch was "schicker" machen? - Für mehrere Sensoren wird das schwer lesbar.
Das Log:
2016-12-14_07:59:42 fsensor_wz_rechts battery: ok
2016-12-14_07:59:42 fsensor_wz_rechts contact: open (to hk_wz_fenster)
2016-12-14_07:59:42 fsensor_wz_rechts open
2016-12-14_07:59:42 fsensor_wz_rechts trigger_cnt: 69
2016-12-14_07:59:42 fsensor_wz_rechts battery: ok
2016-12-14_07:59:42 fsensor_wz_rechts contact: open (to hk_wz_tuer)
2016-12-14_07:59:42 fsensor_wz_rechts open
2016-12-14_07:59:42 fsensor_wz_rechts trigger_cnt: 69
2016-12-14_07:59:43 fsensor_wz_rechts battery: ok
2016-12-14_07:59:43 fsensor_wz_rechts contact: open (to HMLAN1)
2016-12-14_07:59:43 fsensor_wz_rechts open
2016-12-14_07:59:43 fsensor_wz_rechts trigDst_3222DE: noConfig
Das Event wäre dann open.HMLAN1 bspw. wenn ich die Geräte einzeln abgreifen will? (oder halt nen kluges pattern)
Beste Grüße,
Markus
Zitat von: Wuppi68 am 14 Dezember 2016, 09:34:47
meine Glaskugel sagt mir:
open
open (to device1)
open (to device)
also wäre open.* das tripple Event
Na der wäre ja dann sogar 6-fach ;D
ich würde auf einen Peer Event triggern z.B. open (to hk_wz_fenster)
Nach meiner Erfahrung passiert es manchmal (ich kann nicht sagen wann und warum) das der Event (to <IO>) nicht passiert und stattdessen (to broadcast) gesendet wird.
Der zum Peer sollte immer kommen, könnte aber auch mehrfach kommen, dann wüsstest Du die Kommunikation mit dem Peer ist gestört.
Gruß Otto
Zitat von: mareb am 14 Dezember 2016, 10:10:26
sorry, war zu früh heute morgen...
Push notify:
define wz_fenster_rechts_notify notify fsensor_wz_rechts { if ("$EVENT" eq "open") { fhem("set push msg 'Alarm' 'Fenster rechts im Wohnzimmer wurde geöffnet.'") }}
btw: Kann man das noch was "schicker" machen? - Für mehrere Sensoren wird das schwer lesbar.
Das Log:
2016-12-14_07:59:42 fsensor_wz_rechts battery: ok
2016-12-14_07:59:42 fsensor_wz_rechts contact: open (to hk_wz_fenster)
2016-12-14_07:59:42 fsensor_wz_rechts open
2016-12-14_07:59:42 fsensor_wz_rechts trigger_cnt: 69
2016-12-14_07:59:42 fsensor_wz_rechts battery: ok
2016-12-14_07:59:42 fsensor_wz_rechts contact: open (to hk_wz_tuer)
2016-12-14_07:59:42 fsensor_wz_rechts open
2016-12-14_07:59:42 fsensor_wz_rechts trigger_cnt: 69
2016-12-14_07:59:43 fsensor_wz_rechts battery: ok
2016-12-14_07:59:43 fsensor_wz_rechts contact: open (to HMLAN1)
2016-12-14_07:59:43 fsensor_wz_rechts open
2016-12-14_07:59:43 fsensor_wz_rechts trigDst_3222DE: noConfig
Das Event wäre dann open.HMLAN1 bspw. wenn ich die Geräte einzeln abgreifen will? (oder halt nen kluges pattern)
Beste Grüße,
Markus
So vielleicht?
define fsensor_notify notify fsensor_.*:contact.* {fhem "set push msg Alarm ".AttrVal($name,"alias",$name)." wurde geöffnet." if ($EVTPART1 =~ /open/)}
Gruß
Dan
P.S. "event-on-change-reading .*" sollte weitere Besserung bringen!
mehrfach kommt ja nur, weil hier wahrscheinlich kein attribut event-on-change gesetzt ist.
trotzdem würde ich die regex spezieller gestalten, damit das notify nicht bei jedem event ausgeführt werden muss.
ich würde das/den Notify so machen:
define fsensor_notify notify fsensor_.*:(open|close) {fhem "set push msg Alarm ".AttrVal($name,"alias",$name)." wurde $EVTPART1 ." }
und
attr fsensor_.* event-on-Change .*
Ralf
btw: für Abfragen ob eine Zeichenkette in einer anderen Zeichenkette vorhanden ist, ist index deutlich schneller als /Zeichenkette/
Ah, okay, event-on-Change macht Sinn...
Danke für die Infos. Mach mich dran...
Gruß,
Markus
hm, jetzt brauch noch mal Hilfe bei nem Escaping-Problem:
define fsensor_notify notify fsensor_.*:open { fhem('set push msg "Fenster geöffnet" "Fenster '.AttrVal($name,"alias",$name).' wurde geöffnet."') }
Das '.AttrVal[].. .' führt zu nem Fehler. Setze ich nen einfachen String, funktioniert die Push-Nachricht.
Wie muss ich denn das Escapen?
Oder liegt der Fehler woanders? - Ich finde leider nichts in den Logs...
Gruß,
Markus
Moin Markus,
warum ist den der erste Ansatz immer gleich so "kompliziert"?
Lass als erstes mal das unnötige {fhem()} weg.
Den Rest würde ich so machen:
set push msg "Fenster geöffnet" "Fenster .AttrVal($name,"alias",$name). wurde geöffnet."
Wobei das nur geraten ist, ich habe keine Ahnung von push.
Aber teste die push msg einfach separat.
Gruß Otto
Zitat von: mareb am 15 Dezember 2016, 07:56:44
hm, jetzt brauch noch mal Hilfe bei nem Escaping-Problem:
define fsensor_notify notify fsensor_.*:open { fhem('set push msg "Fenster geöffnet" "Fenster '.AttrVal($name,"alias",$name).' wurde geöffnet."') }
Das '.AttrVal[].. .' führt zu nem Fehler. Setze ich nen einfachen String, funktioniert die Push-Nachricht.
Wie muss ich denn das Escapen?
Oder liegt der Fehler woanders? - Ich finde leider nichts in den Logs...
Gruß,
Markus
Hallo Markus,
welcher Fehler erscheint denn?
Ansonsten, so wie ich Perl verstanden habe:
"" führt eine String Evaluierung aus --> $XYZ = 'Blablabla'; $test ="$XYZ" --> dann steht in $test Blablabla
'' macht es nicht --> $XYZ = 'Blablabla'; $test ="'$XYZ' --> dann steht in $test $XYZ
demzufolge würde ich den fhem Aufruf wie folgt ändern (keine Codetags, da Formatierung)
alt:
define fsensor_notify notify fsensor_.*:open { fhem('set push msg "Fenster geöffnet" "Fenster '.AttrVal($name,"alias",$name).' wurde geöffnet."') }
neu:
define fsensor_notify notify fsensor_.*:open { fhem(
"set push msg
'Fenster geöffnet
' 'Fenster
' . AttrVal ($name,
'alias
', $name) .
' wurde geöffnet.
") }
oder noch einfach vom Otto123 im Post vorher (Anführungszeichen geändert):
set push msg 'Fenster geöffnet' 'Fenster . AttrVal($name, 'alias', $name) . ' wurde geöffnet.'
Das hat auch noch nicht gegriffen...
ich habe mich kurzerhand entschlossen, daraus eine eigene Subroutine zu bauen:
sub PushNotification($$) {
my ($device,$action) = @_;
my $alias=AttrVal($device,"alias", $device);
fhem("set push msg \"Fenster/Tür $action\" \"$alias wurde $action.\"");
}
Die Definition(en) sind dann:
define sensor_notify_open notify (t|f)sensor_.*:open { PushNotification($NAME, "geöffnet") }
define sensor_notify_close notify (t|f)sensor_.*:closed { PushNotification($NAME, "geschlossen") }