NEWS
Java Script - Objekt JSON
-
Hallo Forum,
ich würde gerne ein JSON Objekt als Datenspeicher nutzen. Das Datenformat habe ich in den Objekten angelegt und entsprechend angepasst. Die Werte "erzeugteLeistungHeute"... möchte ich per Java Script bearbeiten.
Im Script müsste ich den Wert aus dem JSON File zunächst lesen, dann bearbeiten und letztlich zurückschreiben. Ist das überhaupt möglich? Gibt es ein einfaches Beispiel? Danke dafür!
{ "common": { "name": "jsonPVdata", "desc": "Manuell erzeugt", "role": "state", "type": "json", "read": true, "write": true }, "type": "state", "native": {}, "_id": "javascript.0.VarTracePV-Anlage.jsonPVdata", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "erzeugteLeistungHeute": 0, "erzeugteLeistungGestern": 0, "erzeugteLeistungWoche": 0, "erzeugteLeistungMonat": 0 }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1738592436301 }
MOD-EDIT: Code in code-tags gesetzt!
-
@schmidiv sagte: in den Objekten angelegt und entsprechend angepasst.
Diese "Anpassung" ist unzulässig!
Zur die Ermittlung von Periodenwerten der Energie dient der Sourceanalytix-Adapter. -
@paul53 said in Java Script - Objekt JSON:
Diese "Anpassung" ist unzulässig!
Fehlermeldung kam keine und JSON ist ein frei definierbarer Datentyp. Funktioniert das so überhaupt nicht oder gibt es Möglichkeiten?
-
@schmidiv sagte: JSON ist ein frei definierbarer Datentyp.
Ja, wenn der Datenpunkt-Wert ein JSON enthalten soll, ist das in Ordnung. Das Datenpunkt-Objekt darf nicht unter "acl" manipuliert werden. Außerdem erstellt man eigene Datenpunkte unter "0_userdata.0".
Sourceanalytix erzeugt für "erzeugteEnergieHeute", "erzeugteEnergieGestern", "erzeugteEnergieWoche" und "erzeugteEnergieMonat" getrennte Datenpunkte. Das hat den Vorteil, dass die Periodenwerte historisiert und im Chart dargestellt werden können. Der Datenspeicher ist die History-DB. -
Wenn man im Objekt etwas einfügen will gehört das nach
native
alles andere ist definiert. Aber Datenpunkt ist definitiv die bessere Wahl. Im native "versteckt" man Daten die niemanden interessieren und intern im Adapter/Skript verwendet werden.mit
JSON.Parse() JSON.stringify()
kann man JSONs in String-Datenpunkte mit derrole: 'json'
schreiben. -
@schmidiv sagte in Java Script - Objekt JSON:
JSON ist ein frei definierbarer Datentyp
Ja - aber man manipuliert keine JSON-Struktur, die andere (ioBroker) sich ausgedacht haben.
Eigene Inhalte kommen in den Inhalt eines DP.Den kann man - wie @ticaki schon schrieb - mit
JSON.parse()
auslesen, manipulieren und mitJSON.stringify()
wieder in einen String wandeln und zurückschreiben.
Der Typ "string" hat den Vorteil, dass man da auch mal schnell "mit der Hand am Arm" eingreifen kann.Ansonsten würde auch ich eher Sourceanalytics empfehlen. Der ist genau für sowas gemacht.
-
@codierknecht
Dierole: 'json'
sorgt dafür das der Admin das hübsch formatiert zum manuellen Editieren. Falls du es nicht wusstest. -
Da es jetzt noch nicht so deutlich da stand.
Du legst einen Datenpunkt unter 0_userdata mit Typ String/Text an
Den Wert kannst du mit getState und setState lesen und schreiben.
Ein json Objekt das als Text vorliegt kannst du mit JSON.parse in ein Objekt umwandeln und vor dem Schreiben wieder mit JSON.stringify in Text umwandeln.Das ist einfacher wie mit getObject und extendObject zu hantieren.