Wenn Du openHAB ab Version 3 nutzt, wäre das hier die saubere Variante:
Code: Alles auswählen
import java.time.temporal.TemporalAdjusters // leider nicht als default dabei...
rule "Stromverbrauch Tag/Woche/Monat/Jahr"
when
Time cron " 0/5 * * * * ?" // alle 5 sec.
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 = KEZaehlerTotal.deltaSince(start_of_day, "rrd4j") as Number
val strom_Woche = KEZaehlerTotal.deltaSince(start_of_week, "rrd4j") as Number
val strom_Woche2 = KEZaehlerTotal.deltaSince(start_of_week2, "rrd4j") as Number
val strom_Monat = KEZaehlerTotal.deltaSince(start_of_month, "rrd4j") as Number
val strom_Jahr = KEZaehlerTotal.deltaSince(start_of_year, "rrd4j") as Number
// Delta schreiben
StromVerbrauchHeute.postUpdate(strom_Heute)
StromVerbrauchWoche.postUpdate(strom_Woche)
StromVerbrauchWoche2.postUpdate(strom_Woche2)
StromVerbrauchMonat.postUpdate(strom_Monat)
StromVerbrauchJahr.postUpdate(strom_Jahr)
// Durchschnitt lesen
var StromL1 = KEZaehlerCL1.averageSince(now.with(LocalTime.MIDNIGHT),"rrd4j")
var StromL2 = KEZaehlerCL2.averageSince(now.with(LocalTime.MIDNIGHT),"rrd4j")
var StromL3 = KEZaehlerCL3.averageSince(now.with(LocalTime.MIDNIGHT),"rrd4j")
// Durchschnitt schreiben
DurchschnittL1.postUpdate(StromL1)
DurchschnittL2.postUpdate(StromL2)
DurchschnittL3.postUpdate(StromL3)
end
Dafür ist es aber recht komfortabel möglich, auf die Zeitpunkte zuzugreifen.