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 ? -
@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} -
@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 ? -
//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. -
//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. -
// 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?
-
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. -
@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?
-
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);
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden