Event triggert 3x Notify?

Begonnen von Guybrush, 05 Juni 2020, 15:22:32

Vorheriges Thema - Nächstes Thema

Guybrush

Hallo zusammen,

ich habe das Problem, dass scheinbar ein Event 3x zeitgleich getriggert wird. Konkret habe ich eine KNX Wetterstation, die regelmäßig mitteilt, ob es regnet (1|true) oder nicht (0|false). Dafür hab ich mir ein Device angelegt:

defmod Wetterstation.Regen KNX ***:dpt1.002
attr Wetterstation.Regen IODev KNX
attr Wetterstation.Regen event-min-interval state:60


Da ich verschiedene Aktionen machen will, wenn es regnet, habe ich mir ein Notify dafür angelegt:

defmod Wetterstation.Regen.Check notify Wetterstation.Regen {\
Log3 $NAME, 5, "Name: $NAME, Event: $EVENT";;\
if ($EVENT eq "true") {\
fhem("set Wetterstation.Regen.LastTimestamp ".round(time(),0));;\
fhem("set ***");;\
} else {\
if (time() - ReadingsVal("Wetterstation.Regen.LastTimestamp", "state", time()) > 86400) {\
fhem("set ***");;\
}\
}\
}

defmod Wetterstation.Regen.LastTimestamp dummy
attr Wetterstation.Regen.LastTimestamp stateFormat {FmtDateTime(ReadingsVal($name,"state",0))}


das funktioniert auch insoweit alles super. wenn ich jetzt aber beim Notify verbose auf 5 setze, dann bekomme ich im Log 3x die identische Meldung.

2020.06.05 15:18:05 5: Triggering Wetterstation.Regen.Check
2020.06.05 15:18:05 4: Wetterstation.Regen.Check exec { ***
2020.06.05 15:18:05 5: Triggering Wetterstation.Regen.Check
2020.06.05 15:18:05 4: Wetterstation.Regen.Check exec { ***
2020.06.05 15:18:05 5: Triggering Wetterstation.Regen.Check
2020.06.05 15:18:05 4: Wetterstation.Regen.Check exec { ***


Im Eventmonitor selbst, wird die KNX Adresse aber nur ein einziges mal gesendet.

2020-06-05 15:18:05 dummy Wetterstation.Regen.LastTimestamp 1591363085
2020-06-05 15:18:05 KNX Wetterstation.Regen getG1: true
2020-06-05 15:18:05 KNX Wetterstation.Regen last-sender: ***
2020-06-05 15:18:05 KNX Wetterstation.Regen true



Hab ich da irgendwo einen Denkfehler? Nach meinem Verständnis wird das notify grundsätzlich nur dann aufgerufen, wenn an das Device Wetterstation.Regen etwas gesendet wird. D.h. es muss immer einen Gleichlauf zwischen Wetterstation.Regen und Wetterstation.Regen.Check geben?

rudolfkoenig

Wie schaut das Log bei "attr global verbose 5" aus?

frank

1. ich sehe 3 events von Wetterstation.Regen
2. die notify regex ist auch für das komplette device Wetterstation.Regen

daher ist das 3-fache triggern doch genau richtig.
oder übersehe ich etwas?
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

Guybrush

wolltest du wissen, ob das grundsätzlich auch bei anderen Devices passiert? das ist nicht der fall. ich hab gerade kurz verbose bei global auf 5 gesetzt, das hat mein parallel laufendes tail -f auf der logdatei grad erschlagen ;-) Da sieht aber alles ok aus.

Guybrush

Zitat von: frank am 05 Juni 2020, 15:50:51
1. ich sehe 3 events von Wetterstation.Regen
2. die notify regex ist auch für das komplette device Wetterstation.Regen

daher ist das 3-fache triggern doch genau richtig.
oder übersehe ich etwas?

das könnte es ggf. gewesen sein, dass bei meinem notify das :state fehlte? ich schau gleich mal...

Guybrush

also mit

defmod Wetterstation.Regen.Check notify Wetterstation.Regen:getG1.* {\

wirds nun nur noch einmal getriggert. Das ist soweit richtig von mir gesetzt, oder gibts da was eleganteres? Danke auf jeden Fall für die Hilfe... :)

frank

wenn das reading die gewünschte info enthält, sieht die regex jetzt "eigentlich" gut aus.

besser finde ich immer, den ":" nach dem reading in der regex explizit zu setzen, damit nicht auch ähnliche readings triggern, wie zb ein reading "getG12".
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

Guybrush

das .* hab ich reingemacht, weils ohne nicht ging. Eigentlich dachte ich auch, dass ein :state gehen sollte, was aber nicht funktionierte. Ein :getG1 ging ebenfalls nicht. Erst beim Versuch einfach mal eine Regex anzuhängen, gings dann. Ka, ob da auch noch der Wert etc übergeben wird. Aber der String ist danach nicht zu ende. Regex versuche ich grundsätzlich immer zu vermeiden, weils mehr Leistung kostet, auch wenn das hier kaum ins Gewicht fallen dürfte :)

frank

ZitatWetterstation.Regen:getG1:.*
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

Guybrush

hatte mir inzwischen nun noch nen debug über log3 eingebaut und das gesehen, wie die da formatiert sind. passt nun alles. danke :-)