NEWS
Edit: JSON aus Objekten erstellen
-
Hallo ich habe vor mir die Werte einzelner Monate in eine JSON zu schreiben und zwar sobald sich ein Wert ändert.
Die Objekte sehen so aus.
Der Datenpunkt des JSON heißt Solar_Monate. Wie kann ich das Realisieren?
Mein erster Ansatz sah so aus:const idTable = 'Solar_Monate'; // ID JSON-Tabelle const ids = ['0_userdata.0.Haus.Energie.Zählerstände.Monate.1','0_userdata.0.Haus.Energie.Zählerstände.Monate.2','0_userdata.0.Haus.Energie.Zählerstände.Monate.3','0_userdata.0.Haus.Energie.Zählerstände.Monate.4','0_userdata.0.Haus.Energie.Zählerstände.Monate.5','0_userdata.0.Haus.Energie.Zählerstände.Monate.6','0_userdata.0.Haus.Energie.Zählerstände.Monate.7','0_userdata.0.Haus.Energie.Zählerstände.Monate.8','0_userdata.0.Haus.Energie.Zählerstände.Monate.9','0_userdata.0.Haus.Energie.Zählerstände.Monate.10','0_userdata.0.Haus.Energie.Zählerstände.Monate.11','0_userdata.0.Haus.Energie.Zählerstände.Monate.12']; var table = []; for(let i = 0; i < ids.length; i++) { table[i] = {}; table[i].Name = getObject(ids[i]).common.name; table[i].Wert = getState(ids[i]).val; } setState(idTable, JSON.stringify(table), true); on(ids, function(dp) { let idx = ids.indexOf(dp.id); table[idx].Wert = dp.state.val; setState(idTable, JSON.stringify(table), true); });
Gruß Michael
-
@michihorn sagte: Die Objekte sehen so aus.
const idTable = '0_userdata.0.Haus.Energie.Zählerstände.Monate.Solar_Monate'; // ID JSON-Tabelle
Bei deiner Deklaration wird das JSON in den DP "javascript.0.Solar_Monate" geschrieben, der vermutlich nicht existiert.
-
@michihorn sagte: Mein erster Ansatz sah so aus:
Ich würde auch die Liste ids in der Schleife erzeugen, etwa so:
const path = '0_userdata.0.Haus.Energie.Zählerstände.Monate.'; const idTable = path + 'Solar_Monate'; // ID JSON-Tabelle const ids = []; const table = []; for(let i = 0; i < 12; i++) { const id = path + (i + 1); ids[i] = id; table[i] = { Name: getObject(id).common.name, Wert: getState(id).val }; } setState(idTable, JSON.stringify(table), true); on(ids, function(dp) { let idx = ids.indexOf(dp.id); table[idx].Wert = dp.state.val; setState(idTable, JSON.stringify(table), true); });
-
@paul53 Jetzt wäre noch interessant, die Tabelle zu aktuallisieren sobald sich einer der Werte in den Objekten 1-12 ändert.
-
@michihorn sagte: die Tabelle zu aktuallisieren sobald sich einer der Werte in den Objekten 1-12 ändert.
Das sollte durch den Trigger erfolgen:
on(ids, function(dp) { let idx = ids.indexOf(dp.id); table[idx].Wert = dp.state.val; setState(idTable, JSON.stringify(table), true); });
-
@michihorn sagte in JSON aus Objekten erstellen:
Hallo ich habe vor mir die Werte einzelner Monate in eine JSON zu schreiben und zwar sobald sich ein Wert ändert.
Hier habe ich u.a. genau zu solchem Vorhaben Datenstrukturen und Algorithmen entwickelt. Vielleicht hilft es dir als Ideensammlung.
Leitideen/Strategien ..
- Monatstabellen erstellen und mittels Trigger befüllen
- Diese Tabellen mittels JSON.parse ins RAM als Objekt einlesen
- Objekt mit JavaScript bearbeiten
- Anschließend Objekt mittels JSON.stringify wieder in den Objektbaum schreiben
- ..