NEWS
JSON String mit Punkt im Objektnamen
-
Hallo,
ich bekomme folgenden JSON String per mqtt und möchte ihn zerlegen und in einzelne Objekte speichern:
{ "sn": 2110125088, "time": 1695387075, "values": { "A.Ms.Amp": 1.336000063456595, "A.Ms.Vol": 577.3799870945513, "A.Ms.Watt": 771, "B.Ms.Amp": 1.3320000632666051, "B.Ms.Vol": 602.2899865377694, "B.Ms.Watt": 802, "Pac": 1522, "GridMs.Hz": 49.98999888263643, "GridMs.PhV.phsA": 232.07999481260777, "GridMs.PhV.phsB": 231.80999481864274, "GridMs.PhV.phsC": 231.0199948363006, "A1.Ms.Amp": 1.305000061984174, "A2.Ms.Amp": 0.003000000142492354, "A3.Ms.Amp": 0.014000000664964318, "A4.Ms.Amp": 0.0020000000949949026, "A5.Ms.Amp": 0.003000000142492354, "B1.Ms.Amp": 1.3320000632666051, "GridMs.TotPFPrc": 0.999000047449954, "E-Total": 128826.8301189458, "Mt.TotOpTmh": 50391.78116688694, "Mt.TotTmh": 51677.7808933951, "Op.TmsRmg": 0, "Serial Number": 2110125088, "Op.EvtCntUsr": 4686, "Op.EvtNo": 0, "Mode": "MPP", "Error": "-------", "Op.GriSwStt": "Cls", "Inv.TmpLimStt": "NoneDrt", "InvCtl.Stt": "On", "PlntCtl.Stt": "On" } }
wie bekomme ich das mit den Punkten im Objektnamen hin?
so funktioniert es auf jeden Fall nicht:on({id: [].concat([Source]), change: "ne"}, async function (obj) { let value = obj.state.val; let oldValue = obj.oldState.val; setState(A_Ms_Amp, getAttr((obj.state ? obj.state.val : ""), 'values.A.Ms.Amp'), true); });
Gruß,
Stefan -
@duffy82 sagte: Punkten im Objektnamen
In dem Fall muss man eine andere Schreibwiese verwenden.
on(Source, function (obj) { setState(A_Ms_Amp, JSON.parse(obj.state.val).values['A.Ms.Amp'], true); });
getAttr() verwendet man nur in Blockly.
-
@paul53
ich bekomme folgende Fehlermeldung:error javascript.0 (6597) at Object.<anonymous> (script.js.test:11:41)
hier mein komplettes Script:
const Serial = 2110125088 const Source = 'mqtt.1.solar.inverter.' + Serial; const Dest = '0_userdata.0.Inverter.' + Serial; const A_Ms_Amp = Dest + '.A_Ms_Amp'; // Datenpunkte erzeugen createState(A_Ms_Amp, 0, {type: 'number', unit: 'A'}); on(Source, function (obj) { setState(A_Ms_Amp, obj.state.val.values['A.Ms.Amp'], true); });
-
@duffy82 sagte: hier mein komplettes Script:
Sorry, ich hatte noch JSON.parse() ergänzt.
setState(A_Ms_Amp, JSON.parse(obj.state.val).values['A.Ms.Amp'], true);
-
@paul53
Perfekt!!
jetzt läufts.Danke vielmals!