FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: fhemfatale am 28 September 2025, 10:52:31

Titel: [gelöst] Stromzähler Daten werden nicht im MQTT2 Device übernommen
Beitrag von: fhemfatale am 28 September 2025, 10:52:31
Ich habe meinen Lesekopf am Zähler mit neuer Software aktualisiert. Dabei habe ich beim Fehlersuchen in Fhem anscheinend auch was verstellt und kriege es jetzt nicht mehr hingebogen. Daher brauche ich ein paar Tips, wo ich was falsch gemacht habe und wie ich es richtigstellen kann.

Im Broker kommen die Werte rein.
10:46:11.352
   
DVES_C10F79
   
tele/DVES_C10F79/STATE
   
{"Time":"2025-09-28T10:46:10","Uptime":"0T01:35:10","UptimeSec":5710,"Heap":8,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":4,"Wifi":{"AP":1,"SSId":"meineWLANSSID","BSSId":"gelöscht","Channel":11,"Mode":"11n","RSSI":48,"Signal":-76,"LinkCount":1,"Downtime":"0T00:00:04"}}
10:46:11.495
   
DVES_C10F79
   
tele/DVES_C10F79/SENSOR
   
{"Time":"2025-09-28T10:46:10","MT681":{"MT681_Power_cur":179,"MT681_Total_in":11813.37,"MT681_Total_out":324.06}}

Das MQTT2 Device ist dieses:
[code]define MQTT2_DVES_C10F79 MQTT2_DEVICE DVES_C10F79
attr MQTT2_DVES_C10F79 autocreate 0
attr MQTT2_DVES_C10F79 comment Das ist der LOLIN V3 für den Stromzähler mit IR Lesekopf.\
NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10;; 'cmnd/cmnd/tasmota_C10F79/Backlog POWER1 1;; delay '.$duration.';; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
attr MQTT2_DVES_C10F79 devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $light = ReadingsVal($name,"state","off");; my $cons = ReadingsVal($name,'MT681_Power_cur','unknown');; my $total = ReadingsVal($name,'MT681_Total_in','unknown');; my $temp = ReadingsVal($name,'MT681_Total_out','-100');; my $show = '<a href="';;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';; $show .= FW_makeImage("10px-kreis-".$onl)."</a>";; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>P: " .sprintf("%.0f" ,$cons) ." W / --> $total kWh / <-- $temp kWh" ." </div>"}
attr MQTT2_DVES_C10F79 event-min-interval MT681_Total_out:86400
attr MQTT2_DVES_C10F79 event-on-change-reading MT681_Power_cur:5,MT681_Total_in:1,MT681_Total_out:0.1
attr MQTT2_DVES_C10F79 icon measure_power_meter
attr MQTT2_DVES_C10F79 model tasmota_basic_state_power1
attr MQTT2_DVES_C10F79 readingList tele/tasmota_C10F79/LWT:.* LWT\
  tele/tasmota_C10F79/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_C10F79/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_C10F79/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_C10F79/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  stat/tasmota_C10F79/POWER1:.* state\
  stat/tasmota_C10F79/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }\
DVES_C10F79:cmnd/tasmota_C10F79/POWER:.* POWER\
DVES_C10F79:stat/tasmota_C10F79/POWER:.* POWER\
DVES_C10F79:tasmota/discovery/A848FAC10F79/config:.* { json2nameValue($EVENT) }\
DVES_C10F79:tasmota/discovery/A848FAC10F79/sensors:.* { json2nameValue($EVENT) }\
DVES_C10F79:tele/DVES_C10F79/LWT:.* LWT\
DVES_C10F79:cmnd/DVES_C10F79/POWER:.* POWER\
DVES_C10F79:tele/DVES_C10F79/STATE:.* { json2nameValue($EVENT) }\
DVES_C10F79:tele/DVES_C10F79/SENSOR:.* { json2nameValue($EVENT) }\
DVES_C10F79:stat/DVES_C10F79/RESULT:.* { json2nameValue($EVENT) }\
DVES_C10F79:tele/DVES_C10F79/INFO1:.* { json2nameValue($EVENT) }\
DVES_C10F79:tele/DVES_C10F79/INFO2:.* { json2nameValue($EVENT) }\
DVES_C10F79:tele/DVES_C10F79/INFO3:.* { json2nameValue($EVENT) }
attr MQTT2_DVES_C10F79 room MQTT2_DEVICE
attr MQTT2_DVES_C10F79 setList off:noArg    cmnd/DVES_C10F79/POWER1 0\
  on:noArg     cmnd/DVES_C10F79/POWER1 1\
  toggle:noArg cmnd/DVES_C10F79/POWER1 2\
  setOtaUrl:textField cmnd/DVES_C10F79/OtaUrl $EVTPART1\
  upgrade:noArg   cmnd/DVES_C10F79/upgrade 1
attr MQTT2_DVES_C10F79 setStateList on off toggle
attr MQTT2_DVES_C10F79 timestamp-on-change-reading .*
#   CID        DVES_C10F79
#   DEF        DVES_C10F79
#   FUUID      623f5309-f33f-fd0b-36fd-f0a7594959aa55f2
#   IODev      myBroker
#   LASTInputDev myBroker
#   MSGCNT     707
#   NAME       MQTT2_DVES_C10F79
#   NR         116
#   STATE      aktuell: -1.0 W Tag: -1.00 kWh Gestern: -1.000 kWh Gesamt: -1.0000 kWh
#   TYPE       MQTT2_DEVICE
#   myBroker_CONN myBroker_192.168.178.39_50199
#   myBroker_MSGCNT 707
#   myBroker_TIME 2025-09-28 10:48:52
#   READINGS:
#     2025-09-28 09:48:45   IODev           myBroker
#     2025-09-27 22:26:34   MT681_Power_cur 551
#     2025-09-27 21:52:26   MT681_Total_in  11809.60
#     2025-09-27 18:39:18   MT681_Total_out 324.06
#     2025-09-27 20:14:58   associatedWith  MQTT2_wasseruhr
#
setstate MQTT2_DVES_C10F79 aktuell: -1.0 W Tag: -1.00 kWh Gestern: -1.000 kWh Gesamt: -1.0000 kWh
setstate MQTT2_DVES_C10F79 2025-09-28 09:48:45 IODev myBroker
setstate MQTT2_DVES_C10F79 2025-09-27 22:26:34 MT681_Power_cur 551
setstate MQTT2_DVES_C10F79 2025-09-27 21:52:26 MT681_Total_in 11809.60
setstate MQTT2_DVES_C10F79 2025-09-27 18:39:18 MT681_Total_out 324.06
setstate MQTT2_DVES_C10F79 2025-09-27 20:14:58 associatedWith MQTT2_wasseruhr

[/code]
Titel: Aw: Stromzähler Daten werden nicht im MQTT2 Device übernommen
Beitrag von: frober am 28 September 2025, 11:16:09
Räume mal deine readingList auf. Du hast einmal tasmota_C10F79 und DVES_C10F79 gemischt.

Letzteres sollte das Richtige.

Was genau funktioniert nicht?

Durch das Update hast du den Zähler am Lesekopf zurückgesetzt. D.h. dieser fängt wieder bei 0 an.
Und Wasseruhr mit kW/h passt auch nicht...
Zitat2025-09-27 20:14:58   associatedWith  MQTT2_wasseruhr
Titel: Aw: Stromzähler Daten werden nicht im MQTT2 Device übernommen
Beitrag von: fhemfatale am 28 September 2025, 11:23:52
Die beiden von dir erwähnten Punkte wollte ich auch noch in Angriff nehmen. Da ich vermute, daß es am Aufräumen nicht liegt, habe ich das erstmal auf später verschoben, da ich nichts fälschlicherweise löschen will.

Der Lesekopf an sich funktioniert ja. Über den Broker sprudeln ja auch Daten rein. Nur werden sie im Device nicht erkannt (siehe auch unterschiedliche Zeitstempel).
Titel: Aw: Stromzähler Daten werden nicht im MQTT2 Device übernommen
Beitrag von: frober am 28 September 2025, 11:34:51
Die Grundefinition scheint zu stimmen. Steht etwas im Fhemlog?

myBroker ist der richtige MQTT-Server?
Titel: Aw: Stromzähler Daten werden nicht im MQTT2 Device übernommen
Beitrag von: passibe am 28 September 2025, 11:47:36
readingList aufräumen wird vermutlich helfen.

Bin mir grade nicht sicher in welcher Reihenfolge die readingList abgearbeitet wird. Aber ich vermute mal, dass dieser Eintrag das Problem ist:
Zitat von: fhemfatale am 28 September 2025, 10:52:31tele/tasmota_C10F79/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
Der reagiert nämlich auch auf das Event und du hast keine jsonMap definiert. Lösch diese Zeile mal und schau dann, was passiert.

Testweise kannst du auch folgende readingList verwenden, dann werden nur die Sensordaten gesetzt:attr MQTT2_DVES_C10F79 readingList  DVES_C10F79:tele/DVES_C10F79/SENSOR:.* { json2nameValue($EVENT) }
Übrigens wird sich die timestamp für MT681_Total_out nicht ändern:
Zitat von: fhemfatale am 28 September 2025, 10:52:31attr MQTT2_DVES_C10F79 timestamp-on-change-reading .*
Zum debuggen bietet es sich natürlich an, auf attrs wie timestamp-on-change-reading, event-on-change-reading o.ä. zu verzichten.
Titel: Aw: Stromzähler Daten werden nicht im MQTT2 Device übernommen
Beitrag von: fhemfatale am 28 September 2025, 12:37:14
Ich habe jetzt etwas aufgräumt im Device. Es sind dadurch neue Werte reingekommen, allerdings mit einem doppelten MT681 (siehe unten die Zeitstempel im Codeblock).

define MQTT2_DVES_C10F79 MQTT2_DEVICE DVES_C10F79
attr MQTT2_DVES_C10F79 autocreate 0
attr MQTT2_DVES_C10F79 comment Das ist der LOLIN V3 für den Stromzähler mit IR Lesekopf.\
NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10;; 'cmnd/cmnd/tasmota_C10F79/Backlog POWER1 1;; delay '.$duration.';; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.\
event-on-change-reading MT681_Power_cur:5,MT681_Total_in:1,MT681_Total_out:0.1\
event-min-intervall MT681_Total_out:86400
attr MQTT2_DVES_C10F79 devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $light = ReadingsVal($name,"state","off");; my $cons = ReadingsVal($name,'MT681_Power_cur','unknown');; my $total = ReadingsVal($name,'MT681_Total_in','unknown');; my $temp = ReadingsVal($name,'MT681_Total_out','-100');; my $show = '<a href="';;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';; $show .= FW_makeImage("10px-kreis-".$onl)."</a>";; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>P: " .sprintf("%.0f" ,$cons) ." W / --> $total kWh / <-- $temp kWh" ." </div>"}
attr MQTT2_DVES_C10F79 icon measure_power_meter
attr MQTT2_DVES_C10F79 model tasmota_basic_state_power1
attr MQTT2_DVES_C10F79 readingList DVES_C10F79:tele/DVES_C10F79/SENSOR:.* { json2nameValue($EVENT) }
attr MQTT2_DVES_C10F79 room MQTT2_DEVICE
attr MQTT2_DVES_C10F79 setList off:noArg    cmnd/DVES_C10F79/POWER1 0\
  on:noArg     cmnd/DVES_C10F79/POWER1 1\
  toggle:noArg cmnd/DVES_C10F79/POWER1 2\
  setOtaUrl:textField cmnd/DVES_C10F79/OtaUrl $EVTPART1\
  upgrade:noArg   cmnd/DVES_C10F79/upgrade 1
attr MQTT2_DVES_C10F79 setStateList on off toggle
#   CID        DVES_C10F79
#   DEF        DVES_C10F79
#   FUUID      623f5309-f33f-fd0b-36fd-f0a7594959aa55f2
#   IODev      myBroker
#   LASTInputDev myBroker
#   MSGCNT     763
#   NAME       MQTT2_DVES_C10F79
#   NR         116
#   STATE      aktuell: -1.0 W Tag: -1.00 kWh Gestern: -1.000 kWh Gesamt: -1.0000 kWh
#   TYPE       MQTT2_DEVICE
#   eventCount 29
#   myBroker_CONN myBroker_192.168.178.39_51202
#   myBroker_MSGCNT 763
#   myBroker_TIME 2025-09-28 12:35:03
#   Helper:
#     DBLOG:
#       MT681_Power_cur:
#         db_fhem:
#           TIME       1759055703.97907
#           VALUE      256
#       MT681_Total_in:
#         db_fhem:
#           TIME       1759055703.97907
#           VALUE      11813.81
#       MT681_Total_out:
#         db_fhem:
#           TIME       1759055703.97907
#           VALUE      324.06
#   READINGS:
#     2025-09-28 11:07:41   IODev           myBroker
#     2025-09-28 12:30:33   MT681_MT681_Power_cur 214
#     2025-09-28 12:30:33   MT681_MT681_Total_in 11813.79
#     2025-09-28 12:30:33   MT681_MT681_Total_out 324.06
#     2025-09-28 12:35:03   MT681_Power_cur 256
#     2025-09-28 12:35:03   MT681_Total_in  11813.81
#     2025-09-28 12:35:03   MT681_Total_out 324.06
#     2025-09-28 12:35:03   Time            2025-09-28T12:35:02
#     2025-09-27 20:14:58   associatedWith  MQTT2_wasseruhr
#
setstate MQTT2_DVES_C10F79 aktuell: -1.0 W Tag: -1.00 kWh Gestern: -1.000 kWh Gesamt: -1.0000 kWh
setstate MQTT2_DVES_C10F79 2025-09-28 11:07:41 IODev myBroker
setstate MQTT2_DVES_C10F79 2025-09-28 12:30:33 MT681_MT681_Power_cur 214
setstate MQTT2_DVES_C10F79 2025-09-28 12:30:33 MT681_MT681_Total_in 11813.79
setstate MQTT2_DVES_C10F79 2025-09-28 12:30:33 MT681_MT681_Total_out 324.06
setstate MQTT2_DVES_C10F79 2025-09-28 12:35:03 MT681_Power_cur 256
setstate MQTT2_DVES_C10F79 2025-09-28 12:35:03 MT681_Total_in 11813.81
setstate MQTT2_DVES_C10F79 2025-09-28 12:35:03 MT681_Total_out 324.06
setstate MQTT2_DVES_C10F79 2025-09-28 12:35:03 Time 2025-09-28T12:35:02
setstate MQTT2_DVES_C10F79 2025-09-27 20:14:58 associatedWith MQTT2_wasseruhr


Daraufhin habe ich im Lesekopf im Skript das MT681_ vor den Werten gelöscht und restartet.
Jetzt kommen die Werte auch an.
Vielen Dank für den Schubser in die richtige Richtung.