Seite 1 von 1

Ertrag vom letzten Monat an Item übergeben

Verfasst: 29. Mär 2023 08:30
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

Re: Ertrag vom letzten Monat an Item übergeben

Verfasst: 29. Mär 2023 14:53
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.

Re: Ertrag vom letzten Monat an Item übergeben

Verfasst: 29. Mär 2023 18:00
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?

Re: Ertrag vom letzten Monat an Item übergeben

Verfasst: 29. Mär 2023 18:41
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.

Re: Ertrag vom letzten Monat an Item übergeben

Verfasst: 31. Mär 2023 18:09
von toto1975
Perfekt, mir hat start_of_prev_month gefehlt. Funktioniert wie gewollt.

Vielen Dank

Torsten

Re: Ertrag vom letzten Monat an Item übergeben

Verfasst: 1. Apr 2023 01:22
von udo1toni
Immer gerne :)