Ankündigung

Einklappen
Keine Ankündigung bisher.

Berechnungen in Rules für Items?

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

    Berechnungen in Rules für Items?

    Hallo!
    Wahrscheinlich stell ich mich wiedermal zu blöd an, aber ich bekomms mit den gefundenen Beispielen einfach nicht hin, eine Berechnung zu machen: per Rule soll um Mitternacht erhoben werden, wie viel Niederschlag es am Tag gegeben hat.
    Nun habe ich ein number Item, welches mir den akkumulierten Niederschlag ausgibt, nennen wir es rain_ac - Wert kommt aus dem Weather binding und passt soweit auch.
    Nun möchte ich eben jeden Tag um Mitternacht das Item "rain_tot" berechnen lassen: rain_tot = Maximalwert der letzten 24 Stunden von rain_ac
    Müsste doch relativ einfach sein? Gibts denn nirgends das 1x1 der OpenHab Berechnungen?

    Grüße

    #2
    Also hier kannst du das Thema persitence nutzen. Wenn due den Wert rain_ac persistierst, kannst du um Mitternacht nach einem MaxiumumSince() fragen.

    Kommentar


      #3
      Ja soweit bin ich. bloß wie ich das Rule dann genau formuliere versteh ich nicht

      Items:
      Code:
      Number Niederschlag_WU "Niederschlag Wundergroup"    {weather="locationId=gungano, type=precipitation, property=total"}
      Number Niederschlag_WU_24h "Niederschlag letzte 24h"
      persistance:
      Code:
       // MapDB persistence service
      
      Strategies {
              everyMinute : "0 * * * * ?"
      }
      
      Items {
              // let's store items to restore on startup
              WTWasser_TR* : strategy = everyChange,restoreOnStartup
              Niederschlag_WU: strategy = everyChange,restoreOnStartup
      }
      Rule:
      Code:
      rule "Regen Vortag"
      when
          Time cron "0 49 19 * * ?"
      then
      var rainInLast24Hours = Niederschlag_WU.maximumSince(now.minusHours(24), "mapdb")
      
      Niederschlag_WU_24h.postUpdate(Niederschlag_WU.maximumSince(now.minusHours(24), "mapdb"))
      end
      openhab.log
      Code:
      2017-05-05 19:49:04.691 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule Regen Vortag: An error occured during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null
      Zuletzt geändert von narf; 05.05.2017, 18:49.

      Kommentar


        #4
        Also, mapdb ist so ziemlich die einzige Persistence (neben log) die Du dafür nicht nutzen kannst. mapdb speichert exakt den letzten (letztlich also den aktuellen) Wert, sonst nichts. Dafür braucht mapdb keinen Platz (außer für einen Wert)
        Entweder nutzt Du eine Datenbank wie MySQL oder influxdb, oder Du nimmst rrd4j. rrd4j benötigt eine feste Menge Speicher pro item, die verwendeten Dateien wachsen also nicht. Dafür werden die Daten immer ungenauer, je länger die Erfassung her ist. (Die zeitliche Auflösung nimmt ab) Das spielt aber bei einem Zeitraum von 24 Stunden keine Rolle. Im Demo Projekt sollte eigentlich immer noch die Temperatur mit Maximum und Minimum pro Tag enthalten sein, den Code kannst Du quasi 1:1 verwenden.
        Zuletzt geändert von udo1toni; 05.05.2017, 19:38.

        Kommentar


          #5
          Guten Morgen!
          Habs nun mit rrd4j versucht, aber das klappt leider auch nicht:
          Fehlermeldung bleibt dieselbe - Wert für Niederschlag_WU wurde in den letzten 24 Stunden geschrieben. Auf welches Demo Projekt beziehst du dich?
          Beim Weather Binding gehts immer nur von "heute" in die Zukunft. Bzgl. Historische Werte find ich nix...

          Gruß
          Zuletzt geändert von narf; 07.05.2017, 07:07.

          Kommentar


            #6
            Wenn Du openHAB2 installierst, kannst Du einen Demo Mode aktivieren. Anschauen kannst Du das auch hier: http://demo.openhab.org:8080/start/index allerdings siehst Du dort natürlich nicht die dahinter liegende Konfiguration.

            Die Persistence sollte die Werte jede Minute schreiben (eigentlich ist das nur für Graphen wichtig, aber...), also in der rrd4j.persist steht dann
            Code:
            // persistence strategies have a name and a definition and are referred to in the "Items" section
            Strategies {
               everyMinute : "0 * * * * ?"
                 everyHour : "0 0 * * * ?"
                  everyDay : "0 0 0 * * ?"
            // if no strategy is specified for an item entry below, the default list will be used
                default = everyChange
            }
            /*
            * Each line in this section defines for which item(s) which strategy(ies) should be applied.
            * You can list single items, use "*" for all items or "groupitem*" for all members of a group * item (excl. the group item itself).
            */
            Items {
                Niederschlag_WU : strategy = everyMinute, everyChange
            }
            Leider stelle ich gerade fest, dass der Demo Server offensichtlich nicht ganz rund läuft, die Maximum- und Minimum-Temperaturen werden im Chart nicht angezeigt. Normalerweise sollte das Chart drei Linien beinhalten, das funktioniert bei mir zuhause wunderbar mit dem Code aus dem Demo.

            Manchmal klappt das Anlegen der Datenspeicher nicht richtig, das kannst du im Dateisystem überprüfen, die Dateien liegen im Bereich userdata, also unter debian z.B. in /var/lib/openhab2/persistence/rrd4j/, da muss es für jedes Item, welches persistiert wird eine Datei <itemname>.rrd geben, welche immer den Zeistempel des letzten Schreibzugriffs haben muss (normalerweise also aktuelle Zeit +0/-1 Minuten)

            Falls Du ganze Gruppen persistierst, werden normalerweise nur die Kinder (also die der Gruppe zugeordneten Items) persistiert, nicht die Gruppe selbst.

            Kommentar


              #7
              Habe nun deinen Code übernommen, wird auch minütlich was in die Niederschlag_WU.rrd geschrieben, aber im log kommt nach wie vor derselbe Fehler :/

              Kommentar


                #8
                Also die Fehlermeldung sieht für mich danach aus, das es gar keine Daten gibt. Hast du schon mal ein chart mit den Datenzeichnen lassen?

                Gruß
                Thoams

                Kommentar


                  #9
                  puh - hab grad im log nochmal alles aufgerufen seit gestern Abend:
                  Code:
                  2017-05-06 19:42:10.149 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                  2017-05-06 22:24:27.442 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 3.00
                  2017-05-06 22:54:27.564 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 3.00 to 0.00
                  2017-05-06 22:59:27.451 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 0.00 to 4.00
                  2017-05-06 23:49:27.479 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 4.00 to UNDEF
                  2017-05-06 23:54:27.651 [ItemStateChangedEvent     ] - Niederschlag_WU changed from UNDEF to 1.00
                  2017-05-07 00:24:27.416 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 0.00
                  2017-05-07 00:59:27.494 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 0.00 to 1.00
                  2017-05-07 01:19:27.971 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                  2017-05-07 01:24:27.525 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 1.00
                  2017-05-07 01:29:27.394 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                  2017-05-07 01:34:28.137 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 1.00
                  2017-05-07 01:39:27.433 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to UNDEF
                  2017-05-07 01:44:27.510 [ItemStateChangedEvent     ] - Niederschlag_WU changed from UNDEF to 1.00
                  2017-05-07 09:54:28.991 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                  2017-05-07 09:59:27.599 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 1.00
                  2017-05-07 10:24:29.180 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                  2017-05-07 10:29:27.392 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 1.00
                  2017-05-07 10:54:29.934 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to UNDEF
                  2017-05-07 10:59:27.487 [ItemStateChangedEvent     ] - Niederschlag_WU changed from UNDEF to 1.00
                  2017-05-08 00:29:27.451 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 0.00
                  liegt das Problem bei den UNDEF Werten? und warum bekomm ich diese? kommt von Wunderground...
                  im Chart ist der Maximalwert 1:
                  chart.png
                  Stimmt ja auch nicht mit den Daten überein?

                  Kommentar


                    #10
                    Und Du schreibst die Werte minütlich in die Persistence? Aber wohl erst seit meinem Posting, also ~ 07.05. 13 Uhr.
                    Im Grafen liegen nur Daten ab ~ Mitte 07.05. vor, das wären die letzten drei Zeilen aus dem Log, da wäre der Wertebereich tatsächlich ]1;0[.

                    Die UNDEF werte sind natürlich nicht schön, am ehesten könnte ich mir vorstellen, dass da kurz Wunderground nicht erreichbar war (oder z.B. der Pollinterval zu kurz gewählt ist - dann sperrt Wunderground den Datenabruf ab und zu.

                    Kommentar


                      #11
                      Ich habe den Code von weiter oben 1.1 übernommen. Das mit dem Log stimmt freilich, hatte mich bei Tag verschaut
                      Warum er bloß bei Änderungen schreibt weiß ich nicht. Werd heute Abend die Rule nochmal anstoßen...

                      Kommentar


                        #12
                        Nein, im Log tauchen die Schreibzugriffe in die Persistence nicht auf, das ist richtig so. Die Werte werden aber minütlich geschrieben, sonst wäre Dein Graph leer (alles vor Sonntag...)

                        Kommentar


                          #13
                          Jetzt hats mal geregnet, und hier die das aktuelle Chart:
                          chart.png

                          Code:
                          2017-05-11 21:38:04.073 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 0.00 to 1.00
                          2017-05-11 22:16:26.284 [ItemStateChangedEvent     ] - Niederschlag_WU changed from NULL to 1.00
                          2017-05-11 23:27:51.612 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                          2017-05-11 23:42:51.969 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 3.00
                          2017-05-12 00:02:51.657 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 3.00 to 0.00
                          2017-05-12 00:32:52.196 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 0.00 to 1.00
                          2017-05-12 00:42:52.062 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 1.00 to 2.00
                          2017-05-12 01:22:51.614 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 2.00 to 3.00
                          2017-05-12 02:37:51.609 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 3.00 to 4.00
                          2017-05-12 02:47:51.886 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 4.00 to 5.00
                          2017-05-12 03:57:51.636 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 5.00 to 6.00
                          2017-05-12 04:47:51.833 [ItemStateChangedEvent     ] - Niederschlag_WU changed from 6.00 to 7.00
                          2017-05-12 20:49:47.198 [ItemStateChangedEvent     ] - Niederschlag_WU changed from NULL to 7.00
                          Der Fehler im log taucht nach wie vor auf:
                          Code:
                          2017-05-12 21:12:04.896 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule Regen Vortag: An error occured during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null

                          Kommentar


                            #14
                            Wie sieht denn Deine Rule jetzt aus?

                            Kommentar


                              #15
                              so:
                              Code:
                              rule "Regen Vortag"
                              when
                                  Time cron "0 12 21 * * ?"
                              then
                              var rainInLast24Hours = Niederschlag_WU.maximumSince(now.minusHours(24), "rrd4j")
                              
                              Niederschlag_WU_24h.postUpdate(Niederschlag_WU.maximumSince(now.minusHours(24), "rrd4j"))
                              end
                              hab als test mal mit "minusHours(8)" versucht, denn da gas keine "NULL" Werte. Error bleibt
                              Zuletzt geändert von narf; 13.05.2017, 07:58.

                              Kommentar

                              Lädt...
                              X