NEWS
History Wert zu bestimmtem Zeitpunkt
-
Hallo,
ich erstelle gerade ein Skript um die Tagesarbeitszahl der Wärmepumpe zu berechnen. Leider erhalte ich "schlechte" Werte wenn ich um 0 Uhr die aktuellen Zählerstände subtrahiert von den Vortageswerten in einen Datenpunkt wegschreibe.
Jetzt würde ich gerne die History Werte der Datenpunkte verwenden:Verbrauch_elektrisch_Historywert_Zeitpunkt(17.02.2023 0:00) - Histoywert_Zeitpunkt(16.02.2023 0:00Uhr) = Verbrauch_elektrisch_Vortag
ist das in Blockly möglich?
ps: mein Problem ist, dass die Berechnung der Werte vom Vortag sich aufzukommulieren scheinen. Vielleicht ein Rundungsproblem etc.
edit: Der cron job ist normal um 0:00Uhr. Zu testzwecken habe ich den auf 8:06 gestellt. -
Da ich noch keine Hilfe erhalten habe, habe ich das Script etwas abgeändert. Leider erhalte ich in meinem Script immer den Wert "(null)" für den Datenpunkt "Tagesarbeitszahl".
Mein Script lautet:
var W_thermisch_gesamt, W_elektrisch_gesamt, W_elektrisch_Vortag, w_thermisch_Vortag; // Speichere Vortageszählerstände schedule("49 17 * * *", async function () { // Setzte die Variablen für die Tagesdaten. W_thermisch_gesamt = parseFloat(parseFloat(getState("nibeuplink.0.UNIT_0.HEAT_METER.HEATING_COMPR_ONLY_EP14").val)) + parseFloat(getState("nibeuplink.0.UNIT_0.HEAT_METER.HOTWATER_COMPR_ONLY_EP14").val); W_elektrisch_gesamt = parseFloat(parseFloat(getState("sonoff.0.Tasmota_Stromzaehler_Heizung.Heizung_zahlstand_HT").val)) + parseFloat(getState("sonoff.0.Tasmota_Stromzaehler_Heizung.Heizung_zahlstand_NT").val); // wenn Vortageswerte 0 sind, dann speichere aktuelle Tagesdaten als Vortagesdaten if (getState("0_userdata.0.Heizung.Wel_Vortag").val == 0) { setState("0_userdata.0.Heizung.Wel_Vortag"/*Wel_Vortag*/, W_elektrisch_gesamt, true); } if (getState("0_userdata.0.Heizung.Wth_Vortag").val == 0) { setState("0_userdata.0.Heizung.Wth_Vortag"/*Wth_Vortag*/, W_thermisch_gesamt, true); } // ermittle rechnerisch die Vortageswerte setState("0_userdata.0.Heizung.Wel_Vortag"/*Wel_Vortag*/, (parseFloat(W_elektrisch_gesamt) - getState("0_userdata.0.Heizung.Wel_Vortag").val), true); setState("0_userdata.0.Heizung.Wth_Vortag"/*Wth_Vortag*/, (parseFloat(W_thermisch_gesamt) - getState("0_userdata.0.Heizung.Wth_Vortag").val), true); }); // Berechnet Tagesarbeitszahl schedule("50 17 * * *", async function () { W_elektrisch_Vortag = Math.round(getState("0_userdata.0.Heizung.Wel_Vortag").val*100)/100; w_thermisch_Vortag = Math.round(getState("0_userdata.0.Heizung.Wth_Vortag").val*100)/100; setState("0_userdata.0.Heizung.Tagesarbeitszahl"/*Tagesarbeitszahl*/, (parseFloat(w_thermisch_Vortag) / W_elektrisch_Vortag), true); sendTo("telegram.0", "send", { text: (['Tagesarbeitszahl:',getState("0_userdata.0.Heizung.Tagesarbeitszahl").val,'W_elektrisch; W_thermisch:',W_elektrisch_Vortag,w_thermisch_Vortag].join('')) }); });
Alle Datenpunkte besitzen reale Werte.
Blockly sieht so aus: