Ich denke du hattest in deinen Punkten recht.
Counter muss beim Reset auf 0 gesetzt werden, da er beim Speichern eines Wertes um 1 erhöht wird.
In der ursprünglichen Version wurde damit der Monatsmittelwert etwas unterschätzt, da der Divisor um 1 zu groß war.
Kannst du das nochmal testen, ob das so passt. Ich hab's bei mir auch im Test, aber habe das beim 1. Mal auch übersehen, da die Logik mit "update only" und internen Cron-Triggern gar nicht so einfach im Grafana auswertbar ist (die Logik wird nur 3x am Tag gerechnet!).
: Schaut euch das mal kurz an. Hier würde eine kleine Nachbesserung beim Modul "ratio" sehr hilfreich sein. Der Workaround ist doch wenig praktikabel, die Fehler (Division durch Null stoppt die Ausführung der Logik ohne Fehlermeldung) ist sehr schwer zu finden!
Ich würde eine ähnliche Lösung in den Standard übernehmen, die Krönung wäre dazu eine Variable "$val_ok" wie beim Limiter, die aussagt, ob die Division erfolgreich war. Zwecks Kompatibilität könnte das auch ein neues Modul "ratio2" sein...
Code: Alles auswählen
/**
um 7 Uhr T1
um 14 uhr T2
um 22 uhr. T3
T= (T1+T2+T3+T3) / 4
T > 16 Sommer, T<= 16 Winter
*/
{
"Input": [
["Außentemperatur","Gemessene Außentemperatur","$I_Temperature","u"],
["Temp. Sommer","Außentemperatur bei der auf Sommer umgeschaltet wird","$I_TempSommer","c"],
["Temp. Winter","Außentemperatur bei der auf Winter umgeschaltet wird","$I_TempWinter","c"]
],
"Output": [
["Heizungsmodus Sommer/Winter","Ausgabe ob Sommer oder Winter","$Output","ct"],
["Temperatur Tag gleitend","(T1+T2+T3*T3)/4","$Temperature_avg","ct"],
["Temperatur Mittelwert Monat","Mittelwert seit Monatswechsel","$Temperature_avg_Monat","c"],
["Counter","Anzahl Werte","$Counter?","c"],
["Temp1 / 7:00","Anzahl Werte","$Temp1_?","c"],
["Temp2 / 14:00","Anzahl Werte","$Temp2_?","c"],
["Temp3 / 22:00","Anzahl Werte","$Temp3_?","c"]
],
"Level": [
["$I_Temperature","float",0.0],
["$I_TempSommer","float",0.0],
["$I_TempWinter","float",0.0],
["$I_Totzone","float",0.0],
["$Output","bool",false],
["$Temperature_sum","float",0.0],
["$Temperature_avg","float",0.0],
["$Temperature_sum_Monat","float",0.0],
["$Temperature_sum_temp","float",0.0],
["$Temperature_avg_Monat","float",0.0],
["$Temperature_avg_MonatLast","float",0.0],
["$Counter","integer",0],
["$Counter_temp","integer",1],
["$Counter_Lim","integer",0],
["$Val_ok","bool",false],
["$Temp1_","float",0.0],
["$Temp2_","float",0.0],
["$Temp3_","float",0.0],
["$Reset1","bool",false],
["$Reset2","bool",false],
["$Reset3","bool",false],
["$ResetMonatTrigger","bool",false],
["$KonstTrue","bool",true],
["$Konst0","float",0.0],
//["$Konst0int","int",0],
["$Konst1","float",1.0],
["$Konst4","float",4.0],
["$KonstFalse","bool",false],
["$I_Interval_Enable","bool",true],
["$I_Interval","float",300.0],
["$Zeitpunkt1","string","0 0 7 * * *"],
["$Zeitpunkt2","string","0 0 14 * * *"],
["$Zeitpunkt3","string","0 0 22 * * *"],
["$ResetMonat","string","20 2 0 1 * *"]
],
"Module": [
// Trigger für 7 / 14 und 22 Uhr
["Cron","$KonstTrue","$Reset1",0,"$Zeitpunkt1"],
["Cron","$KonstTrue","$Reset2",0,"$Zeitpunkt2"],
["Cron","$KonstTrue","$Reset3",0,"$Zeitpunkt3"],
["Cron","$KonstTrue","$ResetMonatTrigger",0,"$ResetMonat"],
// Temperatur speichern
["Multiplexer",["$Temp1_","$I_Temperature"],"$Temp1_","$Reset1"],
["Multiplexer",["$Temp2_","$I_Temperature"],"$Temp2_","$Reset2"],
["Multiplexer",["$Temp3_","$I_Temperature"],"$Temp3_","$Reset3"],
// Mittelwert berechnen
["Polynomial","$Konst1","$Temperature_sum",["$Temp1_","$Temp2_","$Temp3_","$Temp3_"]],
["Ratio", "$Temperature_sum", "$Temperature_avg", "$Konst4"],
// Überprüfung
["Comparator","$Temperature_avg","$Output",["$I_TempWinter","$I_TempSommer"]],
// Summe um aktuellen Mittelwert erhöhen (nur bei Reset3)
["Polynomial","$Konst1","$Temperature_sum_temp",["$Temperature_sum_Monat","$Temperature_avg"]],
["Polynomial","$Konst1","$Counter_temp",["$Counter","$Konst1"]],
["Multiplexer",["$Temperature_sum_Monat","$Temperature_sum_temp"],"$Temperature_sum_Monat","$Reset3"],
["Multiplexer",["$Counter","$Counter_temp"],"$Counter","$Reset3"],
// Divisor prüfen und bei Null mit 1 ersetzen
["Limiter","$Counter","$Counter_Lim","$Val_ok",["$Konst0", "$Konst0"]],
["Latch","$Konst1","$Counter","$Val_ok",0],
["Ratio", "$Temperature_sum_Monat", "$Temperature_avg_Monat", "$Counter"],
// Ergebnis überschreiben und alten Divisor wiederherstellen
["Latch","$Konst0","$Temperature_avg_Monat","$Val_ok",0],
["Latch","$Konst0","$Counter","$Val_ok",0],
// Summe und Counter zurücksetzen
["Multiplexer",["$Counter","$Konst0"],"$Counter","$ResetMonatTrigger"],
["Multiplexer",["$Temperature_sum_Monat","$Konst0"],"$Temperature_sum_Monat","$ResetMonatTrigger"],
// Reset auf 0 setzen
["Multiplexer",["$Reset1","$KonstFalse"],"$Reset1","$Reset1"],
["Multiplexer",["$Reset2","$KonstFalse"],"$Reset2","$Reset2"],
["Multiplexer",["$Reset3","$KonstFalse"],"$Reset3","$Reset3"],
["Multiplexer",["$ResetMonatTrigger","$KonstFalse"],"$ResetMonatTrigger","$ResetMonatTrigger"]
]
}