NEWS
[gelöst] Json mit Unterwerten in Datenpunkt schreiben
-
Hallo,
ich versuche einen etwas komplizierteren Json in einen Datenpunkt zu schreiben
(und wieder einzulesen. Soweit bin ich aber noch gar nicht gekommen).Hier topic/14699 wird gezeigt wie es mit einem Array geht. Ich glaube mein Problem ist ähnlich, ich komme aber nicht weiter.
Immer wenn mein Ecoflow Delta mal wieder offline geht, soll die Uhrzeit und Dauer so geloggt werden. Das können natürlich ganz unterschiedliche Anzahl von Werte-Paaren sein:
Ist offlineData ein Array ?. Ich behandle es aktuell wie einen String.
Der ganze Json soll so aussehen.
Mit den Klammern [] bin ich mir nicht sicher:{ "pro3em_total_act": 251258.62, "pro3em_total_act_return": 251258.62, "delta-2-max-offline": [ {"time":"14.08.2024, 17:16","minute":5}, {"time":"15.08.2024, 07:59","minute":3}, {"time":"16.08.2024, 21:01","minute":13}, ] }
Offline-Daten in Variable zwischenspeichern:
var offlineData = ""; var offlineTimeAsString = ""; var offlineMinutes = ""; offlineTimeAsString = new Intl.DateTimeFormat( "de-DE", { dateStyle: 'medium', timeStyle: 'short' }).format(new Date(offlineTime)); offlineData = offlineData + ',' + ({'time': offlineTimeAsString, 'minute': offlineMinutes });
Den Datenpunkt einmal am Tag mit Werten füllen:
var json_data = ('pro3em_total_act': obj.total_act_ret, 'pro3em_total_act_return': obj.total_act_ret, 'delta-2-max-offline': offlineData }); createState(id, JSON.stringify(data), { name: id, role: 'state', type: 'string', 'read': true, 'write': true }, true );
Das Ergebnis sieht leider so aus:
{ "pro3em_total_act": 251258.62, "pro3em_total_act_return": 251258.62, "delta-2-max-offline": "[\"\"]" }
Für eure Hilfe bin ich dankbar.
-
let offlineData = []; ... offlineData.push({'time': offlineTimeAsString, 'minute': offlineMinutes })
-
@ralf-8 sagte: Den Datenpunkt einmal am Tag mit Werten füllen:
Wenn der Datenpunkt einmal erstellt wurde, schreibt man ihn nicht mit createState(), sondern mit setState().
Damit das Objekt einen Skriptstart übersteht, schreibt man das Objekt bei jeder Änderung in den Datenpunkt und man liest diesen Datenpunkt beim Skriptstart wieder ein.Was beinhalten diese zwei Attribute?
"pro3em_total_act": 251258.62, "pro3em_total_act_return": 251258.62,
EDIT: Soll das Array mit den Offlinezeiten und -dauern unendlich groß oder begrenzt werden?
-
@paul53
Hallo,
die zwei Werte sind Energiedaten aus dem Shelly Pro 3 EM in Watt für Einspeisung und Netzbezug von Strom (kleine PV-Anlage).Ich speichere noch weitere Einzelwerte, wollte das aber nicht unnötig komplizieren.
Der Unterschied von createState und setState ist mir klar. Tatsächlich wird jeden Tag um 06:00 Uhr aber ein neuer Datenpunkt erstellt, so dass ich eine History meiner Energiedaten bekomme.
-
Vielen Dank, das war tatsächlich die Lösung:
@mcu sagte in Json mit Unterwerten in Datenpunkt schreiben und lesen:
let offlineData = []; ... offlineData.push({'time': offlineTimeAsString, 'minute': offlineMinutes })
Hat man Einfluss auf die Darstellung beim Anzeigen der Werte im Datenpunkt?
Mit role und string (bei createState) habe ich herumexperimentiert, aber keine bessere Darstellung gefunden.Aktuell wird es so dargestellt wie der erste Unterwert
Am liebsten hätte ich die Unterwerte aber in einer Zeile so wie die 4 gleichen Zeilen unten.{ "delta-2-max-offline": [ { "time": "16.08.2024, 19:45", "minute": 5 }, { "time": "16.08.2024, 19:45", "minute": 5 }, { "time": "16.08.2024, 19:45", "minute": 5 }, { "time": "16.08.2024, 19:45", "minute": 5 }, { "time": "16.08.2024, 19:45", "minute": 5 } ] }
-
@ralf-8 Das geht nicht, ist im Admin festgelegt.
-
@ralf-8 sagte: so wie die 4 gleichen Zeilen unten.
Dort fehlen die Kommata zwischen den Objekten.
-
@paul53
habe ich korrigiert. Ich wollte nur kurz zeigen, wie ich es meine.
Anscheinend ist die Darstellung tatsächlich festgelegt entweder so oder als fortlaufender Text.