NEWS
Shelly 2,5, Tasmota, Json Parsen, Energie
-
Hi,
nach längere Suche hier in Forum und mehreren Versuchen Json richtig zu parsen würde ich euch um Unterstützung bitten.Will die Energiewerte eines Shelly 2,5 mit Tasmota mitschreiben um Balkonkraftwerk auszuwerten.
Tasmota schickt an MQTT
"_id": "mqtt.0.ShellyTas.SENSOR",
folgendes{"Time":"2022-02-22T11:18:06","Switch1":"OFF","Switch2":"OFF","ANALOG":{"Temperature":38.1},"ENERGY":{"TotalStartTime":"2022-01-09T19:00:41","Total":0.586,"Yesterday":0.077,"Today":0.480,"Period":[24, 0],"Power":[218, 0],"ApparentPower":[225, 0],"ReactivePower":[44, 0],"Factor":[0.97,0.00],"Frequency":50,"Voltage":225,"Current":[0.222,0.000]},"TempUnit":"C"}
Hab mir jetzt Datenpunkte angelegt:
{ "common": { "name": "power", "desc": "Manuell erzeugt", "role": "state", "type": "number", "read": true, "write": true, "def": 0 }, "type": "state", "_id": "0_userdata.0.Shelly2Tas.Power", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" },
wollte dann json parsen was in verschiedenen Varianten (Energie mit . oder / ) bei mit nicht funktionierte:
(auch mit const idJson = 'mqtt.0.ShellyTas.SENSOR.ENERGY' schon probiert)const idJson = 'mqtt.0.ShellyTas.SENSOR' const power = '0_userdata.0.Shelly2Tas.Power'; const voltage = '0_userdata.0.Shelly2Tas.Voltage'; const current = '0_userdata.0.Shelly2Tas.Current'; const frequency = '0_userdata.0.Shelly2Tas.Frequency'; on(idJson, function(dp) { let obj = JSON.parse(dp.state.val); setState(power, obj['Power'], true); setState(voltage, obj['ENERGY.Voltage'], true); setState(current, obj['ENERGY/Current'], true); setState(frequency, obj['Frequency'], true); });
oder
sieht jemand auf Anhieb was ich fasch mache (also eh alles) - oder wie wäre es richtig?
Danke
jarekEDIT:
OK, Blockly schreibt zumindest "null" rein
Error:
-
@jarek sagte: wie wäre es richtig?
setState(power, obj.ENERGY.Power[0], true); setState(voltage, obj.ENERGY.Voltage, true); setState(current, obj.ENERGY.Current[0], true); setState(frequency, obj.ENERGY.Frequency, true);
-
@paul53 - wie Geil!
Danke!!!