Ertrag vom letzten Monat an Item übergeben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
toto1975
Beiträge: 49
Registriert: 8. Jan 2016 10:47
Answers: 1

Ertrag vom letzten Monat an Item übergeben

Beitrag von toto1975 »

Hallo in die Runde,

ich möchte gerne zum vergleich meinen Ertrag der Solaranlage (kleines Balkonkraftwerk) vom letzten Monat in einem Item anzeigen lassen. Für den aktuellen Monat z.B. März benutze ich folgende Regel:

Code: Alles auswählen

rule "Solarertrag_aktueller_Monat"
when
    Time cron " * 0/15 * ? * * * " //alle 15 Minuten Update
then
    val  ZonedDateTime 	zdt = ZonedDateTime.now()
    val ZonedDateTime start_of_day   = zdt.with(LocalTime.MIDNIGHT) 
    val ZonedDateTime start_of_month = start_of_day.withDayOfMonth(1)
    val strom_Monat = (Solarlmodul_Gesamtverbrauch.deltaSince(start_of_month) as Number).floatValue
    Solarertrag_aktueller_Monat.postUpdate(strom_Monat)
end
Wie kann ich das aber für den letzten Monat also z.B. Februar machen?

Danke schon jetzt für eure Hilfe

Gruß
Torsten
von udo1toni » 29. Mär 2023 18:41
Na so:

Code: Alles auswählen

rule "Solarertrag_aktueller_Monat"
when
    Time cron "0 0/15 * ? * *" //alle 15 Minuten
    //         S M    H T M W (J)
then
    val start_of_month      = now.with(LocalTime.MIDNIGHT).withDayOfMonth(1)
    val start_of_prev_month = now.minusDays(now.getDayOfMonth).with(LocalTime.MIDNIGHT).withDayOfMonth(1)

    val strom_Monat    = (Solarlmodul_Gesamtverbrauch.deltaSince(start_of_month) as Number).floatValue
    val strom_Vormonat = (Solarlmodul_Gesamtverbrauch.deltaSince(start_of_prev_month) as Number).floatValue - strom_Monat

    Solarertrag_aktueller_Monat.postUpdate(strom_Monat)
    Solarertrag_Vormonat.postUpdate(strom_Vormonat)
end
Beachte bitte auch, dass Du im Time cron Ausdruck einen Fehler hast. Die erste Stelle ist die Sekunde. Wenn da ein Stern steht, wird die Rule alle 15 Minuten jede Sekunde der aktuellen Minute getriggert, das willst Du eher nicht. Das Jahr ist optional, der letzte Stern kann also einfach entfallen.

Wenn man viele Rule hat, die per Time cron triggern, bietet es sich an, diese nicht alle zur selben Sekunde aufzurufen, sondern gestaffelt, um die Systmlast von vornherein zu streuen. Du könntest Die Rule allerdings auch einfach auf Item Solarlmodul_Gesamtverbrauch changed triggern lassen, damit hast Du im Zweifel tagsüber eine genauere Anzeige und Nachts wird die Rule gar nicht ausgelöst, sondern erst, wenn die Anlage die ersten Tropfen Solarstrom einspeist. now.minusDays(now.getDayOfMonth) verweist auf den Monatsletzten des Vormonats. Die Variablen und Konstanten können einfach als void definiert werden, openHAB weiß in den meisten Fällen sehr gut, was es verwenden muss. Es gibt natürlich auch Ausnahmen, hier sollte es aber ohne explizite Definition als ZonedDateTime funktionieren.
Gehe zur vollständigen Antwort

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

Re: Ertrag vom letzten Monat an Item übergeben

Beitrag von udo1toni »

Wenn Du eh den aktuellen Monatsertrag hast, kannst Du einfach den Zwei-Monatsertrag auslesen (identisch zu oben, nur dass Du von now vorher alle im laufenden Monat vergangenen Tage abziehst) und anschließend ziehst Du den aktuellen Ertrag vom Zweimonatsertrag ab.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

toto1975
Beiträge: 49
Registriert: 8. Jan 2016 10:47
Answers: 1

Re: Ertrag vom letzten Monat an Item übergeben

Beitrag von toto1975 »

udo1toni hat geschrieben: 29. Mär 2023 14:53 Wenn Du eh den aktuellen Monatsertrag hast, kannst Du einfach den Zwei-Monatsertrag auslesen (identisch zu oben, nur dass Du von now vorher alle im laufenden Monat vergangenen Tage abziehst) und anschließend ziehst Du den aktuellen Ertrag vom Zweimonatsertrag ab.
Ich glaube ich stehe jetzt auf den Schlauch.... Wie soll ich das Umsetzen? Den aktuellen Ertrag habe ich ja aber wie komme ich dann an den zweimonatigen Ertrag ran?

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

Re: Ertrag vom letzten Monat an Item übergeben

Beitrag von udo1toni »

Na so:

Code: Alles auswählen

rule "Solarertrag_aktueller_Monat"
when
    Time cron "0 0/15 * ? * *" //alle 15 Minuten
    //         S M    H T M W (J)
then
    val start_of_month      = now.with(LocalTime.MIDNIGHT).withDayOfMonth(1)
    val start_of_prev_month = now.minusDays(now.getDayOfMonth).with(LocalTime.MIDNIGHT).withDayOfMonth(1)

    val strom_Monat    = (Solarlmodul_Gesamtverbrauch.deltaSince(start_of_month) as Number).floatValue
    val strom_Vormonat = (Solarlmodul_Gesamtverbrauch.deltaSince(start_of_prev_month) as Number).floatValue - strom_Monat

    Solarertrag_aktueller_Monat.postUpdate(strom_Monat)
    Solarertrag_Vormonat.postUpdate(strom_Vormonat)
end
Beachte bitte auch, dass Du im Time cron Ausdruck einen Fehler hast. Die erste Stelle ist die Sekunde. Wenn da ein Stern steht, wird die Rule alle 15 Minuten jede Sekunde der aktuellen Minute getriggert, das willst Du eher nicht. Das Jahr ist optional, der letzte Stern kann also einfach entfallen.

Wenn man viele Rule hat, die per Time cron triggern, bietet es sich an, diese nicht alle zur selben Sekunde aufzurufen, sondern gestaffelt, um die Systmlast von vornherein zu streuen. Du könntest Die Rule allerdings auch einfach auf Item Solarlmodul_Gesamtverbrauch changed triggern lassen, damit hast Du im Zweifel tagsüber eine genauere Anzeige und Nachts wird die Rule gar nicht ausgelöst, sondern erst, wenn die Anlage die ersten Tropfen Solarstrom einspeist. now.minusDays(now.getDayOfMonth) verweist auf den Monatsletzten des Vormonats. Die Variablen und Konstanten können einfach als void definiert werden, openHAB weiß in den meisten Fällen sehr gut, was es verwenden muss. Es gibt natürlich auch Ausnahmen, hier sollte es aber ohne explizite Definition als ZonedDateTime funktionieren.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

toto1975
Beiträge: 49
Registriert: 8. Jan 2016 10:47
Answers: 1

Re: Ertrag vom letzten Monat an Item übergeben

Beitrag von toto1975 »

Perfekt, mir hat start_of_prev_month gefehlt. Funktioniert wie gewollt.

Vielen Dank

Torsten

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

Re: Ertrag vom letzten Monat an Item übergeben

Beitrag von udo1toni »

Immer gerne :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten