NEWS
String zerlegen
-
Hallo zusammen,
Ich hoffe ihr könnt mir helfen.
Ich bekomme MiFlora Sensoren in IOBroker.
Aber ich finde keine Möglichkeit die den String in einzelne Datenpunkte zu zerlegen. Im Netz finde man zwar ein paar sachen, aber ich verstehe das offen gesagt nicht.
Hier der Beispiel String.
{"id":"C4:7C:8D:6B:43:36","mac_type":0,"name":"Flower care","rssi":-98,"brand":"Xiaomi/VegTrug","model":"MiFlora","model_id":"HHCCJCY01HHCC","lux":3503,"tempc":12.7,"moi":360} -
@grizzlyco
Bitte mehr Infos.Wie sieht der String aus ?
Was willst du wo hin haben ? -
@bahnuhr
hier der String. wo die DP am ende liegen ist mir egal. Bsp. javascript.0{"id":"C4:7C:8D:6B:43:36","mac_type":0,"name":"Flower care","rssi":-98,"brand":"Xiaomi/VegTrug","model":"MiFlora","model_id":"HHCCJCY01HHCC","lux":3503,"tempc":12.7,"moi":360,"fer":335}
-
nochmal:
Welche daten willst du von diesem json (kein String) haben ? -
lux
tempc
moi
fer -
//var werte = getState("dein DP").val; werte = '{"id":"C4:7C:8D:6B:43:36","mac_type":0,"name":"Flower care","rssi":-98,"brand":"Xiaomi/VegTrug","model":"MiFlora","model_id":"HHCCJCY01HHCC","lux":3503,"tempc":12.7,"moi":360,"fer":335}'; var obj = JSON.parse(werte); setState('javascript.0.MiFlora.lux', obj.lux); log (obj.lux);
In Zeile 1 schreibst du deinen DP.
Zeile 2 kannst du dann löschen.
In Zeile 5 wird der Wert lux geschrieben in den DP "java...lux"
(diesen musst du vorher natürlich anlegen)Genauso verfährst du mit den anderen Punkten.
also z.B.: obj. fer
etc. -
@bahnuhr
Danke erstmal. Wo trage ich das script ein? -
// IDs anpassen! const idJson = 'mqtt.0.abc'; const idLux = '0_userdata.0.xyz.Lux'; // usw. on(idJson, function(dp) { let obj = JSON.parse(dp.state.val); setState(idLux, obj.lux, true); // usw. });
-
Vielen Dank euch beiden!
@bahnuhr
Wenn ich dein Code direkt in dem Objekt eingebe bekomme ich einen Syntax fehler:
{ "common": { "name": "mqtt.C47C8D6B4336.rssi", "role": "state", "type": "mixed" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1663431364325, "_id": "javascript.0.mqtt.C47C8D6B4336.rssi", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } //var werte = getState("mqtt.0.home.OpenMQTTGateway_ESP32_BLE_C.BTtoMQTT.C47C8D6AB8E7").val; var obj = JSON.parse(werte); setState('javascript.0.mqtt.C47C8D6B4336.rssi', obj.rssi); log (obj.rssi);
@paul53
Was mache ich damit?
Tut mir leid wenn ich mich doof anstelle, aber ich habe keine ahnung wo ist das eintragen soll, und was ich da anpassen muss.Vielleicht nochmal für einen DAU?
-
@grizzlyco sagte: Was mache ich damit?
In das Editor-Fenster des Javascript-Adapters kopieren und ergänzen.
Vorher die 4 Ziel-Datenpunkte vom Typ Zahl("number") erstellen. -
super vielen dank!
die ersten DP habe schon. Ab jetzt nur noch ne menge fleißarbeit.Vielen Dank!
-
da bin ich nochmal.
Leider werden nicht bei jedem Paket alle DP mitgeschickt.
Paket 1 Lux und temp
Paket 2 temp
Paket 3 Lux und fer.In mein DP steht deswegen oft [ Objekt objekt]. Das führt zu Fehler in der Folge der Verarbeitung der DP.
Könnt ihr mir da auch helfen?
-
@grizzlyco sagte: Leider werden nicht bei jedem Paket alle DP mitgeschickt.
Dann frage vorher ab:
if(typeof obj.lux == 'number') setState(idLux, obj.lux, true);