NEWS
Brauche bitte Hilfe zu Json String
-
Hallo Leute,
ich habe hier ein BMS, was ich per Matt angebunden habe. Das spuckt mir hier keine einzelnen Datenpunkte aus sondern alles in einem.
Wie kann ich nun aus dem String einzelne Datenpunkte erstellen. Ich stehe da gerade total auf dem Schlauch.{
"EspError": "",
"BMSAddress": 0,
"SOC": 38.4,
"RemainCapacity": 112.03,
"BatteryVoltage": 52.82,
"ChargeDischargeCurrent": -4.86,
"CellMinV": 3.301,
"CellMinIdx": 0,
"CellMaxV": 3.303,
"CellMaxIdx": 9,
"CellDiffMv": 1,
"CellCount": 16,
"CellVoltages": {
"Cell1": 3.301,
"Cell2": 3.301,
"Cell3": 3.302,
"Cell4": 3.302,
"Cell5": 3.301,
"Cell6": 3.301,
"Cell7": 3.301,
"Cell8": 3.302,
"Cell9": 3.302,
"Cell10": 3.303,
"Cell11": 3.301,
"Cell12": 3.301,
"Cell13": 3.302,
"Cell14": 3.303,
"Cell15": 3.302,
"Cell16": 3.303
},
"TempCount": 6,
"Temperatures": {
"CellTemp1": 17.5,
"CellTemp2": 17.6,
"CellTemp3": 17.9,
"CellTemp4": 17.6,
"AmbientTemp": 18.2,
"PowerTemp": 17
},
"BatteryCycles": 5,
"SOH": 100,
"BatteryCapacity": 291.35,
"RatedCapacity": 150,
"BusVoltage": 52.86
} -
@yoshi
Beispiel:on(idJson, function(dp) { const obj = JSON.parse(dp.state.val); setState(idCellTemp2, obj.Temperatures.CellTemp2, true); });
-
@paul53
ok, das habe ich schon beim suchen irgendwo gelesen.
Aber bei mir scheitert es gerade dabei, wo ich genau das eintragen muss ? -
@yoshi sagte: wo ich genau das eintragen muss ?
Das ist ein Javascript. Der Datenpunkt mit dem JSON ist der Trigger und die neuen Datenpunkte vom Typ "Zahl" erstellt man vorher unter "0_userdata.0".
-
@yoshi So?
-
@mcu sagte: So?
Oder so (nur einige Datenpunkte): -
Hab nun diese Skript laufen.
on(idJson, function(mqtt.0.Seplos.SEPLOS_dfc47.AllJsonData) {
const obj = JSON.parse(dp.state.val);
setState(idCellTemp2, obj.Temperatures.CellTemp2, true);
});Und diesen Datenpunkt erstellt.
Aber er kommt mit der Fehlermeldung: und schreibt nichts rein.
javascript.0 (8856) script.js.Übergreifendes.Batterie compile failed:
at script.js.Übergreifendes.Batterie:1 -
@yoshi sagte: Hab nun diese Skript laufen.
Korrektur:
const idJson = 'mqtt.0.Seplos.SEPLOS_dfc47.AllJsonData'; const path = '0_userdata.0.Batterie.' on(idJson, function(dp) { const obj = JSON.parse(dp.state.val); setState(path + 'Temperatures.CellTemp1', obj.Temperatures.CellTemp1, true); setState(path + 'Temperatures.CellTemp2', obj.Temperatures.CellTemp2, true); // usw. });
-
Genial, funktioniert.
Muss ich für jeden Wert ein eigenes Skript bauen, oder kann ich das irgendwie fortlaufend machen ?Vielen Dank für die schnelle Hilfe
-
@yoshi sagte: kann ich das irgendwie fortlaufend machen ?
Fortlaufend ein setState() unter dem anderen (habe oben um "CellTemp1" ergänzt).
-
@paul53
VIELEN DANK!! -
@yoshi
Für die 16 Zellenspannungen kann man eine Schleife verwenden:for(let i = 1; i <= 16; i++) { setState(path + 'CellVoltages.Cell' + i, obj.CellVoltages['Cell' + i], true); }