Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Historische Daten aus db4o lesen (funktioniert nicht)

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

    [Handbuch] - √ - Historische Daten aus db4o lesen (funktioniert nicht)

    Hallo,

    ich möchte mir historische Daten anschauen. Hierzu habe ich zwei Number-Items angelegt mit denen ich Daten der letzten Minute bzw. 15 Minuten darstellen möchte. Die Daten hierzu sollen aus einem db4o.persist gelesen werden.

    Leider haben alle drei Items immer den gleichen Wert!
    Was mache ich falsch?

    Das Item-File sieht wie folgt aus:

    Code:
    Number Betriebsstundenzaehler_Esszimmer_Tisch     "Betriebsstundenzähler Tisch [%d]"    (Test)
    Number Betriebsstundenzaehler_esszimmer_T_his1    "Betriebsstundenzähler Tisch -1 M [%d]" (Test)
    Number Betriebsstundenzaehler_esszimmer_T_his2    "Betriebsstundenzähler Tisch -15 M [%d]" (Test)
    Das db4o.persist file wie folgt:
    Code:
    Strategies {
            everyMin  : "0 * * * * ?"
            everyHour : "0 0 * * * ?"
            everyDay  : "0 0 0 * * ?"
    
            default = everyChange
    }
    
            Betriebsstundenzaehler_Esszimmer_Tisch : strategy = everyChange, everyDay, everyMin, restoreOnStartup
    }
    Die Regel welche jede Minute die Werte der Items aktualisiert.
    Code:
    rule historische_Daten
    when
        Time cron "0 0/1 * * * ?"
    then
     //PowerMeter.historicState(now.toDateMidnight.withDayOfMonth(1))
     Betriebsstundenzaehler_esszimmer_T_his1.postUpdate(Betriebsstundenzaehler_Esszimmer_Tisch.historicState(now.minusMinutes(1)))
     Betriebsstundenzaehler_esszimmer_T_his2.postUpdate(Betriebsstundenzaehler_Esszimmer_Tisch.historicState(now.minusMinutes(15)))
    end
    PS: Aktuell ist das nur ein Beispiel, später möchte ich die Daten der letzten Tage, Monate bzw. Jahre anzeigen.

    Gruß
    Pierre

    #2
    Hi Pierre,

    da gab es einen Bug, den Kai gestern gefixed hat. Der Fix ist ab Build #359 verfügbar. Welchen Build hast Du gerade im Einsatz?

    Gruß,

    Thomas E.-E.
    Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

    Kommentar


      #3
      Hallo Thomas,

      vielen Dank für den Tipp!

      Auf dem Rechner wo ich das Demo erstellt habe, ist noch ein alter Stand von openHab installiert.

      Nach einem Update funktioniert es!

      Gruß
      Pierre

      Kommentar


        #4
        Hallo,

        noch ein paar Frage zum db4o.persist.

        1.) Besteht die Möglichkeit die Informationen zu einem bestimmte Zeitpunkt aus der Datenbank zu lesen?

        Nach der Art:
        Code:
        Betriebsstundenzaehler_Esszimmer_Tisch.historicState([I]<01.01.2013 um 00:00>[/I])
        2.) Kann der Mittelwerte über einen Zeitraum berechnet werden?

        z.B.
        Die Werte werden Täglich/Stündlich im db4o.persist gespeichert.
        Den Durchschnitt über die Wochen berechnen und diesen direkt auslesen.

        Nach der Art:
        Code:
        Betriebsstundenzaehler_Esszimmer_Tisch.historicState([I]<Mittelwert über alle Wochen beginne ab 01.01.2013 um 00:00>[/I])
        Vermutlich muss sowas über eine Regel oder Script erfolgen.

        Mittelwerte für Woche1 = 34, Woche2 = 50, Woche3 = 45
        --> berechneter Mittelwert = 43

        Bitte um Ansätze wie so etwas realisiert werden kann.

        Gruß
        Pierre

        Kommentar


          #5
          Hi Pierre,

          Zitat von mepi0011 Beitrag anzeigen
          Besteht die Möglichkeit die Informationen zu einem bestimmte Zeitpunkt aus der Datenbank zu lesen?
          Code:
          Betriebsstundenzaehler_Esszimmer_Tisch.historicState([I]<01.01.2013 um 00:00>[/I])
          genau das macht historicState. Aus dem javadoc "Retrieves the state of a given 'item' to a certain point in time."

          Zitat von mepi0011 Beitrag anzeigen
          2.) Kann der Mittelwerte über einen Zeitraum berechnet werden?
          ja, genau dafür gibt es die Methode averageSince(). Allerdings kannst Du keinen Endzeitpunkt angeben. Es wird immer der Durchschnitt vom gegebenen Zeitpunkt bis heute errechnet.

          Gruß,

          Thomas E.-E.
          Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

          Kommentar


            #6
            Zitat von teichsta Beitrag anzeigen
            Hi Pierre,

            genau das macht historicState. Aus dem javadoc "Retrieves the state of a given 'item' to a certain point in time."

            Gruß,

            Thomas E.-E.
            Hallo Thomas,

            ich habe mich im ersten Punkt wohl nicht klar ausgedrückt. sorry!

            Die bessere Beschreibung ist, wie gebe ich den "a certain point in time" an, wenn nicht now.minus... verwenden werden soll.

            Ziel ist es hier eine feste Zeit anzugeben z.B. 01.01.2013 um 00:00:00

            z.B. über eine Variable und wie definiere ich diese?

            Gruß
            Pierre

            Kommentar


              #7
              Code:
              import org.joda.time.DateTime
              
              Betriebsstundenzaehler_Esszimmer_Tisch.historicState(DateTime::parse("2013-01-01T00:00:00"))
              (ohne das ausprobiert zu haben). Hier ISODateTimeFormat (Joda time 2.1 API)) findest Du weitere Beispielse zu den möglichen Formaten.

              Gruß,

              Thomas E.-E.
              Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

              Kommentar


                #8
                Zitat von teichsta Beitrag anzeigen
                Code:
                import org.joda.time.DateTime
                
                Betriebsstundenzaehler_Esszimmer_Tisch.historicState(DateTime::parse("2013-01-01T00:00:00"))
                (ohne das ausprobiert zu haben). Hier ISODateTimeFormat (Joda time 2.1 API)) findest Du weitere Beispielse zu den möglichen Formaten.

                Gruß,

                Thomas E.-E.
                Hallo Thomas,

                vielen Dank für den Tipp!

                Nach etwas ausprobieren und Recherche im Internet habe ich es hinbekommen!

                Folgendes Funktioniert (innerhalb eine Regel):
                Code:
                 var DateTime Anfang = now.minusYears(1)
                 Start.postUpdate(Anfang.getYear.toString)
                oder

                Code:
                var DateTime Anfang = DateTime::parse((now.minusYears(1)).getYear.toString + "-01-01T00:00:00")
                Start.postUpdate(Anfang.toString)
                Gruß
                Pierre

                Kommentar


                  #9
                  Hi Pierre,

                  schön zu hören!

                  Zitat von mepi0011 Beitrag anzeigen
                  Folgendes Funktioniert (innerhalb eine Regel):
                  Code:
                   var DateTime Anfang = now.minusYears(1)
                   Start.postUpdate(Anfang.getYear.toString)
                  das ist auch die Version, mit der Du weiter arbeitest, oder? Die String-Operation aus der zweiten Variante sieht eher häßlich aus :-)

                  Gruß,

                  Thomas E.-E.
                  Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                  Kommentar

                  Lädt...
                  X