Re: SmartMeter in OpenHab
Verfasst: 12. Nov 2023 17:16
Welche Version von openHAB nutzt Du?
Wenn Du openHAB ab Version 3 nutzt, wäre das hier die saubere Variante:
Ganz wichtig: der Import muss zuoberst in der Textdatei stehen, in der die Rule liegt (noch vor den eventuell definierten globalen Variablen).
Dafür ist es aber recht komfortabel möglich, auf die Zeitpunkte zuzugreifen.
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.