NEWS
[gelöst] MQTT nur bestimmte Werte auslesen
-
Hallo,
ich bin Anfänger (boar nun ist es raus)
Ich bekomme aus MQTT /leaf/status/raw diese Werte:
{"status": 200, "BatteryStatusRecords": {"BatteryStatus": {"BatteryRemainingAmountkWH": "", "SOC": {"Value": "51"}, "BatteryChargingStatus": "NORMAL_CHARGING", "BatteryRemainingAmount": "124", "BatteryCapacity": "240", "BatteryRemainingAmountWH": "20320"}, "TimeRequiredToFull200_6kW": {"MinutesRequiredToFull": "30", "HourRequiredToFull": "4"}, "OperationResult": "START", "NotificationDateAndTime": "2018/12/10 10:21", "CruisingRangeAcOff": "124000", "OperationDateAndTime": "10.Dez 2018 11:21", "CruisingRangeAcOn": "119000", "PluginState": "CONNECTED", "TargetDate": "2018/12/10 10:21"}, "VoltLabel": {"HighVolt": "240", "LowVolt": "120"}}
Möchte aber nur "CruisingRangeAcOff": "124000" auslesen, geht so etwas ?
Vielen Dank im voraus
JP
-
Das ist offenbar ein JSON-String.
@jp@risum.de:Möchte aber nur "CruisingRangeAcOff": "124000" auslesen, geht so etwas ? `
Das sollte so funktionieren:
const idRaw = '...'; // Datenpunkt-ID MQTT on(idRaw, function(dp) { var obj = JSON.parse(dp.state.val); var range = parseFloat(obj.BatteryStatusRecords.CruisingRangeAcOff); ... });
-
Das ist offenbar ein JSON-String.
@jp@risum.de:Möchte aber nur "CruisingRangeAcOff": "124000" auslesen, geht so etwas ? `
Das sollte so funktionieren:
const idRaw = '...'; // Datenpunkt-ID MQTT on(idRaw, function(dp) { var obj = JSON.parse(dp.state.val); var range = parseFloat(obj.BatteryStatusRecords.CruisingRangeAcOff); ... }); ```` `
Vielen Dank für die schnelle Antwort, wie kann ich diese Infoliation von Dir in IOBroker integrieren.
Mfg
JP
-
@jp@risum.de:wie kann ich diese Infoliation von Dir in IOBroker integrieren. `
Im Javascript-Adapter. -
Super
ich mach mich gleich mal ran DANKE
-
Dann werde ich das Skript noch um den Datenpunkt für das Ergebnis erweitern.
const idRaw = '...'; // Datenpunkt-ID MQTT: Eintragen ! const idRangeOff = 'USV.RangeOff'; // Datenpunkt-ID für Ergebnis (bitte anpassen) // Datenpunkt erzeugen createState(idRangeOff, 0, { type: 'number', name: 'Batterie Range AC Aus', unit: '?' // Bitte anpassen }); on(idRaw, function(dp) { var obj = JSON.parse(dp.state.val); var range = parseFloat(obj.BatteryStatusRecords.CruisingRangeAcOff); setState(idRangeOff, range, true); });
-
Ich habe dein zweites Script eingefügt leider zeigt er mir nur 0 km an.
2 = ist das so gemeint ?
3 = das wäre der Wert den ich gerne hätte.
Mfg
JP
-
/leaf/status/raw
ist sicher nicht die Datenpunkt-ID, vielleicht ist es der Name ? Die Datemumkt-ID beginnt wahrscheinlich mit mqtt.0. Du kannst
"ID einfügen" rechts oben im JS-Editor verwenden.
Bevor die initiale 0 mit dem Wert aus dem JSON ersetzt wird, muss sich der Inhalt des JSON erst einmal ändern. Es kann also eine Weile dauern.
-
so sieht es bei mir aus !
Und geändert habe ich jetzt
const idRaw = "mqtt.0"; // Datenpunkt-ID MQTT: Eintragen !
const idRangeOff = "mqtt.0.leaf.status.raw"/leaf/status/raw/;
Danke das du mir dabei hilfst, da muss ich noch viel lernen. (:-o)
-
Javascript-Code bitte in Code tags (5. Button oben) einfügen !
Richtig:
const idRaw = "mqtt.0.leaf.status.raw"/*leaf/status/raw*/; // Datenpunkt-ID MQTT: Eintragen ! const idRangeOff = 'CruisingRangeAcOff'; // oder besser mit Ordnerstruktur const idRangeOff = 'Battery.CruisingRangeAcOff';
-
Wenn der richtige Wert gleich bei Skriptstart in den Ergebnis-Datenpunkt geschrieben werden soll, dann so
const idRaw = "mqtt.0.leaf.status.raw"/*leaf/status/raw*/; // Datenpunkt-ID MQTT const idRangeOff = 'Battery.CruisingRangeAcOff'; // Datenpunkt erzeugen createState(idRangeOff, 0, { type: 'number', name: 'Batterie Range AC Aus', unit: 'km' }); function battery(json) { var obj = JSON.parse(json); var range = parseFloat(obj.BatteryStatusRecords.CruisingRangeAcOff); setState(idRangeOff, range/1000, true); } battery(getState(idRaw).val); // Skriptstart on(idRaw, function(dp) { battery(dp.state.val); });
-
> Javascript-Code bitte in Code tags (5\. Button oben) einfügen !
leider weiß ich noch nicht was du damit meinst
-
@jp@risum.de:leider weiß ich noch nicht was du damit meinst `
-
Vielen Dank für deine schnelle und Erfolgreiche Hilfe
-
Bitte das Thema im Betreff des ersten Beitrags als [gelöst] markieren.