FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: mareb am 14 Dezember 2016, 08:23:02

Titel: HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: mareb am 14 Dezember 2016, 08:23:02
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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: Wuppi68 am 14 Dezember 2016, 08:34:37
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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: Otto123 am 14 Dezember 2016, 09:25:04
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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag 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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag 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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: Otto123 am 14 Dezember 2016, 10:32:27
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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: DeeSPe am 14 Dezember 2016, 10:35:10
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!
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: frank am 14 Dezember 2016, 10:39:20
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.
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: Wuppi68 am 14 Dezember 2016, 10:53:25
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/
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: mareb am 14 Dezember 2016, 11:36:54
Ah, okay, event-on-Change macht Sinn...

Danke für die Infos. Mach mich dran...

Gruß,
Markus
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag 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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: Otto123 am 15 Dezember 2016, 09:08:35
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
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: Wuppi68 am 15 Dezember 2016, 09:38:17
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.'
Titel: Antw:HM-SEC-SC-2 schmeisst 3 Events für eine Aktion
Beitrag von: mareb am 16 Dezember 2016, 21:36:37
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") }