NEWS
GELÖST Sperriges JSON vom Tasmota Stromzähler Script
-
JSON Knoten, deren Namen mit einer Ziffer beginnen scheinen Javascript nicht zu behagen!
Das ist ein MQTT-JSON, was vom Tasmota Stromzähler Script erzeugt wird:
var content = { "Time": "2024-11-18T11:04:23", "Switch1": "OFF", "OP": { "1_8_0": 16263845.96161001, "16_7_0": 494.64999999999998, "36_7_0": 323.36000000000001, "56_7_0": 106.26000000000001, "76_7_0": 65.030000000000001, "32_7_0": 230.59999999999999, "52_7_0": 228.09999999999999, "72_7_0": 227.5, "96_1_0": "1EBZ..........." } }; log(content.OP.16_7_0);
Führende Ziffern in Node-Namen führen anscheinend zu Ungemach, wird schon beim Eintippen unterschlängelt ...
Kann man das irgendwie doch sauber im Javascript verarbeiten, oder muss das im Tasmota-Script bereinigt werden?
-
log(content.OP['16_7_0']);
-
@martinp sagte in Sperriges JSON vom Tasmota Stromzähler Script:
Kann man das irgendwie im Tasmota-Script bereinigen?
Wenn Du das zeigen würdest
>D >B =>sensor53 r >M 1 +1,1,s,0,9600,eHZM 1,77070100100700ff@1,Leistung,W,Power_curr,0 1,77070100010800ff@1000,Verbrauch,KWh,Total_in,1 1,77070100010801ff@1,Tarif1,Wh,Tarif1_in,1 1,77070100010802ff@1,Tarif2,Wh,Tarif2_in,1 1,=h<hr/> 1,77070100020800ff@1000,Einspeisung,kWh,Einspeisung,4 #
Der 5. Wert in den Zeilen 6-9 und 11 sollte der Name sein, der im Telegramm verwendet wird.
Den kannst Du ja frei wählen. -
>D >B ; TelePeriod 30 =>sensor53 r >M 1 ; Device: eBZ DD3 2R06 ODZ1 ; protocol is D0 OBIS ASCII ; 9600@7E1 for OP-type devices, 9600@8N1 for SM-type devices +1,3,o,0,9600,OP,1 ; Zählerstand zu +A, tariflos, ; Zählerstände Auflösung 10 µW*h (6 Vorkomma- und 8 Nachkommastellen) 1,1-0:1.8.0*255(@0.001,Energie Bezug,Wh,1_8_0,8 ; Zählerstand zu +A, Tarif 1 ; 1,1-0:1.8.1*255(@0.001,Energie Bezug T1,Wh,1_8_1,8 ; Zählerstand zu +A, Tarif 2 ; 1,1-0:1.8.2*255(@0.001,Energie Bezug T2,Wh,1_8_2,8 ; Zählerstand zu -A, tariflos ; 1,1-0:2.8.0*255(@0.001,Energie Export,Wh,2_8_0,8 ; Summe der Momentan-Leistungen in allen Phasen, Auflösung 0,01W (5 Vorkomma- und 2 Nachkommastellen) 1,1-0:16.7.0*255(@1,Leistung,W,16_7_0,18 ; Momentane Leistung in Phase Lx, Auflösung 0,01W (5 Vorkomma- und 2 Nachkommastellen) 1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,18 1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,18 1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,18 ; Spannung in Phase Lx, Auflösung 0,1V (nur über MSB) 1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1 1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1 1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1 ; Statuswort, 4 Byte Information über den Betriebszustand, HEX string ; tasmota can decode one string per device only! ;1,1-0:96.5.0*255(@#),Status1,,96_5_0,0 ;1,1-0:96.8.0*255(@#),Status2,,96_8_0,0 ; Geräte-Identifikation, Nach DIN 43863-5 1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0 ;1,1-0:0.0.0*255(@#),Identifikation,,0_0_0,0 #
Derzeit werte ich mit dem Sonoff Adapter aus, der kommt mit dem JSON-Format klar
Danke für die Hilfe, werde mal schauen, ob ich da das Tasmota-Script anpasse, oder ob ich mit dem Index-Trick von @paul53 arbeitet
-
@martinp sagte in GELÖST Sperriges JSON vom Tasmota Stromzähler Script:
Derzeit werte ich mit dem Sonoff Adapter aus, der kommt mit dem JSON-Format klar
Eben!
Für alles mit Tasmota nehme ich ebenfalls den Sonoff.
Da brauche ich nichts von Hand aus dem JSON zu extrahieren. -
@codierknecht Wollte ganz gerne so viel wie möglich auf einen externen Mosquitto Server umstellen, und von dort aus mit dem MQTT Broker/Client Adapter als Client zugreifen ...
Habe mit dem Sonoff-Adapter seit neuestem merkwürdige Aussetzer ...
Kann mir aber natürlich nicht sicher sein, ob es mit dem Mosquitto als Zwischenglied besser wird ...sonoff.0 2024-11-18 11:18:13.414 warn Client [Stromzaehler_B5F63F] received pubrel on Stromzaehler_B5F63F for unknown messageId 31329 sonoff.0 2024-11-18 11:18:13.415 warn Client [Stromzaehler_B5F63F] received pubcomp for unknown message ID: 21609 sonoff.0 2024-11-18 11:18:13.415 warn Client [Stromzaehler_B5F63F] received pubrel on Stromzaehler_B5F63F for unknown messageId 25890 sonoff.0 2024-11-18 11:18:13.415 info Client [Stromzaehler_B5F63F] connection closed: Error: Cannot parse topic sonoff.0 2024-11-18 11:18:14.399 info Client [Stromzaehler_B5F63F] connected with secret 1731925094398_606 sonoff.0 2024-11-18 11:25:02.290 info Client [Stromzaehler_B5F63F] reconnected. Old secret 1731925094398_606 ==> New secret 1731925502286_7992 sonoff.0 2024-11-18 11:25:54.697 info Client [Stromzaehler_B5F63F] reconnected. Old secret 1731925502286_7992 ==> New secret 1731925554686_4188 sonoff.0 2024-11-18 11:26:05.662 warn Client [Stromzaehler_B5F63F] cannot parse data"SENSOR": _{"Ti0U
Aber womöglich liegt es auch am WLAN - die Fritzbox hat auch Logging zum Tasmota Device ...
-
@martinp sagte in GELÖST Sperriges JSON vom Tasmota Stromzähler Script:
JSON Knoten, deren Namen mit einer Ziffer beginnen scheinen Javascript nicht zu behagen!
Das ist ein MQTT-JSON, was vom Tasmota Stromzähler Script erzeugt wird:
var content = { "Time": "2024-11-18T11:04:23", "Switch1": "OFF", "OP": { "1_8_0": 16263845.96161001, "16_7_0": 494.64999999999998, "36_7_0": 323.36000000000001, "56_7_0": 106.26000000000001, "76_7_0": 65.030000000000001, "32_7_0": 230.59999999999999, "52_7_0": 228.09999999999999, "72_7_0": 227.5, "96_1_0": "1EBZ..........." } }; log(content.OP.16_7_0);
Führende Ziffern in Node-Namen führen anscheinend zu Ungemach, wird schon beim Eintippen unterschlängelt ...
Kann man das irgendwie doch sauber im Javascript verarbeiten, oder muss das im Tasmota-Script bereinigt werden?
Mit Blockly und Jsonata habe ich auch eine Lösung gefunden:
(EDIT: ein kleines Suchbild - finde den Fehler )
EDIT2: Hilfestellungen bei der Lösung:
JSONATA Execiser: https://try.jsonata.org/
Dokumentation $lookup(): https://docs.jsonata.org/object-functions -
Frage zu einem weiteren Lösungsansatz ohne JSONATA, mit Funktionsaufruf:
Ist die Abfrage ob das Attribut gefunden wurde in der Funktion "TestVar" so korrekt?
Bei meinem Test funktioniert es zwar, aber das kann ja auch ein Einzelfall sein...
avascript.0 11:46:27.494 info script.js.Spielwiese.Test: TestJson javascript.0 11:46:27.497 info script.js.Spielwiese.Test: 72_7_0 nicht gefunden javascript.0 11:46:27.502 info script.js.Spielwiese.Test: TestJson javascript.0 11:46:27.502 info script.js.Spielwiese.Test: 76_7_0=61.84
-
@martinp sagte: Ist die Abfrage ob das Attribut gefunden wurde in der Funktion "TestVar" so korrekt?
Wenn der Wert 0 kein gültiger Wert ist, funktioniert diese Prüfung.
Falls der Wert 0 ein gültiger Wert sein kann, prüfe "MyVal
!= null".