NEWS
Script zur Ermittlung stündlicher/täglicher Stromaufnahme funktioniert nicht
-
Hallo zusammen.
Dies ist mein erster Post im Forum. Bitte verzeiht wenn meine Frage unangebracht erscheint, aber ich komme einfach nicht weiter.
Das folgende Script soll einfach nur einmal pro Stunde bzw. einmal am Tag die Differenz des Stromzählers zum vorherigen Aufruf in eine Variable speichern. Die Werte sollen in einer SQL-Datenbank geloggt und in einem FLOT-Diagramm visualisiert werden. Für Diagnose-Zwecke habe ich auch noch eine Variable mit einem Zeitstempel angelegt und augenscheinlich werden die beiden definierten Funktionen auch zum gewünschten Zeitpunkt ausgeführt (Zeitstempel wie im schedule-Job vorgegeben, siehe Screenshot unten)
Leider werden keine Werte aus der Berechnung aufgezeichnet. Die einzelnen Peaks sind nur beim Testen und neustarten des Scripts entstanden).Hat jemand eine Idee?
So sieht mein Script aus:
createState('Strom.Stunde.Aktuell', 0, {name: 'Stromverbrauch Stunde', unit: 'kWh', desc: 'Stromverbrauch letzte Stunde', type: 'number'}); createState('Strom.Stunde.Gespeichert', 0, {name: 'Stromzählerwert Stunde', unit: 'Wh', desc: 'Stromzählerwert absolut letzte Stunde', type: 'number'}); createState('Strom.Stunde.Zeitstempel', 0, {name: 'Zeitstempel Stunde', desc: 'Zeitstempel letzte Aktualisierung stündliche Stromaufnahme', type: 'string'}); createState('Strom.Tag.Aktuell', 0, {name: 'Stromverbrauch Tag', unit: 'kWh', desc: 'Stromverbrauch letzter Tag', type: 'number'}); createState('Strom.Tag.Gespeichert', 0, {name: 'Stromzählerwert Tag', unit: 'Wh', desc: 'Stromzählerwert absolut letzter Tag', type: 'number'}); createState('Strom.Tag.Zeitstempel', 0, {name: 'Zeitstempel Tag', desc: 'Zeitstempel letzte Aktualisierung tägliche Stromaufnahme', type: 'string'}); var instanz = 'javascript.0.'; var idStrom_Stunde_Aktuell = instanz + 'Strom.Stunde.Aktuell'; var idStrom_Stunde_Gespeichert = instanz + 'Strom.Stunde.Gespeichert'; var idStrom_Stunde_Zeitstempel = instanz + 'Strom.Stunde.Zeitstempel'; var idStrom_Tag_Aktuell = instanz + 'Strom.Tag.Aktuell'; var idStrom_Tag_Gespeichert = instanz + 'Strom.Tag.Gespeichert'; var idStrom_Tag_Zeitstempel = instanz + 'Strom.Tag.Zeitstempel'; var Stromzähler_Aktuell = getState("hm-rpc.0.PEQ0544375.1.ENERGY_COUNTER").val; if (getState(idStrom_Stunde_Gespeichert).val == 0) {setState(idStrom_Stunde_Gespeichert, Stromzähler_Aktuell, true)}; if (getState(idStrom_Tag_Gespeichert).val == 0) {setState(idStrom_Tag_Gespeichert, Stromzähler_Aktuell, true)}; function fStromStunde(Obj) { setState(idStrom_Stunde_Aktuell, (Stromzähler_Aktuell - getState(idStrom_Stunde_Gespeichert).val) / 1000, true); setState(idStrom_Stunde_Gespeichert, Stromzähler_Aktuell, true); setState(idStrom_Stunde_Zeitstempel, formatDate(new Date(), "TT.MM.JJJJ SS:mm:ss"), true); }; function fStromTag(Obj) { setState(idStrom_Tag_Aktuell, (Stromzähler_Aktuell - getState(idStrom_Tag_Gespeichert).val) / 1000, true); setState(idStrom_Tag_Gespeichert, Stromzähler_Aktuell, true); setState(idStrom_Tag_Zeitstempel, formatDate(new Date(), "TT.MM.JJJJ SS:mm:ss"), true); }; schedule("0 * * * *", fStromStunde); schedule("0 0 * * *", fStromTag);
-
@Skotti Die Variable Stromzähler_Aktuell wird nur bei Skriptstart eingelesen und anschließend nicht mehr aktualisiert.
Es fehlt so etwas:on("hm-rpc.0.PEQ0544375.1.ENERGY_COUNTER", function(dp) { Stromzähler_Aktuell = dp.state.val; });
-
eventuell ist SourceAnalytix fuer dich interessant ?
Bis auf die stunedliche aufnähme hat er alles da (tag, Woche, Monat usw)