Ankündigung

Einklappen
Keine Ankündigung bisher.

previousState und Persistenz verwenden

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

    previousState und Persistenz verwenden

    Hallo,
    ich habe derzeit zwei Persistence Services laufen, influxDB für Langzeitaufzeichnungen und mapDB nur für restoreOnStartup.
    Muss ich für für eine Abfrage
    Code:
    if (Enthaertungsanlage.previousState==ON) ...
    einen Persistenzservice bemühen oder hat openhab den previousState sowieso im Bauch/Kopf?
    Falls ich einen Persistenzservice benötige, würde ich den mapDB nehmen wollen, da ich ja nur den letzten Wert benötige. influxDB ist mein Default-Peristenz-Service.
    Wie müsste dann die Abfrage lauten, damit mapDB um den previousState abgefragt wird?

    Das
    Code:
    if (Enthaertungsanlage.previousState("mapdb")==ON) ...
    meckert Designer schon mal an und war auch nur ein Versuch eines Unwissenden

    Viele Grüße
    Michael

    #2
    Einen Teil meiner Fragen kann ich vermutlich schon selbst beantworten. Meine Items, die einen previousState benötigen melden im openhab.log
    Code:
    2015-06-15 17:57:30.947 [ERROR] [i.i.InfluxDBPersistenceService] - database error: Couldn't find series: AlarmTemperaturfuehlerSchlafzimmer
    Persistiert werden diese Daten in mapDB. Jetzt bleibt die Frage, wie greife ich auf den previousState der mapDB zu. Wie schon gesagt ist
    Code:
    persistence:default=influxdb
    Wie ist die Syntax. Das fuktioniert nicht:
    Code:
     
     Enthaertungsanlage.previousState[COLOR=#FF0000][U][B]("mapdb")[/B][/U][/COLOR]

    Kommentar


      #3
      Hi Stähler!

      was verwendest du als Trigger? Hab gerade folgendes gefunden:

      Implicit Variables inside the Execution Block


      Besides the implicitly available variables for items and commands/states (see the script documentation), rules can have additional pre-defined variables, depending on their triggers:
      • Every rule that has at least one command event trigger, will have the variable receivedCommand available, which can be used inside the execution block.
      • Every rule that has at least one status change event trigger, will have the variable previousState available, which can be used inside the execution block.


      Scheint also triggerabhängig zu sein....

      Außerdem scheint previousState eine Variable zu sein und keine Methode...

      Gruß,
      Thomas
      Zuletzt geändert von thoern; 16.06.2015, 17:46.

      Kommentar


        #4
        Hi Thomas,
        da bin ich auch schon mal drauf gestoßen, unter Persistence finde ich jedoch diese Methode
        Code:
         
         <item>.previousState(AbstractInstant) - Retrieves the previous state of the item.
        Ich blick's nicht ...

        Ich glaube es gibt beides. Da ich meiner Rule aber mehrere Trigger habe, kann openhab ja nicht wissen, wessen previousState gerade benötigt wird. Daher wird schon der persisitierte Werte des Items benötigt, nur wie komme ich da dran.

        Viele Grüße
        Staehler

        Kommentar


          #5
          Wenn Du den Designer verwendest, kannst Du Dir mit <strg>+Leertaste Hilfe geben lassen. Wenn Du also
          Enthaertungsanlage.previousSta eingibst und dann <strg>+Leertaste drückst, geht eine Liste auf, in der alle möglichen Ergänzungen stehen. Ich bin mir leider im Moment auch nicht sicher über die richtige Schreibweise und bin auf der Arbeit. Eventuell spielt auch die Groß/Kleinschreibung eine Rolle, ist also mapdb ≠ mapDB?

          Kommentar


            #6
            Also, hab grad nachgeschaut, laut Kontexthilfe lautet die korrekte Formulierung
            Enthaertungsanlage.previousState(true|false,"mapdb")
            Frag mich nicht, was dieser Boolean-Wert steuert, der Designer meckert das Statement jedenfalls erst dann nicht an, wenn man den Boolean-Wert setzt.

            Edit: Hab's im Source-Code gefunden. Wenn man previousState(true) angibt, ignoriert er alle vorhergehenden identischen Werte, soll heißen, er gibt den letzten unterschiedlichen Wert zurück. Bei Boolean-Status ist das dann natürlich uninteressant, aber bei Zahlen-Status kann diese Eingrenzung sicher hilfreich sein. Das korrekte Statement muss also Enthaertungsanlage.previousState(false,"mapdb") lauten
            Zuletzt geändert von udo1toni; 17.06.2015, 18:27.

            Kommentar


              #7
              udo1toni Danke für Deine Recherche. Soweit bin ich mittlerweile auch gekommen und habe über die Google Group auch schon zwei Helfer. Bisher leider erfolglos, alle drei aufgeführten Beispiele führen zum gleichen Ergebniss:
              Code:
              var test = webserver.state
              var test = webserver.previousState(false, "mapdb")
              var test = webserver.historicState(webserver.previousState(false, "mapdb").timestamp, "mapdb")
              Ich schildere mal kurz, wie es sich mir darstellt:
              Ich bekomme für den previoiusState und den currentState immer die gleichen Ergebnisse. Das lässt mich darauf schließen, dass der Persistenzservice das Item speichert, danach ruft die Rule den zuletzt gespeicherten Wert (previousState) ab, welche aber eigentlich der currentState ist. Eigentlich wäre, wenn meine Annahme stimmt, der vorletzte State der previousState. Insofern erschließt sich mir bisher nicht der Sinn dieser Methode.
              Ich habe das im Übrigen sowohl mit der mapdb, als auch influxdb getestet, da ja mapdb eigentlich nur den letzten Wert speichert. mapdb ist ja eigentlich nur für den restoreOnStartup gedacht, wofür ich es auch nutze.
              Also ich bin nicht weiter gekommen und gebe mit meinen limitierten Kenntnissen und der noch limitierteren Dokumentation jetzt auf

              Kommentar


                #8
                Achso... wenn man drüber nachdenkt... mapdb speichert den letzten Status (nicht den vorletzten), also den aktuellen. dieser Service soll ja genutzt werden, um nach einem Neustart alle Items mit dem letzten Stand zu füllen, nicht mit einem alten Stand previousState ist also nur mit anderen PersistenceServices sinnvoll.

                Kommentar

                Lädt...
                X