Wie bereits im anderen Thread("Welche Werte speichern, um später schöne Plots zu haben?") vermutet habe ich Probleme mit der Rule.
1. Bekomme ich bei den meisten Berechnungen noch "null", weil vermutlich noch keine Werte für den Zeitraum vorhanden sind. Kann man da evtl. herausfinden wann der 1ste Wert eingetragen wurde und dies als start_of_day/week/month/year setzen?
2. Der jeweilige Maximumwert müsste ja immer kurz vor 24 Uhr und nur 1mal pro Zeiteinheit(z.B. für die Woche Sonntag Abend 23:59:59) gespeichert werden, wie bekomme ich das hin so das pro Tag/Woche/Monat/Jahr immer nur eine Wert gespeichert wird? Oder lassen sich Werte per rule löschen?
1. Bekomme ich bei den meisten Berechnungen noch "null", weil vermutlich noch keine Werte für den Zeitraum vorhanden sind. Kann man da evtl. herausfinden wann der 1ste Wert eingetragen wurde und dies als start_of_day/week/month/year setzen?
2. Der jeweilige Maximumwert müsste ja immer kurz vor 24 Uhr und nur 1mal pro Zeiteinheit(z.B. für die Woche Sonntag Abend 23:59:59) gespeichert werden, wie bekomme ich das hin so das pro Tag/Woche/Monat/Jahr immer nur eine Wert gespeichert wird? Oder lassen sich Werte per rule löschen?
Code:
import java.time.temporal.TemporalAdjusters // leider nicht als default dabei...
rule "heatpump consumption"
when
Item hp_counter_kwh received update
then
// Zeitpunkte definieren
val start_of_day = now.with(LocalTime.MIDNIGHT) // Mitternacht
val start_of_week2 = start_of_day.minusDays(7) // Mitternacht vor einer Woche
val start_of_week = start_of_day.with(TemporalAdjusters.previousOrSame(MONDAY)) // Mitternacht Wochenbeginn
val start_of_month = start_of_day.with(TemporalAdjusters.firstDayOfMonth()) // Mitternacht Monatserster
val start_of_year = start_of_day.with(TemporalAdjusters.firstDayOfYear()) // Mitternacht 1.1.
// Delta auslesen
val strom_Heute = hp_counter_kwh.deltaSince(start_of_day) as Number
val strom_Woche = hp_counter_kwh.deltaSince(start_of_week) as Number
val strom_Woche2 = hp_counter_kwh.deltaSince(start_of_week2) as Number
val strom_Monat = hp_counter_kwh.deltaSince(start_of_month) as Number
val strom_Jahr = hp_counter_kwh.deltaSince(start_of_year) as Number
// Delta schreiben
hp_c_day_kwh.postUpdate(strom_Heute)
hp_c_kalenderwoche_kwh.postUpdate(strom_Woche)
hp_c_week_kwh.postUpdate(strom_Woche2)
hp_c_month_kwh.postUpdate(strom_Monat)
hp_c_year_kwh.postUpdate(strom_Jahr)
// Maximumwert nur 1 mal pro Zeiteinheit ???
hp_c_max_day_kwh.postUpdate(hp_c_day_kwh.maximumSince(now.with(LocalTime.MIDNIGHT)).state as Number)
// Maximumwert nach obigem Beispiel für Woche, Monat, Jahr
// hp_c_max_week_kwh
// hp_c_max_month_kwh
// hp_c_max_year_kwh
end



Kommentar