NEWS
json teilen
-
@paul53 in dem Datenpunkt steht eigentlich immer das gleiche.
liegt es vielleicht an dem Datenpunkt selbst ?{ "type": "state", "common": { "name": { "en": "List of all devices", "de": "Liste aller Geräte", "ru": "Список всех устройств", "pt": "Lista de todos os dispositivos", "nl": "List van alle apparaten", "fr": "Liste de tous les dispositifs", "it": "Elenco di tutti i dispositivi", "es": "Lista de todos los dispositivos", "pl": "Lista wszystkich urządzeń", "zh-cn": "所有装置清单" }, "type": "array", "role": "json", "read": true, "write": false }, "native": {}, "from": "system.adapter.device-watcher.0", "user": "system.user.admin", "ts": 1676195799090, "_id": "device-watcher.0.zigbee.listAll", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
-
@wolfgangkt
Der Datenpunkt ist vom Typ "array", kann also nicht geparst werden. Ändere Zeile 6 inlet arr = dp.state.val;
-
@paul53 jetzt funktioniert es. Vielen Dank für die Hilfe
-
@paul53 zu früh gefreut. In den 2. Datenpunkt werden nur 3 Datensätze geschrieben.
-
@wolfgangkt sagte: In den 2. Datenpunkt werden nur 3 Datensätze geschrieben.
Ändere Zeile 8:
for(let i = 30; i < arr.length; i++) {
-
@paul53 jetzt funktionierts. Besten Dank Dank nochmal.
-
@wolfgangkt Hier noch eine etwas kürzere Alternative:
const idJson = '0_userdata.0.testjson'; // Original const idJson1 = '0_userdata.0.json1'; // Teil 1 const idJson2 = '0_userdata.0.json2'; // Teil 2 on({ id: idJson, change: 'ne' }, (obj) => { const arr = JSON.parse(obj.state.val); setState(idJson1, JSON.stringify(arr.slice(0, 30)), true); setState(idJson2, JSON.stringify(arr.slice(30)), true); });
-
@haus-automatisierung Danke, kann ich auch nochmal probieren. Das Script von @paul53 funktioniert einwandfrei. Die 2 Tabellen in der VIS laufen schon zu meiner Zufriedenheit.
-
@wolfgangkt sagte: kann ich auch nochmal probieren.
Dann lass das Parsen in Zeile 6 weg (Datenpunkt liefert bereits ein Array).
-
@paul53 eine Frage hätte ich noch. Wie kann ich aus Original json bestimme Werte herausfiltern z.B alle Wassermelder und in einen eigenen Datenpunkt schreiben.
-
@wolfgangkt z.B. mit Filter-Funktionen
arr.filter(v => v.Device.startsWith('Wassermelder'));
Also
setState(idJson1, JSON.stringify(arr.filter(v => v.Device.startsWith('Wassermelder'))), true);
-
@haus-automatisierung Super
Vielen Dank. Klappt einwandfrei.