[gelöst] expandJSON bei Tasmota reading funktioniert nicht

Begonnen von Mad, 04 Juni 2021, 22:20:20

Vorheriges Thema - Nächstes Thema

Mad

Hallo zusammen,

habe bei meinem Tasmota Device ein reading, dass ich gern zerlegen würde. Leider scheiter ich daran, trotz mehrfacher Versuche und Suche im Forum.
Das Device "StromW" wirft mit per Mqtt u.a. folgendes reading aus:

LOGGING

22:10:46.436 MQT: Smarthome/Waermepumpenstrom/tele/SENSOR = {"Time":"2021-06-04T22:10:46","":{"Total_in":29551.4310,"Total_out":0.0000,"Power_curr":8,"Meter_number":"123456789xyz"}}


Und hier meine expandJSOn Versuche:

defmod Strom expandJSON StromW.*:.*:.{.*}
defmod Strom expandJSON StromW:LOGGING:.\{.*}
defmod Strom expandJSON .:LOGGING.:.{.*}

Wäre über jede Hilfe dankbar!


carlos

Im device

attr readinglist Smarthome/Waermepumpenstrom/tele/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }


und schon hast du alle readings.
Ohne notify
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Mad

#2
Es hat leider nur bedingt bzw. einmalig funktioniert. Ich habe das Device dann nochmal eingebunden und trotz der Änderung in der readinglist die readings nicht mehr einzeln erhalten.

Mad

Ich verzweifel langsam... Würde mich über Hilfe freuen.

Nur der vollständigkeitshalber:
So sieht das Device aus:
defmod MQTT2_DVES_5578FC MQTT2_DEVICE DVES_5578FC
attr MQTT2_DVES_5578FC IODev Mosquitto
attr MQTT2_DVES_5578FC readingList DVES_5578FC:tele/tasmota_5578FC/STATE:.* { json2nameValue($EVENT) }\
DVES_5578FC:tele/tasmota_5578FC/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
DVES_5578FC:stat/tasmota_5578FC/LOGGING:.* LOGGING\
DVES_5578FC:tele/tasmota_5578FC/LWT:.* LWT\
DVES_5578FC:cmnd/tasmota_5578FC/POWER:.* POWER\
DVES_5578FC:tele/tasmota_5578FC/INFO1:.* { json2nameValue($EVENT) }\
DVES_5578FC:tele/tasmota_5578FC/INFO2:.* { json2nameValue($EVENT) }\
DVES_5578FC:tele/tasmota_5578FC/INFO3:.* { json2nameValue($EVENT) }\
DVES_5578FC:tasmota/discovery/C45BBE5578FC/config:.* { json2nameValue($EVENT) }\
DVES_5578FC:tasmota/discovery/C45BBE5578FC/sensors:.* { json2nameValue($EVENT) }
attr MQTT2_DVES_5578FC room MQTT2_DEVICE

setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 FallbackTopic cmnd/DVES_5578FC_fb/
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 GroupTopic cmnd/tasmotas/
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Heap 23
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 Hostname tasmota_5578FC-6396
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 IPAddress 192.168.178.112
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:34 LOGGING 11:00:33.403 MQT: tele/tasmota_5578FC/SENSOR = {"Time":"2021-06-06T11:00:33","":{"Total_in":18734.8101,"Total_out":0.0000,"Power_curr":600,"Meter_number":"123456789xyz"}}
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 LWT Online
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 LoadAvg 19
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 Module Generic
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 MqttCount 1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 POWER
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 RestartReason Software/System restart
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Sleep 50
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 SleepMode Dynamic
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Time 2021-06-06T11:00:33
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Uptime 0T00:00:09
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 UptimeSec 9
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 Version 9.2.0.3(tasmota)
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:29 WebServerMode Admin
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_AP 1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_BSSId 3C:A6:2F:FD:68:2B
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_Channel 11
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_Downtime 0T00:00:03
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_LinkCount 1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_RSSI 88
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_SSId Hoppe
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:33 Wifi_Signal -56
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 btn_1 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 btn_2 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 btn_3 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 btn_4 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 dn Tasmota
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 fn_1 Tasmota
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 ft %prefix%/%topic%/
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 hn tasmota_5578FC-6396
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 if 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 ip 192.168.178.112
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 lk 1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 lt_st 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 mac C45BBE5578FC
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 md Generic
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 ofln Offline
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 onln Online
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_1 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_2 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_3 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_4 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_5 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_6 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_7 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 rl_8 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 sho_1 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 sho_2 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 sho_3 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 sho_4 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 sn_Time 2021-06-06T11:00:38
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_11 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_114 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_13 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_17 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_20 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_30 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_4 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_68 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_73 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 so_82 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 state_1 OFF
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 state_2 ON
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 state_3 TOGGLE
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 state_4 HOLD
setstate MQTT2_DVES_5578FC 2021-06-06 10:52:41 subscriptions cmnd/DVES_5578FC_fb/# cmnd/tasmota_5578FC/# cmnd/tasmotas/#
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 sw 9.2.0.3
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_1 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_2 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_3 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_4 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_5 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_6 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_7 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 swc_8 -1
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 t tasmota_5578FC
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 tp_1 cmnd
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 tp_2 stat
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 tp_3 tele
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 ty 0
setstate MQTT2_DVES_5578FC 2021-06-06 11:00:38 ver 1




carlos

ich würde das sensor readinglist so einstellen

DVES_5578FC:tele/tasmota_5578FC/SENSOR:.* { json2nameValue($EVENT) }\
u nd nicht so:

DVES_5578FC:tasmota/discovery/C45BBE5578FC/sensors:.* { json2nameValue($EVENT) }


2. Tip es gibt doch auch templates, die man nutzen kann.

Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Mad

Vielen Dank. Leider führt beides nicht zum Erfolg.
:(

Beta-User

Die cmnd- und discovery-Topics sind vermutlich kontraproduktiv, und die CID-Präfixe in der readingList bei externem MQTT-Server wohl auch. Eher so (jsonMap ggf. ergänzen):
tele/tasmota_5578FC/SENSOR:.* { json2nameValue($EVENT) }\

Aber eine isolierte Betrachtung ist nicht so einfach bei externem Server; siehe Wiki zu MQTT2_CLIENT
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Mad

#7
Danke für den Ansatz. Leider bringt mich das auch nicht weiter.
Der MQTT Server ist eigentlich ein interner.. Sprich, der MQTT2 Server, der in FHEM läuft. Oder verstehe ich das etwas falsche?
Zum einen verstehe ich nicht, warum der erste Hinweis nicht mehr funktioniert, obwohl es zunächst geklappt hat.
Zum anderen dachte ich, dass es mit expandJASON einfach einzurichten ist.
Leider klappt beides nicht...

Beta-User

Zitat von: Mad am 06 Juni 2021, 21:44:30
Danke für den Ansatz. Leider bringt mich das auch nicht weiter.
Der MQTT Server ist eigentlich ein interner.. Sprich, der MQTT2 Server, der in FHEM läuft. Oder verstehe ich das etwas falsche?
Zum einen verstehe ich nicht, warum der erste Hinweis nicht mehr funktioniert, obwohl es zunächst geklappt hat.
Zum anderen dachte ich, dass es mit expandJASON einfach einzurichten ist.
Leider klappt beides nicht...

Was liefert denn (FHEM-Kommandofeld):
list Mosquitto
"expandJSON" stammt aus der "alten MQTT-Welt", für MQTT2_DEVICE müßte eigentlich (fast*) dasselbe über json2nameValue() rauskommen.
Wenn also nichts mehr ankommt, liegt es an irgendwas anderem.

* json2nameValue() hat ein paar features, die evtl. in expandJSON nicht drin waren, z.B. kann man filtern oder eben gleich "gute" Reading-Namen mit jsonMap/$JSONMAP erzeugen.

Jedenfalls sieht das RAW-Device von gestern "seltsam" aus, da mind. eine Zeile drin ist, die mAn. eigentlich nicht sein dürfte, sondern von irgendeiner manuellen Überarbeitung kommt, und auch der Reading-Wert von "LOGGING" ist komisch, das sieht eigentlich nach einer Ausgabe der Tasmota-Konsole aus. Da scheinst du auch irgendwas ungewöhnliches in der firmware konfiguriert zu haben, jedenfalls besteht die Payload ihrerseits wieder aus Infos zum eigentlichen Topic und der eigentlichen JSON-Payload.
Vielleicht lieferst du etwas mehr an Infos, wo diese Daten herkommen, dann hat ggf. auch jemand eine Idee, wie man das eigentliche Problem lösen kann und daraus (wieder automatisch) "gute" Readings bauen kann...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Mad

So, ich konnte das Problem doch noch lösen.
Zunächst habe ich in der readingslist im Tasmota Device folgendes ergänzt

DVES_5578FC:tele/tasmota_5578FC/SENSOR:.* SENSOR\

Anschließend konnte ich die notwendigen readings mit expandJSON einzeln darstellen

defmod Strom expandJSON MQTT2_DVES_5578FC.*:.*:.{.*}

Trotzdem vielen Dank für die Anregungen.

Beta-User

Zitat von: Mad am 13 Juni 2021, 20:48:35
So, ich konnte das Problem doch noch lösen.
Zunächst habe ich in der readingslist im Tasmota Device folgendes ergänzt

DVES_5578FC:tele/tasmota_5578FC/SENSOR:.* SENSOR\

Anschließend konnte ich die notwendigen readings mit expandJSON einzeln darstellen

defmod Strom expandJSON MQTT2_DVES_5578FC.*:.*:.{.*}

Trotzdem vielen Dank für die Anregungen.
Zum einen wird dir das in dieser konkreten Form irgendwann mit einer aktuelleren Perl-Version vermutlich "um die Ohren fliegen", zum anderen sollte es auch mit json2nameValue() (einfacher) funktionieren. Was steht denn jetzt im Reading "SENSOR"?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Mad

#11
Ich bin für jede Verbesserung offen :-)
Was bedeutet denn,  "um die Ohren fliegen" genau?
Mit json2nameValue() habe ich es leider nicht geschafft.
Im Reading SENSOR steht fast das selbe wie im Reading LOGGING, nur ohne den ersten Teil.

Zum Vergleich, hier LOGGING
LOGGING

22:10:46.436 MQT: Smarthome/tasmota_5578FC/tele/SENSOR = {"Time":"2021-06-04T22:10:46","":{"Total_in":29551.4310,"Total_out":0.0000,"Power_curr":8,"Meter_number":"123456789xyz"}}


und hier SENSOR
SENSOR

{"Time":"2021-06-04T22:10:46","":{"Total_in":29551.4310,"Total_out":0.0000,"Power_curr":8,"Meter_number":"123456789xyz"}}



carlos

#12
Kannst du bitte mal dein script, mit dem die werte gelesen werden, hier posten.
Ich hatte heute das gleiche Problem, als ich auf meinem Wemos die sml tasmota version installierte.

Du musst hinter deiner sensor version einen namen vergeben, dann gehts auch mit json2nameValue.
Gruß

12:32:38.922 MQT: tele/stromESP32/SENSOR = {"Time":"2021-06-14T12:32:38","Haus":{"Total_in":0.00,"Total_out":0.00,"Power_curr":0},"ESP32":{"Temperature":51.7},"TempUnit":"C"}

versus

12:32:38.922 MQT: tele/stromESP32/SENSOR = {"Time":"2021-06-14T12:32:38","":{"Total_in":0.00,"Total_out":0.00,"Power_curr":0},"ESP32":{"Temperature":51.7},"TempUnit":"C"}



Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Mad

Hier das script aus dem Tasmota Device (d1 mini).
>D

>B



=>sensor53 r

>M 1

+1,3,s,0,9600,

1,77070100010800ff@1000,Gesamtverbrauch,KWh,Total_in,4

1,77070100020800ff@1000,Gesamteinspeisung,KWh,Total_out,4

1,77070100100700ff@1,Akt. Verbrauch,W,Power_curr,0

1,77070100000009ff@#,Meter Nr,,Meter_number,0

#

carlos

Meins sieht so aus:

>D
>B

=>sensor53 r
>M 1
+1,3,s,0,9600,Haus
1,77070100010800ff@1000,Gesamtverbrauch,KWh,Total_in,2
1,77070100020800ff@1000,Gesamteinspeisung,KWh,Total_out,2
1,77070100100700ff@1,Verbrauch,W,Power_curr,0
#


und damit funktioniert es.

Gruß Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Mad

Ja, schau an. So klappt es auch bei mir. Vielen Dank.
Ich bekomme die Werte jetzt sogar doppelt...
z.B. _Haus_Power_curr und sn__Haus_Power_curr. Aber besser doppelt als gar nicht :-)
Was hat es mit der 2 bei dir am Ende der Zeile Gesamtverbrauch  und Gesamteinspeisung auf sich?

carlos

#16
https://tasmota.github.io/docs/Smart-Meter-Interface/
Ist alles hier beschrieben.
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly


Beta-User

Schön, dass das jetzt auch direkt klappt. Da das hier noch offen ist:
Zitat von: Mad am 14 Juni 2021, 11:17:42
Was bedeutet denn,  "um die Ohren fliegen" genau?
"will be fatal in Perl 5.30", siehe z.B. :

Zitat von: Hackstall am 15 April 2021, 18:53:32
Hallo nach dem letzten Update habe ich folgende Fehlermeldung bekommen:

PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/^.*:(STATE|SENSOR|POWER1|POWER2|INFO1|INFO2|INFO3).*:.{ <-- HERE .*}$/ at .//FHEM/98_expandJSON.pm line 143.
In 5.28 war es "nur" ein warning, in 5.30 schmiert dir FHEM ab...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Mad

Oh :o
Das wäre wirklich fatal!
Dann bin ich um so erfreuter, dass das Problem dank Carlos so schnell gelöst werden konnte :-)
Danke nochmals!

carlos

Gerne, Ich bin da auch drauf gestoßen, da ich von meinen IR Leser im Moment noch keine Werte bekomme. Aber wenn man auf tasmota in der console das Ganze analysiert,erkennt man recht schnell wo das Problem ist.
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly