Ankündigung

Einklappen
Keine Ankündigung bisher.

PreviousState wird nicht abgerufen

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

    PreviousState wird nicht abgerufen

    Hallo zusammen,

    auch wenn das Thema previousState schon in einigen Threats besprochen wurde, bekomme ich die noch nicht hin :-(

    Ich nutze zum persistieren die mapDB, welche nicht der default ist.

    Items
    Code:
    [COLOR=#569cd6]Number[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#4ec9b0]Mower_StatusCode[/COLOR][COLOR=#d4d4d4]         [/COLOR][COLOR=#ce9178]"Status Code [%d]"[/COLOR][COLOR=#d4d4d4]              ([/COLOR][COLOR=#4ec9b0]Mower[/COLOR][COLOR=#d4d4d4]) {mqtt[/COLOR][COLOR=#d4d4d4]=[/COLOR][COLOR=#ce9178]"<[mqtt:landroid/status/statusCode:state:default]"[/COLOR][COLOR=#d4d4d4]}[/COLOR]
    Eintrag in mapdb.persist
    Code:
    [COLOR=#4ec9b0]Mower_StatusCode[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#c586c0]:[/COLOR][COLOR=#d4d4d4] strategy [/COLOR][COLOR=#d4d4d4]=[/COLOR][COLOR=#d4d4d4] everyChange,restoreOnStartup[/COLOR]
    Rules (derzeit um das Ganze zu testen)
    Code:
    [COLOR=#c586c0]rule[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#4ec9b0]MowerStatusMonitor[/COLOR]  [COLOR=#c586c0]when[/COLOR]
      [COLOR=#d4d4d4]    [/COLOR][COLOR=#569cd6]Item[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#4ec9b0]Mower_StatusCode[/COLOR][COLOR=#d4d4d4] changed[/COLOR]
      [COLOR=#c586c0]then[/COLOR]
      [COLOR=#d4d4d4]    pushNotification([/COLOR][COLOR=#ce9178]"eDolly: "[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#d4d4d4]+[/COLOR][COLOR=#d4d4d4] now, [/COLOR][COLOR=#4ec9b0]Mower_StatusCode[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]previousState([/COLOR][COLOR=#569cd6]false[/COLOR][COLOR=#d4d4d4],[/COLOR][COLOR=#ce9178]"mapdb"[/COLOR][COLOR=#d4d4d4])[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]state [/COLOR][COLOR=#d4d4d4]+[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#ce9178]" changed to "[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#d4d4d4]+[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#4ec9b0]Mower_StatusCode[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]state)[/COLOR]
      [COLOR=#c586c0]end[/COLOR]
    Wenn sich der Status wechselt, wird dies zwar im Karaf Log angezeigt, jedoch ist irgendetwas beim persistieren falsch.

    Die Rule an sich funktioniert auch und erkennt zumindest die Statusänderung.
    Jedoch zeigt die Prowl Nachricht dann z.B. 1 changed to 1 oder auch mal 5 to 5 usw.

    Bin wieder für Tipps in die Richtung dankbar.

    Viele Grüße,
    Jörg

    #2
    Das Problem ist, dass Du den falschen Persistence Service verwendest. mapdb merkt sich exakt einen Status, nämlich den aktuellen.

    Allerdings brauchst Du für Deine Anforderung gar keine Persistence, openHAB kennt nämlich implizite Variablen, in diesem Fall, weil Deine Rule über changed getriggert wird, gibt es die Variable previousState (nicht zu verwechseln mit der Eigenschaft .previousState !)
    Die Variable enthält innerhalb einer Rule den Status, den das triggernde Item vor dem Change hatte, also genau, was Du suchst. Die Rule muss also so aussehen:
    Code:
    rule "Mower Status Monitor"
    when
       Item Mower_StatusCode changed
    then
       pushNotification("eDolly: " + now, previousState + " changed to " + Mower_StatusCode.state)
    end
    Alternativ kannst Du natürlich auch einen anderen Persistence Service nutzen, der Strings unterstützt und abfragbar ist (z. B. db4o sollte immer noch funktionieren)

    Kommentar


      #3
      Works like a charm ;-)

      danke für den Schubs, da habe ich das Objekt mit der Eigenschaft verwechselt.

      Kommentar

      Lädt...
      X