HM-SEC-SC-2 schmeisst 3 Events für eine Aktion

Begonnen von mareb, 14 Dezember 2016, 08:23:02

Vorheriges Thema - Nächstes Thema

mareb

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

Wuppi68

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
FHEM unter Proxmox als VM

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wuppi68

meine Glaskugel sagt mir:

open
open (to device1)
open (to device)

also wäre open.* das tripple Event
FHEM unter Proxmox als VM

mareb

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

DeeSPe

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!
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

frank

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.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Wuppi68

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/
FHEM unter Proxmox als VM

mareb

Ah, okay, event-on-Change macht Sinn...

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

Gruß,
Markus

mareb

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wuppi68

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.'
FHEM unter Proxmox als VM

mareb

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") }