NEWS
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@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
-
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
Das geht auch ohne Blockly:Einfach einen neuen Alias für dein Quellobjekt (“mqtt.0.tele.tasmota_729799.SENSOR") anlegen und dann im Alias eine Konvertierungsfunktion beim Lesen verwenden:
JSON.parse(val).aktuelle_wirkleistung
In deinem Beispiel ist nur der Attributname des verschachtelten JSON-Objekts merkwürdigerweise leer. Das sollte eigentlich nicht sein, daher wird das so wie von mir angegeben vermutlich nicht direkt funktionieren. Du musst zunächst in deiner Tasmota-Konfiguration dafür sorgen, dass hier ein Attributname vergeben wird (z.B. „Energie“). Dann kannst du den Wert mittels
JSON.parse(val).Energie.aktuelle_wirkleistung
extrahieren.
Viele Grüße, Stefan
-
@Meckii
Das geht auch ohne Blockly:Einfach einen neuen Alias für dein Quellobjekt (“mqtt.0.tele.tasmota_729799.SENSOR") anlegen und dann im Alias eine Konvertierungsfunktion beim Lesen verwenden:
JSON.parse(val).aktuelle_wirkleistung
In deinem Beispiel ist nur der Attributname des verschachtelten JSON-Objekts merkwürdigerweise leer. Das sollte eigentlich nicht sein, daher wird das so wie von mir angegeben vermutlich nicht direkt funktionieren. Du musst zunächst in deiner Tasmota-Konfiguration dafür sorgen, dass hier ein Attributname vergeben wird (z.B. „Energie“). Dann kannst du den Wert mittels
JSON.parse(val).Energie.aktuelle_wirkleistung
extrahieren.
Viele Grüße, Stefan
-
@Meckii
Das geht auch ohne Blockly:Einfach einen neuen Alias für dein Quellobjekt (“mqtt.0.tele.tasmota_729799.SENSOR") anlegen und dann im Alias eine Konvertierungsfunktion beim Lesen verwenden:
JSON.parse(val).aktuelle_wirkleistung
In deinem Beispiel ist nur der Attributname des verschachtelten JSON-Objekts merkwürdigerweise leer. Das sollte eigentlich nicht sein, daher wird das so wie von mir angegeben vermutlich nicht direkt funktionieren. Du musst zunächst in deiner Tasmota-Konfiguration dafür sorgen, dass hier ein Attributname vergeben wird (z.B. „Energie“). Dann kannst du den Wert mittels
JSON.parse(val).Energie.aktuelle_wirkleistung
extrahieren.
Viele Grüße, Stefan
@cpu6502 sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:
@Meckii
Das geht auch ohne Blockly:Ja oder mit meinem Node-red Flow, der zerlegt jedes JSON in einzelne Datenpunkte.
-
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); });@thomas-braun Hallo und danke für dieses Skript, Datenpunkte angepasst und es läuft
Gruß Dirk
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
