Seite 1 von 2
Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 11:42
von domjo75
Hallo zusammen,
ich habe gerade mal wieder Zeit und versuche meine diversen Rules zu optimieren.
Über eine Sache stolpere ich immer wieder und finde keine Lösung bzw. steh da auf dem Schlauch.
Ich habe bzw. eine Rule, die mir ein Rollo auf Tilt fährt, wenn die Illuminance > 4500 oder isNight == ON ist und ich den TV einschalte.
Funktioniert soweit super.
Aber, wenn ich den Fernseher wieder ausschalte bleibt das Rollo natürlich auf Tilt. Ich würde es schön finden, wenn das Rollo wieder in den letzten Zustand zurückfährt.
Dazu müsste ich ja eigentlich den letzten Zustand abfragen.
Ich hatte erstmal an ein ITEM gedacht, was ich beim Starten der dem Wert befülle und später wieder auslese.
Leider möchte ich das gerne auch auf Lichter anwenden, die dann wieder ihren Status annehmen.
Das werden ganz schön viele Speicher-Items.
Gibt es da keine Out-Off-The-Box Lösung ?
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 12:27
von sihui
domjo75 hat geschrieben: ↑21. Jan 2022 11:42
Gibt es da keine Out-Off-The-Box Lösung ?
Persistence und previousState:
https://www.openhab.org/docs/configurat ... -and-rules
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 12:36
von domjo75
ahh, ok. Dann muss ich mir das mal genauer anschauen. Die Persistences müssen erst eingerichtet werden, oder?
Dann wäre das ja das was ich brauche
<item>.previousState()
Danke
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 12:50
von domjo75
ich habe das jetzt mal schnell eingerichtet. Einfach per default als rrd4j Persistence (spricht was dagegen die rrd4j zu nutzen?)
Dann eine rrd4j.persist angelegt, mit diesem Inhalt:
Code: Alles auswählen
Strategies {
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
}
Items {
// persist the Item state of Heating_Mode and Notifications_Active on every change and restore them from the db at startup
Wohnzimmer_Rollo2_Level: strategy = everyChange, restoreOnStartup
// additionally, persist all temperature and weather values every hour
// Temperature*, Weather* : strategy = everyHour
}
Das war´s dann schon und ich kann den Status mit
Wohnzimmer_Rollo2_Level.previousState.state abfragen? Das wäre ja fast zu einfach
Edit: Ganz so leicht ist es dann doch nicht. Grundsätzlich merkt er sich schon den letzten Status. Wenn ich den Fernseher aber nun ausschalte setzt er den letzten Status auf TILT. Ich bräuchte also den Vorletzten Status

Oder habe ich da was falsch verstanden ?
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 13:42
von KellerK1nd
Ich würde diesen Fall in einem Proxy Item speichern, das heißt wenn dein TV einschaltet wird in dem Moment der Status in dem Proxy gespeichert. Sobald der TV wieder ausschaltet wird das ProxyItem mit dem Status abgefragt.
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 14:39
von domjo75
Also so wie ich es ursprünglich gedacht habe, einfach ein ITEM Wohnzimmer_Rollo2_LastLevel bauen und da reinschreiben?!
Wird halt ziemlich unübersichtlich irgendwann.
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 14:47
von peter-pan
Ich hab mich zwar mit den Datenbanken und der Persistence noch nicht so richtig beschäftigt, aber ich galube das es so eine Statusabfrage nicht gibt:
domjo75 hat geschrieben: ↑21. Jan 2022 12:50
Oder habe ich da was falsch verstanden ?
Vielleicht habe ich es ja auch nicht richtig verstanden, aber wenn du den TV einschaltest (ON) soll der Rollo auf "TILT" fahren (Ich nehme an von "OPEN").
In meiner Vorstellung wäre dann "TILT" aktueller Status und "OPEN" der vorherige Status.
Das würde bedeuten, wenn du den TV ausschaltest (OFF), dann soll der Rollo wieder auf "OPEN" fahren.
Dann würde ich es mal so in der Rule probieren:
Code: Alles auswählen
....
Wohnzimmer_Rollo2_Level.sendCommand(Wohnzimmer_Rollo2_Level.previousState())
...
...ohne Gewä(e)hr...

Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 15:13
von domjo75
peter-pan hat geschrieben: ↑21. Jan 2022 14:47
Code: Alles auswählen
....
Wohnzimmer_Rollo2_Level.sendCommand(Wohnzimmer_Rollo2_Level.previousState())
...
...ohne Gewä(e)hr...
Die Idee hatte ich auch. Ich gebe mir den PreviousState im Log aus.
In dem Moment wo ich den Fernseher ausschalte hat schon ein Change stattgefunden und der previousState wird mit dem aktuellen Wert überschrieben. Damit ist mein gemerkter Wert weg.
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 15:17
von peter-pan
Wie sieht denn deine Regel aus ?
Re: Status eines ITEM speichern und wiederherstellen
Verfasst: 21. Jan 2022 17:17
von sihui
domjo75 hat geschrieben: ↑21. Jan 2022 12:50
ich habe das jetzt mal schnell eingerichtet.
Schnell ist immer schlecht:
Du musst für rrd4j zwingend
hinzufügen, sonst funktioniert es nicht.
https://www.openhab.org/addons/persiste ... rsist-file