NEWS
Daten Objekt aus MQTT zerlegen und in eigene Objekte packen
-
Hallo,
ich versuche gerade die Daten von meinem Stromzähler mittels einem Tasmota IR-Auslesekopf und MQTT in ioBroker zu bekommen.Was bis jetzt funktioniert:
Tasmota sendet Wirkleistung und Zählerstand an MQTT.
Die Daten bekomme ich mittels MQTT Adapter in ioBroker.Es wird ein Objekt "mqtt.0.tele.tasmota_729799.SENSOR" angelegt.
Der inhalt ist wie folgt:
{"Time":"2023-12-10T13:53:24","":{"aktuelle_wirkleistung":98,"zählerstand_tarif_1":12495.8,"zählerstand_tarif_2":0.0"}}Nun versuche ich mittels Blockly das zu Parsen und neue Objekte "Strom.Bezug.Zaehlerstand" und "Strom.Bezug.Wirkleistung" anzulgen.
Lleider bekomme ich das nicht vernünftig zerlegt.
Kann mit bitte jemand helfen?
-
Hallo,
ich versuche gerade die Daten von meinem Stromzähler mittels einem Tasmota IR-Auslesekopf und MQTT in ioBroker zu bekommen.Was bis jetzt funktioniert:
Tasmota sendet Wirkleistung und Zählerstand an MQTT.
Die Daten bekomme ich mittels MQTT Adapter in ioBroker.Es wird ein Objekt "mqtt.0.tele.tasmota_729799.SENSOR" angelegt.
Der inhalt ist wie folgt:
{"Time":"2023-12-10T13:53:24","":{"aktuelle_wirkleistung":98,"zählerstand_tarif_1":12495.8,"zählerstand_tarif_2":0.0"}}Nun versuche ich mittels Blockly das zu Parsen und neue Objekte "Strom.Bezug.Zaehlerstand" und "Strom.Bezug.Wirkleistung" anzulgen.
Lleider bekomme ich das nicht vernünftig zerlegt.
Kann mit bitte jemand helfen?
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Nun versuche ich mittels Blockly das zu Parsen und neue Objekte "Strom.Bezug.Zaehlerstand" und "Strom.Bezug.Wirkleistung" anzulgen.
der Block schwebt frei im Raum.
Was willst du damit erreichen?
-
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Nun versuche ich mittels Blockly das zu Parsen und neue Objekte "Strom.Bezug.Zaehlerstand" und "Strom.Bezug.Wirkleistung" anzulgen.
der Block schwebt frei im Raum.
Was willst du damit erreichen?
-
@homoran
Ja der schwebt da - das ist aber nicht der Fehler.
Mein Problem habe ich glaube ich gefunden.
Das Time bekomme ich rausgeparst - die anderen Werte nicht.Ich glaube das Problem ist das "verschachtelte" JSON...
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
das ist aber nicht der Fehler.
sicher?
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Ich glaube das Problem ist das "verschachtelte" JSON...
möglich!
Bitte das json in code-tags posten damit keine Steuerzeichen verloren gehen
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1kann das sein, dass dirt ein " zuviel drin ist?
probier mal ein 0.aktuelle......
-
@homoran
Ja der schwebt da - das ist aber nicht der Fehler.
Mein Problem habe ich glaube ich gefunden.
Das Time bekomme ich rausgeparst - die anderen Werte nicht.Ich glaube das Problem ist das "verschachtelte" JSON...
Ich mach das mit diesem Skript:
// where the mqtt messages arrive const mqttDatenpunktObjectId = 'mqtt.0.tele.bitshake_smartmeter.SENSOR'; // where the states should appear const userDataFolder = '0_userdata.0.stromzaehler'; // ############## end user config // receive on(mqttDatenpunktObjectId, (obj) => { const jsonString = obj.state.val; const jsonData = JSON.parse(jsonString); function createObjectsRecursively(parent, data) { for (const key in data) { const obj = data[key]; const stateName = `${parent}.${key}`; if (typeof obj === 'object') { createObjectsRecursively(stateName, obj); } else { let value = obj; // Check if the state already exists. If it does, just update the value. // If it does not exist create the states. if (!existsState(stateName)) { // If the state does not exist, create it and set the value createState(stateName, value, { name: key, type: typeof value, role: "value", read: true, write: true }); log(`Created state ${stateName}`); } else { setState(stateName, value, true); } } } } createObjectsRecursively(userDataFolder, jsonData); }); -
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
das ist aber nicht der Fehler.
sicher?
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Ich glaube das Problem ist das "verschachtelte" JSON...
möglich!
Bitte das json in code-tags posten damit keine Steuerzeichen verloren gehen
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1kann das sein, dass dirt ein " zuviel drin ist?
probier mal ein 0.aktuelle......
@homoran
Ja, ich hab das so stehen lassen damit man meinen Lösungsansatz sieht.
Dass das genau so wie im Bild nicht gehen kann ist mir klar ;-)Gerne
{"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}} -
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Gerne
{"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}siehste, da ist das letzte " nicht drin, dann müsste es mit
@homoran sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
probier mal ein 0.aktuelle......
klappen
-
@homoran
Ja, ich hab das so stehen lassen damit man meinen Lösungsansatz sieht.
Dass das genau so wie im Bild nicht gehen kann ist mir klar ;-)Gerne
{"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}@meckii sagte: {"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}
Das Problem ist der leere Bezeichner des Objektes. Man muss erst damit das Objekt erzeugen, um dann auf die Attribute zugreifen zu können.

-
@meckii sagte: {"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}
Das Problem ist der leere Bezeichner des Objektes. Man muss erst damit das Objekt erzeugen, um dann auf die Attribute zugreifen zu können.

-
@paul53 Da bekomme ich eine Fehlermeldung
Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0 -
@paul53 Da bekomme ich eine Fehlermeldung
Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
@paul53 Da bekomme ich eine Fehlermeldung
Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0und mit 0.aktuel....
EDIT!
Natürlich hat @Paul53 wieder recht!

anders geht's nicht
-
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
@paul53 Da bekomme ich eine Fehlermeldung
Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0und mit 0.aktuel....
EDIT!
Natürlich hat @Paul53 wieder recht!

anders geht's nicht
@homoran
Ok wenn ich es mache wie du - also das Objekt in einen Text kopieren - dann geht es.
Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...16:54:44.761 error javascript.0 (1473) script.js.Strom.Bezug.Messdaten: Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0 16:54:44.763 error javascript.0 (1473) script.js.Strom.Bezug.Messdaten: Cannot get zählerstand_tarif_2 of nullGibt es einen vernünftigen Weg das originale Objekt wie es aus MQTT im ioBroker landet zu kopieren und hier einzufügen?
Edit:
Ich nehme alles zurück - der Depp saß vor dem Monitor.
Man sollte auf den Wert von ObjektID gehen und nicht auf die ObjektID..Vielen Dank an alle!
-
@homoran
Ok wenn ich es mache wie du - also das Objekt in einen Text kopieren - dann geht es.
Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...16:54:44.761 error javascript.0 (1473) script.js.Strom.Bezug.Messdaten: Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0 16:54:44.763 error javascript.0 (1473) script.js.Strom.Bezug.Messdaten: Cannot get zählerstand_tarif_2 of nullGibt es einen vernünftigen Weg das originale Objekt wie es aus MQTT im ioBroker landet zu kopieren und hier einzufügen?
Edit:
Ich nehme alles zurück - der Depp saß vor dem Monitor.
Man sollte auf den Wert von ObjektID gehen und nicht auf die ObjektID..Vielen Dank an alle!
-
@meckii sagte: Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...
Wie erfolgt der Zugriff? Zeigen!
@paul53 sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
@meckii sagte: Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...
Wie erfolgt der Zugriff? Zeigen!
Ist erledigt.
Habs ein Beitrag weiter oben beschrieben - der Fehler saß vor dem Monitor :-) -
Meine Lösung für die Nachwelt:
var Objekt, wirkleistung, tarif1, tarif2, serverid; createState('Strom.Bezug.Wirkleistung', 0, JSON.parse('{"type": "number", "unit": "W"}'), async () => { }); createState('Strom.Bezug.ZaehlerstandHT', 0, JSON.parse('{"type": "number", "unit": "kWh"}'), async () => { }); createState('Strom.Bezug.ZaehlerstandNT', 0, JSON.parse('{"type": "number", "unit": "kWh"}'), async () => { }); createState('Strom.Bezug.Server_ID', 0, async () => { }); on({ id: [].concat(['mqtt.0.tele.tasmota_123456.SENSOR']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Objekt = getState('mqtt.0.tele.tasmota_123456.SENSOR').val; wirkleistung = getAttr(getAttr(Objekt, ''), 'aktuelle_wirkleistung'); tarif1 = getAttr(getAttr(Objekt, ''), 'zählerstand_tarif_1'); tarif2 = getAttr(getAttr(Objekt, ''), 'zählerstand_tarif_2'); serverid = getAttr(getAttr(Objekt, ''), 'Server_ID'); setState('javascript.0.Strom.Bezug.Wirkleistung' /* Strom.Bezug.Wirkleistung */, wirkleistung, true); setState('javascript.0.Strom.Bezug.ZaehlerstandHT' /* Strom.Bezug.ZaehlerstandHT */, tarif1, true); setState('javascript.0.Strom.Bezug.ZaehlerstandNT' /* Strom.Bezug.ZaehlerstandNT */, tarif2, true); setState('javascript.0.Strom.Bezug.Server_ID' /* Strom.Bezug.Server_ID */, serverid, true); }); -
Meine Lösung für die Nachwelt:
var Objekt, wirkleistung, tarif1, tarif2, serverid; createState('Strom.Bezug.Wirkleistung', 0, JSON.parse('{"type": "number", "unit": "W"}'), async () => { }); createState('Strom.Bezug.ZaehlerstandHT', 0, JSON.parse('{"type": "number", "unit": "kWh"}'), async () => { }); createState('Strom.Bezug.ZaehlerstandNT', 0, JSON.parse('{"type": "number", "unit": "kWh"}'), async () => { }); createState('Strom.Bezug.Server_ID', 0, async () => { }); on({ id: [].concat(['mqtt.0.tele.tasmota_123456.SENSOR']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Objekt = getState('mqtt.0.tele.tasmota_123456.SENSOR').val; wirkleistung = getAttr(getAttr(Objekt, ''), 'aktuelle_wirkleistung'); tarif1 = getAttr(getAttr(Objekt, ''), 'zählerstand_tarif_1'); tarif2 = getAttr(getAttr(Objekt, ''), 'zählerstand_tarif_2'); serverid = getAttr(getAttr(Objekt, ''), 'Server_ID'); setState('javascript.0.Strom.Bezug.Wirkleistung' /* Strom.Bezug.Wirkleistung */, wirkleistung, true); setState('javascript.0.Strom.Bezug.ZaehlerstandHT' /* Strom.Bezug.ZaehlerstandHT */, tarif1, true); setState('javascript.0.Strom.Bezug.ZaehlerstandNT' /* Strom.Bezug.ZaehlerstandNT */, tarif2, true); setState('javascript.0.Strom.Bezug.Server_ID' /* Strom.Bezug.Server_ID */, serverid, true); });@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Meine Lösung für die Nachwelt:
wo ist das Blockly dazu?
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
der Fehler saß vor dem Monitor
ID statt Wert von?
immer alles zeigen, zeigen, zeigen!!
was du trotz Nachfrage nicht gemacht hast -
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Meine Lösung für die Nachwelt:
wo ist das Blockly dazu?
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
der Fehler saß vor dem Monitor
ID statt Wert von?
immer alles zeigen, zeigen, zeigen!!
was du trotz Nachfrage nicht gemacht hast@homoran
Das reiche ich gerne nach.
War nur so dass ich zwei Kinder auf mir rumturnen hatte - jetzt sind sie im Bett :-)

Mir war übrigens nicht klar, warum ich dann etwas zeigen sollte wo ich den Fehler schon gefunden hatte...
ICh gelobe besserung
-
@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Meine Lösung für die Nachwelt:
wo ist das Blockly dazu?
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
der Fehler saß vor dem Monitor
ID statt Wert von?
immer alles zeigen, zeigen, zeigen!!
was du trotz Nachfrage nicht gemacht hast@homoran sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
ID statt Wert von?
immer alles zeigen, zeigen, zeigen!!
was du trotz Nachfrage nicht gemacht hastIch hatte versehentlich den oberen Block genommen statt den unteren.

-
@paul53 Da bekomme ich eine Fehlermeldung
Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0@meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
@paul53 Da bekomme ich eine Fehlermeldung
Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0
das sah nämlich nach der DP ID aus, deswegen schrieb @paul53 auch sofort
@paul53 sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
Blockly zeigen!
-
@homoran
Das reiche ich gerne nach.
War nur so dass ich zwei Kinder auf mir rumturnen hatte - jetzt sind sie im Bett :-)

Mir war übrigens nicht klar, warum ich dann etwas zeigen sollte wo ich den Fehler schon gefunden hatte...
ICh gelobe besserung
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

