NEWS
Daten Objekt aus MQTT zerlegen und in eigene Objekte packen
-
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 -
@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 -
@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.
-
@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!
-
-
@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: JSON.parse(val).aktuelle_wirkleistung
JSON.parse(val)[''].aktuelle_wirkleistung
-
@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.
-
@thomas-braun Hallo und danke für dieses Skript, Datenpunkte angepasst und es läuft
Gruß Dirk