NEWS
JSON String zu Datenpunkten
-
Hallo, ich habe überhaupt keine Ahnung von JS.
Kann mir bitte jemand ein kleines Skript zusammenbasteln? Für viele hier bestimmt eine Kleinigkeit...
Ich bekomme über MQTT folgende JSON in einem Datenpunkt erzeugt die ich zerlegen möchte:{ "1.8.0":223945, "2.8.0":0, "3.8.1":1668, "4.8.1":64273, "1.7.0":3016, "2.7.0":0, "3.7.0":10, "4.7.0":146, "1.128.0":0 }
Nun möchte ich zb. den ersten Satz "1.8.0" in einen Datenpunkt Schreiben mit dem Wert "223945"
Das gleiche mit den folgenden Sätzen in weitere Datenpunkte.
Die Daten kommen aus einem AMIS Lesegerät für Smartmeter.
Vielleicht hat so was schon mal jemand umgesetzt und kann mir da weiterhelfen.
Danke im voraus.
Grüße Alex -
const idJson = 'mqtt.0...'; // ID eintragen const id180 = '0_userdata.0...'; // eigener Datenpunkt vom Typ Zahl // usw. on(idJson, function(dp) { let obj = JSON.parse(dp.state.val); setState(id180, obj['1.8.0'], true); // usw. });
-
@paul53
Vielen danke für die schnelle Antwort!
Anscheinend bin ich zu blöd für sowas... hab jetzt für den ersten Datenpunkt folgendes eingetragen:const idJson = 'mqtt.0.AMIS-Alex-Haushalt.Haushalt'; // ID eintragen (Datenpunkt der JSON) const id180 = ' mqtt.0.AMIS-Alex-Haushalt.180'; // eigener Datenpunkt vom Typ Zahl (Datenpunkt vom ersten Wert 1.8.0) // usw. on(idJson, function(dp) { let obj = JSON.parse(dp.stat.val); setState(id180, obj['1.8.0'], true); // usw. });
Leider wird nichts ausgegeben...
-
@mayli01 sagte:
Leider wird nichts ausgegeben...
Der Wert vom Json-Datenpunkt muss sich erst ändern, damit getriggert wird.
const id180 = ' mqtt.0.AMIS-Alex-Haushalt.180';
Vor mqtt ist ein Leerzeichen im String !
Eigene Datenpunkte sollte man nicht im Namensraum eines Adapters erstellen, da der Adapter die Objekte verwaltet, also auch löschen kann.
-
@paul53
Der JSON Datenpunkt ändert sich alle 3 sec.
Habs jetzt noch einmal neu gemacht aber trotzdem ohne erfolgconst idJson = 'mqtt.0.AMIS-Alex-Haushalt.Haushalt'/*AMIS-Alex-Haushalt/Haushalt*/; // ID eintragen const id180 = '0_userdata.0.AMIS.180'/*Amis 180*/; // eigener Datenpunkt vom Typ Zahl // usw. on(idJson, function(dp) { let obj = JSON.parse(dp.stat.val); setState(id180, obj['1.8.0'], true); // usw. });
-
@mayli01 sagte in JSON String zu Datenpunkten:
JSON.parse(dp.stat.val)
schau doch mal was da falsch sein könnte
-
@fastfoot sagte:
Schau doch mal was da falsch sein könnte
Sorry, ein e vergessen.
let obj = JSON.parse(dp.state.val);
-
@paul53
Danke! Wenn man keine Ahnung von Js hat fällt mir sowas bestimmt nicht auf -
@paul53 sagte in JSON String zu Datenpunkten:
Sorry, ein e vergessen.
ich hatte das dem TE unterstellt, mir war nicht bewusst das das von Dir kam. Bei so vielen hilfreichen Beiträgen darf das aber schonmal passieren
-
@paul53
Hallo Paul,
Wie bekomme ich die darunterliegende id von
"javascript.0.haus.Heizung.OG_Kueche.FensterOffen"
also
"javascript.0.haus.Heizung.OG_Kueche"
ohne einfach den String begrenzen, weil die Länge variabel ist.
Vielen Dank. -
@hanss sagte in JSON String zu Datenpunkten:
Wie bekomme ich die darunterliegende id
function parentId(id) { return id.substring(0, id.lastIndexOf('.')); }
-
@paul53
vielen Dank, Du bist wirklich eine große Hilfe.