Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule starten am letzten Tag eines Monats + Wöchentlich

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Rule starten am letzten Tag eines Monats + Wöchentlich

    Guten Abend,

    ich lese mit openhab unter anderem die kWh-Werte unserer Solaranlage mit.
    Diesen Wert Schreibe ich jeden Abend um 23:59 in die Datenbank, sodass ich über die Zeit schön jeden Abend einen Wert des Tagesertrages aufgezeichnet habe.

    Nun möchte ich die Werte aufarbeiten bzw. besser Strukturieren.
    Daher möchte ich nun eine Wöchentliche (Sonntag) und eine monatliche (letzter Tag im Monat) Auswertung fahren, in der ich dann in einer schönen Übersicht sehen kann welche Werte wurden den pro Woche / Monat erreicht.
    Nun habe ich aber irgendwie ein Problem mit
    a: dem Time Cron (wie finde ich den letzten eines Monats?) bzw. Sonntag?
    b: wie rechne ich die Werte runter?

    Bisher nutze folgende Rule:
    Code:
    rule "Solarmodul Ertrag gestern"
    when Time cron "0 59 23 * * ?"
    then Fritz_DECT200_1_kWh_Tag.postUpdate(Fritz_DECT200_1 _kWh.deltaSince(now.withTimeAtStartOfDay,"mysql"))
    end
    ich habe aber beim googlen und suchen kein equivalent zu "deltaSince(now.withTimeAtStartOfDay," für eine Woche bzw. Monat gefunden...
    Kann mir also hier jemand helfen?

    edit:
    ich glaube für Wöchentlich habe ich etwas gefunden:

    Code:
    rule "Solarmodul Ertrag Woche"
    when Time cron "0 59 23 ? * SUN *"
    then 
        Fritz_DECT200_1_kWh_Woche.postUpdate(Fritz_DECT200 _1_kWh.deltaSince(now.minusDays(7),"mysql"))
        Fritz_DECT200_2_kWh_Woche.postUpdate(Fritz_DECT200 _2_kWh.deltaSince(now.minusDays(7),"mysql"))
    end
    Zuletzt geändert von desidia; 12.05.2020, 22:51.

    #2
    Schaue Dir mal withDayOfMonth() an. Damit solltest Du den ersten Tag des Monats ermitteln können.

    Du solltest Dir allerdings bewusst sein, dass Monats-Summen eine eher schlechte Vergleichbarkeit haben. Durch die unterschiedliche Anzahl von Tagen hast Du im Extremfall 10% Unterschied zwischen zwei benachbarten Monaten. Besser vergleichbar wäre z.B. ein durchschnittlicher Tageswert.

    Kommentar


      #3
      naja, ich möchte ja unbedingt den letzten des Monats und nicht den ersten des nächsten. damit dann nicht in der Statistik im Februar, die Werte aus Januar stehen wobei der Februar ja erst begonnen hat... Darum geht es mir ja.

      und danke für die Info, aber da es in dieser Statistik ja eh um Sonnenstunden (bzw. die kWh daraus) geht, ist es egal. ich will nur eine monatliche Übersicht haben. Die 10% Unterschied können in einem Monat schon ein oder zwei Sonnentage gegen Regentage schonwieder ganz anders aussehen lassen

      Kommentar


        #4
        Wenn Du die Rule analog zu den anderen 1 Minute vor Monatsende ausführst, dann würdest Du über now.withDayOfMonth(1).withTimeAtStartOfDay den Monatsbeginn bekommen. Alternativ könntest Du es auch mit now.minusMonth(1) probieren. Dann hast Du noch die eine Minute vom Vormonat drin, aber immerhin geht die nicht verloren. Wobei man den PV-Ertrag gegen Mitternacht eher vernachlässigen kann.

        Kommentar


          #5
          danke für deine Hilfe. es geht mir aber eher um die Statistische Anzeige dann. Dahinter hängt dann ja auch ein Diagramm, und dieses Diagramm würde dann einen z.B. Januar-Ertrag mit dem Zeitstempel vom 01.02. 0:01 tragen. Sprich nicht dem Januar zugeordnet werden, sondern dem Februar. (da ja in der SQL-Datenbank der Zeitstempel wann der Wert eingetragen wurde gezogen wird). sprich ich hätte immer irgendwie einen Versatz drin...

          Aber ich habe noch weiter gelesen und finde (ohne komplizierte Scripte) leider auch keinen passablen Weg. Womit ich so wie es aussieht 12 Rules für jeden Monat erzeugen muss, wodrin ich dann auch die Bedingung fixiere auf die now.minusDays(X) und X halt in jeder Rule manuell vergebe. zwar Blöd, aber naja macht man ja nur einmal und dann läuft es ja (Schaltjahr hat nen Problem, aber da der Ertrag am 29.02. eh vernachlässigbar ist geht das schon )

          Kommentar


            #6
            Mit der cron-Expression "0 59 23 L * ? *" solltest Du den letzten Tag im Monat bekommen. Vorausgesetzt, dass L dort unterstützt wird. Gibt keine Fehlermeldung, aber ausprobiert habe ich das noch nicht.

            Und warum willst Du dann unbedingt mit minusDays arbeiten? Den Monatsanfang bekommst Du deutlich einfacher und universeller (siehe oben).

            Kommentar


              #7
              Time cron "0 59 23 L * ?" sollte am am Monatsletzten triggern (ja, Quartz cron kennt L und auch LW, sowie 1L für den letzten Sonntag bis 7L für den letzten Samstag, auch z.B. L-3 für den drittletzten Tag im Monat geht)
              Time cron "0 59 23 ? * SUN" triggert Sonntags.

              Siehe https://www.freeformatter.com/cron-e...or-quartz.html und http://www.quartz-scheduler.org/docu...ontrigger.html

              Kommentar

              Lädt...
              X