MQTT2_DEVICE: event-on-change-reading/event-on-update-reading

Begonnen von JoWiemann, 21 Januar 2026, 12:16:41

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

ich habe in einem MQTT2_DEVICE zwei Readings die sehr häufig mit dem selben Wert aktualisiert werden. Ich habe jetzt versucht das durch event-on-change-reading auszubremsen. Leider wird beim Setzen von event-on-change-reading oder event-on-update-reading gar kein Event mehr ausgelöst und somit acu das FileLog nicht geschrieben.

Funktionieren die beiden Attribute überhaupt mit readingList, da ja die Subcriptions darüber gemappt werden.?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Beta-User

Diese Attribute funktionieren mit mqtt2_device genauso wie sonst auch.

Vielleicht würde ein Copy for Forum weiter helfen, falls ein allgemeines Missverständnis vorliegt?
Server: HP-elitedesk@Debian 13, 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

JoWiemann

Zitat von: Beta-User am 21 Januar 2026, 12:40:43Vielleicht würde ein Copy for Forum weiter helfen, falls ein allgemeines Missverständnis vorliegt

Danke für die Rückmeldung. Da ich allerdings für andere Device Typen die beiden Attribute stark nutze liegt hier kein Missverständnis, sondern nur eine Beobachtung vor.

Interessant ist, dass ein event-on-change-reading auf ein userReading, dass durch ein readingList Reading erzeugt wird, durchaus funktioniert.

aber, falls Du etwas entdeckst, anbei das List:
mit funktionierendem userReadings power_kw
define Waermepumpe MQTT2_DEVICE Waermepumpe
attr Waermepumpe autocreate 1
attr Waermepumpe event-on-change-reading power_kw
attr Waermepumpe readingList Waermepumpe:info/connection:.* connection\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/energy:.* energy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/deltaEnergy:.* deltaEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/power:.* power\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/powerEnergy:.* powerEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/start:.* start\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/end:.* end\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/persistedEnergy:.* persistedEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/energySaved:.* energySaved\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/persistedSavedEnergy:.* persistedSavedEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/samsungce/softwareUpdate/newVersionAvailable/value:.* version\
Waermepumpe:smartthings/0/info/connection:.* connection\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/INDOOR1/temperatureMeasurement/temperature/value:.* zone\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/temperatureMeasurement/temperature/value:.* water
attr Waermepumpe room MQTT,Technikraum
attr Waermepumpe stateFormat {return (ReadingsNum("Waermepumpe", "power", 0) / 1000) . " kW"}
attr Waermepumpe userReadings power_kw {return (ReadingsNum("Waermepumpe", "power", 0) / 1000) . " kW"}
#   CID        Waermepumpe
#   DEF        Waermepumpe
#   FUUID      695b7901-f33f-0b39-ab3b-8f80d164f39db60f
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.234_59226
#   MQTT2_FHEM_Server_MSGCNT 1012
#   MQTT2_FHEM_Server_TIME 2026-01-21 13:57:02
#   MSGCNT     1012
#   NAME       Waermepumpe
#   NR         840
#   STATE      3.636 kW
#   TYPE       MQTT2_DEVICE
#   eventCount 885
#   READINGS:
#     2026-01-20 20:08:02   IODev           MQTT2_FHEM_Server
#     2026-01-20 20:09:25   connection      true
#     2026-01-21 13:53:30   deltaEnergy     770
#     2026-01-21 13:53:30   end             2026-01-21T12:53:29Z
#     2026-01-21 13:53:30   energy          6217966
#     2026-01-20 20:09:22   energySaved     0
#     2026-01-20 20:09:21   persistedEnergy 0
#     2026-01-20 20:09:22   persistedSavedEnergy 0
#     2026-01-21 13:53:30   power           3636
#     2026-01-21 13:53:30   powerEnergy     774.3316966605187
#     2026-01-21 13:57:02   power_kw        3.636 kW
#     2026-01-21 13:53:30   start           2026-01-21T12:41:29Z
#     2026-01-17 00:31:05   subscriptions   smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/INDOOR1/temperatureMeasurement/temperature/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/# smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/samsungce/softwareUpdate/newVersionAvailable/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/temperatureMeasurement/temperature/value smartthings/0/info/connection
#     2026-01-20 20:09:22   version         false
#     2026-01-21 12:08:00   water           53
#     2026-01-21 13:57:02   zone            45.5
#   hmccu:
#
setstate Waermepumpe 3.636 kW
setstate Waermepumpe 2026-01-20 20:08:02 IODev MQTT2_FHEM_Server
setstate Waermepumpe 2026-01-20 20:09:25 connection true
setstate Waermepumpe 2026-01-21 13:53:30 deltaEnergy 770
setstate Waermepumpe 2026-01-21 13:53:30 end 2026-01-21T12:53:29Z
setstate Waermepumpe 2026-01-21 13:53:30 energy 6217966
setstate Waermepumpe 2026-01-20 20:09:22 energySaved 0
setstate Waermepumpe 2026-01-20 20:09:21 persistedEnergy 0
setstate Waermepumpe 2026-01-20 20:09:22 persistedSavedEnergy 0
setstate Waermepumpe 2026-01-21 13:53:30 power 3636
setstate Waermepumpe 2026-01-21 13:53:30 powerEnergy 774.3316966605187
setstate Waermepumpe 2026-01-21 13:57:02 power_kw 3.636 kW
setstate Waermepumpe 2026-01-21 13:53:30 start 2026-01-21T12:41:29Z
setstate Waermepumpe 2026-01-17 00:31:05 subscriptions smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/INDOOR1/temperatureMeasurement/temperature/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/# smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/samsungce/softwareUpdate/newVersionAvailable/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/temperatureMeasurement/temperature/value smartthings/0/info/connection
setstate Waermepumpe 2026-01-20 20:09:22 version false
setstate Waermepumpe 2026-01-21 12:08:00 water 53
setstate Waermepumpe 2026-01-21 13:57:02 zone 45.5
äquivalent mit readingList Reading power, wo es nicht funktioniert
define Waermepumpe MQTT2_DEVICE Waermepumpe
attr Waermepumpe autocreate 1
attr Waermepumpe event-on-change-reading power
attr Waermepumpe readingList Waermepumpe:info/connection:.* connection\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/energy:.* energy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/deltaEnergy:.* deltaEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/power:.* power\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/powerEnergy:.* powerEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/start:.* start\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/end:.* end\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/persistedEnergy:.* persistedEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/energySaved:.* energySaved\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/persistedSavedEnergy:.* persistedSavedEnergy\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/samsungce/softwareUpdate/newVersionAvailable/value:.* version\
Waermepumpe:smartthings/0/info/connection:.* connection\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/INDOOR1/temperatureMeasurement/temperature/value:.* zone\
Waermepumpe:smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/temperatureMeasurement/temperature/value:.* water
attr Waermepumpe room MQTT,Technikraum
attr Waermepumpe stateFormat {return (ReadingsNum("Waermepumpe", "power", 0) / 1000) . " kW"}
attr Waermepumpe userReadings power_kw {return (ReadingsNum("Waermepumpe", "power", 0) / 1000) . " kW"}
#   CID        Waermepumpe
#   DEF        Waermepumpe
#   FUUID      695b7901-f33f-0b39-ab3b-8f80d164f39db60f
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.234_59226
#   MQTT2_FHEM_Server_MSGCNT 1012
#   MQTT2_FHEM_Server_TIME 2026-01-21 13:57:02
#   MSGCNT     1012
#   NAME       Waermepumpe
#   NR         840
#   STATE      3.636 kW
#   TYPE       MQTT2_DEVICE
#   eventCount 885
#   READINGS:
#     2026-01-20 20:08:02   IODev           MQTT2_FHEM_Server
#     2026-01-20 20:09:25   connection      true
#     2026-01-21 13:53:30   deltaEnergy     770
#     2026-01-21 13:53:30   end             2026-01-21T12:53:29Z
#     2026-01-21 13:53:30   energy          6217966
#     2026-01-20 20:09:22   energySaved     0
#     2026-01-20 20:09:21   persistedEnergy 0
#     2026-01-20 20:09:22   persistedSavedEnergy 0
#     2026-01-21 13:53:30   power           3636
#     2026-01-21 13:53:30   powerEnergy     774.3316966605187
#     2026-01-21 13:57:02   power_kw        3.636 kW
#     2026-01-21 13:53:30   start           2026-01-21T12:41:29Z
#     2026-01-17 00:31:05   subscriptions   smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/INDOOR1/temperatureMeasurement/temperature/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/# smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/samsungce/softwareUpdate/newVersionAvailable/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/temperatureMeasurement/temperature/value smartthings/0/info/connection
#     2026-01-20 20:09:22   version         false
#     2026-01-21 12:08:00   water           53
#     2026-01-21 13:57:02   zone            45.5
#   hmccu:
#
setstate Waermepumpe 3.636 kW
setstate Waermepumpe 2026-01-20 20:08:02 IODev MQTT2_FHEM_Server
setstate Waermepumpe 2026-01-20 20:09:25 connection true
setstate Waermepumpe 2026-01-21 13:53:30 deltaEnergy 770
setstate Waermepumpe 2026-01-21 13:53:30 end 2026-01-21T12:53:29Z
setstate Waermepumpe 2026-01-21 13:53:30 energy 6217966
setstate Waermepumpe 2026-01-20 20:09:22 energySaved 0
setstate Waermepumpe 2026-01-20 20:09:21 persistedEnergy 0
setstate Waermepumpe 2026-01-20 20:09:22 persistedSavedEnergy 0
setstate Waermepumpe 2026-01-21 13:53:30 power 3636
setstate Waermepumpe 2026-01-21 13:53:30 powerEnergy 774.3316966605187
setstate Waermepumpe 2026-01-21 13:57:02 power_kw 3.636 kW
setstate Waermepumpe 2026-01-21 13:53:30 start 2026-01-21T12:41:29Z
setstate Waermepumpe 2026-01-17 00:31:05 subscriptions smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/INDOOR1/temperatureMeasurement/temperature/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/powerConsumptionReport/powerConsumption/value/# smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/samsungce/softwareUpdate/newVersionAvailable/value smartthings/0/cd834344-3f28-c328-6a56-10fae75b5be4/status/main/temperatureMeasurement/temperature/value smartthings/0/info/connection
setstate Waermepumpe 2026-01-20 20:09:22 version false
setstate Waermepumpe 2026-01-21 12:08:00 water 53
setstate Waermepumpe 2026-01-21 13:57:02 zone 45.5
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

KölnSolar

Hi Jörg,
ich vermisse event-min-interval. Damit sollte es funktionieren, wenn kein "change" erfolgt, aber events mit gleichem value kommen.

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

JoWiemann

Hallo Markus,

danke für den Vorschlag. Das Problem ist, dass manchmal 20 gleiche Werte im Sekundentakt kommen. Warum habe ich noch nicht herausgefunden. Ich möchte nur auf geänderte Werte triggern.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Beta-User

Hmm, irgendwie hatte ich im Kopf, dass das bei eocr eine Positivliste wäre, also dann nur noch triggert, was zu den Angaben passt.

Und bei so einer readingList sollte man für userReadings Trigger angeben.

Mobil, daher kurz und ohne Nachschlagen.
Server: HP-elitedesk@Debian 13, 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

TomLee

#6
Die Ursache liegt doch daran das event-on-change-reading auf das userreadings angewendet wird. Dann gibts keine Events mehr im ganzen Device.

Kann man auch bei einem dummy nachvollziehen:
defmod d6 dummy
attr d6 event-on-change-reading sonne
attr d6 readingList pct
attr d6 room Test
attr d6 setList on off pct:slider,1,1,100
attr d6 userReadings sonne:pct.* {'blub'}

setstate d6 off
setstate d6 2026-01-21 15:36:13 pct 25
setstate d6 2026-01-21 15:36:09 state off

Hier wird das userreadings erst gar nicht angelegt, weil es nach der Definition aller Attribute noch kein Event gab.

Beta-User

Für den Effekt dass nicht mehr getriggert wird, kann man auch einfach einen Phantastie-Readingnamen verwenden...

Es ist eben eine Positivliste.
Server: HP-elitedesk@Debian 13, 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

rudolfkoenig

Da ich die (richtigen) Anworten erst nach etwas debuggen / Code nachstellen verstanden habe, versuche ich es mit anderen Worten:

event-on-change-reading (aka eocr) filtert (nur) die Events.

Im ersten Fall (eocr == power_kw) generiert nur das userReading mit dem Namen power_kw ein Event.
Im zweiten Fall (eocr == power) gibts nur fuer die Quelle (mit dem Namen power) ein Event.
Die Readings werden in beiden Faellen geaendert, bloss Events gibts nur fuer die gefilterten.
Die Aenderung des Readings kann man sehen, wenn man in der Detailseite ein Reload macht.

Mit eocr = power(_kw)? gibts fuer beide ein Event.

Beta-User

Zitat von: rudolfkoenig am 21 Januar 2026, 17:58:00event-on-change-reading (aka eocr) filtert (nur) die Events.

Vielleicht der Versuch einer noch etwas anderen Beschreibung:
Wenn gesetzt, unterdrückt "event-on-change-reading" (aka eocr) alle Events (genauer: den trigger für die Erneuerung des Reading-Werts), es sei denn, der Reading-Name würde auf ein Element einer - durch komma-separierte regex-Ausdrücke beschriebenen - Liste matchen.
Das zuerst passende Element der "in order of apperance" durchlaufenden Liste beschreibt abschließend, auf welche Unterschiedlichkeit der Reading-Wert zu prüfen ist (insbesondere, falls ein threshold gesetzt ist).

Daher triggert nichts anderes mehr, wenn man genau einen Reading-Namen gesetzt hatte (völlig unabhängig davon, ob es den überhaupt gibt).

So werden vielleicht die Gegenausnahmen klarer, die "event-on-update-reading" beschreibt, und welchen Zweck "timestamp-on-change-reading" hat...

Zitat von: Beta-User am 21 Januar 2026, 15:31:51Und bei so einer readingList sollte man für userReadings Trigger angeben.
Vielleicht noch eine Klarstellung, wie das zu verstehen ist:
Jeder Match in der readingList erzeugt einen Event-Stapel, bei dem dann auch der update aller userReadings geprüft wird.
Hat man - wie hier - ein Gerät, das sehr viele Topics verwendet, um darauf Einzelwerte zu senden, wird ein nicht per trigger-Angabe "gebändigtes" userReading mit jeder Message auf einem der Topics neu berechnet, was hier (unabhängig von allem anderen) wenig sinnvoll erscheint.

Zwischenergebnis wäre (unter Berücksichtigung diverser anderer Kleinigkeiten) m.E. sowas:
attr Waermepumpe userReadings power_kw:power:.* {return (ReadingsNum($name, 'power', 0) / 1000) . ' kW'}

Persönlich würde ich solche Reading-Werte nicht formatieren, daher "Zwischenergebnist" ;) .
Server: HP-elitedesk@Debian 13, 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

JoWiemann

Hallo,

vielen lieben Dank für die Beschreibungen. Mich hatte nur stutzig gemacht, dass es bei allen anderen Devices nie Probleme gegeben hat und ich jetzt einfach verwundert bin, dass es bei einem MQTT2 Device nicht funktioniert.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM