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?
-
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?
-
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?
@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
-
>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": _{"Ti0UAber 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
-
@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 -
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
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
