SmartMeter in OpenHab

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: SmartMeter in OpenHab

Beitrag von udo1toni »

Welche Version von openHAB nutzt Du?
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
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten