NEWS
gelöst: json tabelle erstellen
-
Hallo
ich möchte gerne eine json-Tabelle erstellen. (habe ich noch nie gemacht)
Inhalt soll einmal monatlich am letzten Tag des Monats der Zählerwert des Smartmeter Adapters sein. Das bedeutet, jeden Monat soll eine neue Zeile erstellt werden mit den Feldnamen Monat/Jahr und Zählerwert. Kann mich jemand mal in die richtige Richtung schupsen?
Gruß
Michael -
@michihorn sagte: in die richtige Richtung schupsen?
const idZaehler = 'abc'; const idJSON = '0_userdata.0.xyz'; const arr = JSON.parse(getState(idJSON).val); // Mind. ein '[]' muss vorhanden sein schedule('50 59 23 * * *', function() { const tomorrow = Date.now() + 20000; if(new Date(tomorrow).getDate() == 1) { const obj = { 'Monat/Jahr': formatDate(new Date(), 'MM/YYYY'), 'Zählerstand': getState(idZaehler).val }; arr.push(obj); // Anzahl Einträge verringern? setState(idJSON, JSON.stringify(arr), true); } });
-
@paul53 sagte in json tabelle erstellen:
const idJSON = '0_userdata.0.xyz';
Hallo Paul,
zum Testen habe ich für idZähler, den aktuellen Verbrauch genommen,
den DP idJSON hast Du als Zustandstyp "json" in den Objecten angelegt?
Denn ich komme folgende Warnmeldungenconst idZaehler = 'smartmeter.0.1-0:16_7_0__255.value'; const idJSON = '0_userdata.0.Haus.Energie.Strom_JSON'; const arr = JSON.parse(getState(idJSON).val); schedule('50 59 23 * * *', function() { const tomorrow = Date.now() + 20000; if(new Date(tomorrow).getDate() == 1) { const obj = { 'Monat/Jahr': formatDate(new Date(), 'MM/YYYY'), 'Zählerstand': getState(idZaehler).val }; arr.push(obj); //Anzahl Einträge verringern? setState(idJSON, JSON.stringify(arr), true); } });
11:14:54.661 info javascript.0 (1239) Start javascript script.js.Trash.Skript_1json 11:14:54.669 warn javascript.0 (1239) at script.js.Trash.Skript_1json:4:24 11:14:54.669 warn javascript.0 (1239) at script.js.Trash.Skript_1json:20:3 11:14:54.683 info javascript.0 (1239) script.js.Trash.Skript_1json: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
-
@michihorn sagte: ich komme folgende Warnmeldungen
Trage manuell ein leeres Array [] ein.
@michihorn sagte in json tabelle erstellen:
für idZähler, den aktuellen Verbrauch genommen,
Du meinst den Zählerstand in kWh?
-
@paul53 sagte in json tabelle erstellen:
Du meinst den Zählerstand in kWh?
Nein in Watt
Möglicherweise habe ich deine Anweisung falsch gedeutet, das leere Array habe ich in den Objekten eingetragen, die Warnmeldung ist weg. Wie kann ich das Script auf Funktion test, den Schedule auf "minütlich" setzen reicht nicht
-
@michihorn sagte: Nein in Watt
Das ist die momentane Leistung!
Du möchtest den Zählerstand in die Tabelle schreiben oder den Monatsverbrauch? Falls Monatsverbrauch, dann wird ein Hilfs-Datenpunkt benötigt, in dem sich der Zählerstand am Monatsende gemerkt wird.
@michihorn sagte in json tabelle erstellen:
die Warnmeldung ist allerdings beblieben
Ich meinte auch: [] manuell im Tab "Objekte" eintragen. Sonst im Skript:
var arr = []; if(getState(idJSON).val) arr = JSON.parse(getState(idJSON).val);
-
@michihorn sagte: Wie kann ich das Script auf Funktion test
Den Monatswechsel abwarten.
-
@paul53 sagte in json tabelle erstellen:
Den Monatswechsel abwarten.
So lange kann ich nicht mehr warten. Hab mal ganz brutal alles ausgeklammert:
const idZaehler = 'smartmeter.0.1-0:1_8_0__255.value'; const idJSON = '0_userdata.0.Haus.Energie.Strom_JSON'; var arr = JSON.parse(getState(idJSON).val); //schedule('50 59 23 * * *', function() { schedule("*/1 * * * *", function () { var txt = '💬 Neuer Zählerstand gespeichert für ' + formatDate((Date.now()), "MM.JJ"); WhatsAppBot([0], txt); //const tomorrow = Date.now() + 20000; //const tomorrow = Date.now(); //if (new Date(tomorrow).getDate() == 1) { const obj = { 'Monat/Jahr': formatDate(new Date(), 'MM/YYYY'), 'Zählerstand': getState(idZaehler).val }; arr.push(obj); //Anzahl Einträge verringern? setState(idJSON, JSON.stringify(arr), true); // } });
Das Ergebnis in den Objekten sieht wie erwartet aus:
[{"Monat/Jahr":"01/2024","Zählerstand":3178.1119}]
Das ganze dann in einer Tabelle:
Danke Paul