notify wird nicht (richtig?!) getriggert

Begonnen von t1me2die, 02 Februar 2018, 11:52:56

Vorheriges Thema - Nächstes Thema

t1me2die

Moin liebe Community,

ich habe mir einen HomeMatic Handsender gekauft und diesen auch erfolgreich eingebunden.
Nun wollte ich die vier Button jeweils einem Raum zuweisen und diesen abhängig vom Zustand eines Gerätes "An" bzw. "Aus" schalten.

Dazu habe ich mir ein notify gebaut, welches auf alle vier Button triggern soll:

So schaut mein Define aus:

define n_handteil_Mel notify handteil_Mel_Btn_01:state:.*|handteil_Mel_Btn_02:state:.*|handteil_Mel_Btn_03:state:.*|handteil_Mel_Btn_04:state:.*
{ remoteControll($NAME) }


List vom Notify:

Internals:
CFGFN
DEF handteil_Mel_Btn_01:state:.*|handteil_Mel_Btn_02:state:.*|handteil_Mel_Btn_03:state:.*|handteil_Mel_Btn_04:state:.* { remoteControll($NAME) }
NAME n_handteil_Mel
NOTIFYDEV handteil_Mel_Btn_02,handteil_Mel_Btn_04,handteil_Mel_Btn_03,handteil_Mel_Btn_01
NR 9104
NTFY_ORDER 50-n_handteil_Mel
REGEXP handteil_Mel_Btn_01:state:.*|handteil_Mel_Btn_02:state:.*|handteil_Mel_Btn_03:state:.*|handteil_Mel_Btn_04:state:.*
STATE active
TYPE notify
Readings:
2018-02-02 11:22:55 state active
Attributes:
room Residents


Da ich die Fernbedienung gerade nicht zur Hand habe, habe ich via:

setreading handteil_Mel_Btn_02 state Short

ein Event ausgelöst und habe nun erwartet, dass der notify anspringt und irgendwas macht.
Leider bleibt der notify weiter auf "activ" stehen und bekommt keinen Zeitstempel, sprich er ist nicht angesprungen.

Hier ein List vom dem Btn_02, welchen ich per setreading verändert habe:

Internals:
DEF 5CA09302
NAME handteil_Mel_Btn_02
NOTIFYDEV global
NR 419
NTFY_ORDER 50-handteil_Mel_Btn_02
STATE Short
TYPE CUL_HM
chanNo 02
device handteil_Mel

Readings:
2018-01-31 21:58:56 R-sign off
2018-01-31 21:59:30 RegL_01. 04:10 08:00 09:00 00:00 2018-02-02 11:24:47 state Short
2018-02-02 11:24:47 state Short
2018-02-01 22:13:44 trigger Short_56
2018-02-01 22:13:44 trigger_cnt 56
Helper:
BNO 56
BNOCNT 1
Expert:
def 1
det 0
raw 1
tpl 0
Role:
chn 1
Attributes:
event-on-update-reading state
model HM-RC-4-3
peerIDs 00000000,
room CUL_HM,Residents


Ich hätte jetzt erwartet, dass mein notify anspringt und irgendwas macht.
Die Sub's in meiner 99_myUtils sind z.Z. irrelevant, da ich erstmal verstehen will, warum der RegEx / notify nicht greift.

Recht herzlichen Dank für Eure Hilfe.

Gruß
Mathze

frank

ich würde immer auf einem separaten browsertab den eventmonitor einschalten, um die events genau zu sehen.
mit eingeschalteter fhem.log option kann man auch gleichzeitig fehler erkennen, falls verbose richtig eingestellt ist.
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

t1me2die

Im Eventmonitor sehe ich beim absetzen von:


setreading handteil_Mel_Btn_02 state Short1


dann folgende Meldung:

2018-02-02 12:09:25 CUL_HM handteil_Mel_Btn_02 Short1


Das bringt mich nun leider nicht weiter, weswegen mein notify nicht anspringt.

Gruß
Mathze

Thyraz

#3
Man sieht dort, dass im Event kein state auftaucht. Sondern nur "handteil_Mel_Btn_02 Short1".
Entsprechend musst du dein Notify anpassen.

edit:
Allerdings finde ich es komisch, dass dies bei setreading state passiert.
Hier wird ja normal ein reading names state erzeugt und nicht der interne state des Geräts gesetzt (Dies würde man mit "setstate <device> bla" machen).

Und bei einem Event eines Readings hätte ich jetzt auch erwartet, dass dieses im Event mit auftaucht.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

nils_

du könntest auch die regex vom notify anpassen:

define n_handteil_Mel notify handteil_Mel_Btn_.*
{ remoteControll($NAME) }


oder ist da state wichtig?
viele Wege in FHEM es gibt!

Thyraz

Hm.. sieht so aus als ob ich oben falsch liege und das Reading state normal doch dem entspricht was im reading state steht.

Dann würde die Besonderheit, dass bei state Änderung im Event das "state" verschluckt wird hier doch greifen und es macht Sinn,
dass du nur Device und Wert siehst.

Somit wie nils_ geschrieben hat dein notify anpassen.

Es gibt auch noch bei notify das Attribut addStateEvent.
Wenn ich das richtig interpretiere könnte es dazu führen, dass das state so drin bleiben darf wie du es bisher hast.

Zitat
addStateEvent
The event associated with the state Reading is special, as the "state: " string is stripped, i.e $EVENT is not "state: on" but just "on". In some circumstances it is desireable to get the event without "state: " stripped. In such a case the addStateEvent attribute should be set to 1 (default is 0, i.e. strip the "state: " string).
Note 1: you have to set this attribute for the event "receiver", i.e. notify, FileLog, etc.
Note 2: this attribute will only work for events generated by devices supporting the readingFnAttributes.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

frank

erhöhe verbose beim notify.
was passiert, wenn du die funktion mit dem namen ausführst?
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

t1me2die

Verbose auf 5 hat leider auch keinen weiteren Aufschluss im Log gegeben, alles blieb wie gewohnt.

Ich habe mein notify nun wie nils schrieb angepasst und sofort springt es an!

Erklärt leider immer noch nicht, wieso mein RegEx explizit auf "state" nicht wollte.

Ich nehme es jetzt erstmal so hin und werde meine Sub's nun testen.

Recht herzlichen Dank an Euch.

Gruß
Mathze

frank

#8
deine "regex" aus dem ersten post ist genau genommen keime echte regex. der erste doppelpunkt nach jedem namen existiert ja gar nicht im event.
dieser leitet eine sonderbehandlung der regex ein. siehe comandref, notify.

du hast/erwartest dann im prinzip 4x sonderbehandlung durch die pipe zeichen, was anscheinend nicht korrekt erkannt werden kann.
eventuell funktioniert es noch beim ersten device, also pro regex 1x sonderbehandlung.

wenn du diese doppelpunkte in einen punkt änderst, sollte es funktionieren, da echte regex auf das event.

edit:
deshalb nutze ich auch immer den "echten" regex mode.
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

t1me2die

Zitat von: frank am 02 Februar 2018, 13:40:17
edit:
deshalb nutze ich auch immer den "echten" regex mode.

Was meinst du mit "echten" regex mode?
Ich habe den "Regexp wizard" benutzt.
Ich wähle meinen Button und das jeweilige Reading aus, auf welches ich reagieren will.

Das bei einem:
setreading Btn_02 state XXX
anscheinend kein Event ausgelöst wird, ist mir leider immer noch nicht klar.

Nach meinem Verständnis (so habe ich es bisher immer verstanden gehabt) hätte ein
define n_Bla notify Btn_02:state:.* { ... }

Bei jeder Änderung des Readings "state" ausgelöst werden müssen.
Aus diesem Grund habe ich auch das Attribut "event-on-update-reading = state" bei den jeweiligen Btn_0X gesetzt, damit es bei jeder Betätigung des physischen Knopfes auf der HomeMatic Fernbedienung ein neues Event mit einem neuen Zeitstempel auslöst.

Mein Ziel war es lediglich auf das Reading "state" von Btn_01, Btn_02, Btn_03 & Btn_04 zu reagieren.

Falls ich hier doch irgendwas falsch verstanden haben sollte, muss ich mir nochmal genau das notify WIKI reinprügeln, ich ging bisher davon aus, dass ich es so richtig verstanden hatte.

Gruß
Mathze

Beta-User

Der Event-Monitor macht m.E. immer noch eine runde Klammer () um alles bei alternativen Trigger-Events, bin mir aber nicht ganz sicher.

Hier wäre aber insgesamt ein "[1-4]" einfacher, oder? Also:

define n_handteil_Mel notify handteil_Mel_Btn_0[1-4]:state:.* { remoteControll($NAME) }


Evtl. solltest du noch nach short und long (-release) abgrenzen.

Was die Sonderbehandlung von state angeht: Das ist eine immer wiederkehrende Diskussion, und ob ein setreading an der Stelle dann gleich reagiert wie ein "echtes" Event ist halt gerade die Frage...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

#11
Ist das wieder einer von den vielen "Ich habe eine Theorie, denke mir was aus, was praktisch sowieso nicht geht und frage mal ab" Threads?

Ich habe mal Tastendrücke im Event Monitor aufgenommen:
2018-02-02 16:15:24 CUL_HM HM_535F7A trigLast: HM_53F520_lock:short
2018-02-02 16:15:24 CUL_HM HM_535F7A trig_HM_53F520_lock: Short_22
2018-02-02 16:15:24 CUL_HM HM_53F520 battery: ok
2018-02-02 16:15:24 CUL_HM HM_53F520 HM_53F520_lock Short
2018-02-02 16:15:24 CUL_HM HM_53F520_lock Short 1_22 (to HM_535F7A)
2018-02-02 16:15:24 CUL_HM HM_53F520_lock trigger: Short_22
2018-02-02 16:15:24 CUL_HM HM_53F520_lock triggerTo_HM_535F7A: Short_22
2018-02-02 16:15:24 CUL_HM HM_53F520_lock trigger_cnt: 22
2018-02-02 16:15:24 CUL_HM HM_53F520 aesReqTo: HM_535F7A
2018-02-02 16:15:24 CUL_HM HM_53F520_lock triggerTo_HM_535F7A: Short_22_ack


2018-02-02 16:17:39 CUL_HM FB12 battery: ok
2018-02-02 16:17:39 CUL_HM FB12 FB12_Btn_01 Short
2018-02-02 16:17:39 CUL_HM FB12_Btn_01 Short 1_121 (to RolloKUR)
2018-02-02 16:17:39 CUL_HM FB12_Btn_01 trigger: Short_121
2018-02-02 16:17:39 CUL_HM FB12_Btn_01 triggerTo_RolloKUR: Short_121
2018-02-02 16:17:39 CUL_HM FB12_Btn_01 trigger_cnt: 121
2018-02-02 16:17:39 CUL_HM RolloKUR trigLast: FB12_Btn_01:short
2018-02-02 16:17:39 CUL_HM RolloKUR trig_FB12_Btn_01: Short_121
2018-02-02 16:17:39 CUL_HM FB12_Btn_01 triggerTo_RolloKUR: Short_121_ack
2018-02-02 16:17:39 CUL_HM RolloKUR deviceMsg: 99.5 (to FB12)

Da gibt es nix mit state.
Und ich habe mal den Befehl abgesetztsetreading FB12 state Short
Da gibt es den Event - auch nix mit state2018-02-02 16:20:08 CUL_HM FB12 Short

Jetzt frage ich mich verzweifelt warum diese Theorie verfolgt wird:
ZitatIch habe den "Regexp wizard" benutzt.
Ich wähle meinen Button und das jeweilige Reading aus, auf welches ich reagieren will.

Das hier wäre eine sinnvolle Vorgehensweise
https://wiki.fhem.de/wiki/Event_monitor#Vorgehensweise_beim_Anlegen_eines_Ger.C3.A4tes

Manchmal wird es mir irgendwie zuviel .... Diese "Aufgabenstellung an die Community" hat keinerlei praktischen Bezug.  :o

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