Variablenänderung: Wert der Variable dauerhaft zwischenspeichern (kein Buffer)

Guten Abend,
aktuell erstelle ich ein Modul zum Regeln der Raumtemperatur, hierzu habe ich eine Frage.

Folgende Beispielsituation:
Ich habe eine festgelegte Temperatur von 20 Grad und einen Button „Urlaubsmodus“.
Sobald der Urlaubsmodus aktiviert wird, wenn ich z.B. in den Urlaub gehe, wird die Temperatur auf 6° gesetzt.

Wenn ich wieder aus dem Urlaub komme, schalte ich den Urlaubsmodus aus und es soll wieder die vorherigen 20° eingestellt werden.

Ich könnte hier jetzt fest 20° hinterlegen, damit dieser Wert bei der Deaktivierung des Urlaubsmodus
automatisch gesetzt wird, das möchte ich nicht, da es flexibel bleiben soll.
Es soll immer der zuletzt eingestellte Wert wieder gesetzt werden, der Eingestellt war bevor der Urlaubsmodus aktiviert wurde. Das können z.B. 19,20, 22 Grad sein.

Mir kam die Idee das ganze als Property-Wert im Modul zwischenzuspeichern, bei der suche nach Lösungen bin ich auf folgenden Thread gestoßen: Daten im Modul speichern - #5 von Dr.Niels, mit Hintergrund zur Info aus dem Thread, der auf das Thema Best Practise in Bezug auf die Modulerstellung verweist, soll das aber nicht gemacht werden, soweit ich verstanden habe.

Einen Buffer kann ich hier nicht verwenden, da der Wert dauerhaft gespeichert werden muss auch nach einem Neustart.

Als einzige Lösung fällt mir hier aktuell nur die Lösung über eine Zusatzvariable, als Zwischenspeicher ein. Das würde ich aber auch gerne vermeiden.

Gibt es eine andere Lösung hierfür, oder habt ihr Ideen, wie man das ganze anders lösen kann?

Ich war glaub ich einfach zu schnell, das ganze sollte über das setzen und lesen von Attributen funktionieren, ist das richtig?

z.B. WriteAttributeInteger — IP-Symcon :: Automatisierungssoftware

2 „Gefällt mir“

Ja, damit kannst du das lösen.
Michael

1 „Gefällt mir“

Ich knüpfe noch einmal an diese Frage an:
Es wäre auch möglich die alten Werte anstatt in Attribute in einem Array zu speichern und dann wieder von dort herzustellen.

Was wäre hier die besser Lösung bzw. wie macht man es eigentlich, mit welcher Methode / Art oder ist beides in Ordnung?

Das Array einfach serialisiert als String in einem Attribut speichern.
Michael

1 „Gefällt mir“

Hast du hier vielleicht noch weitere Infos?
Mit deiner Lösung hätte ich beide Lösungen kombiniert, sprich String + Attribut.

Ich würde gerne verstehen warum man das so macht und ob nicht einfach Array oder Attribute reicht.
Für mein Verständnis.

Verstehe die Frage nicht.
Array ist ein Datentyp und Attribut eine der vier Arten wie Instanzen Daten speichern können.
Das kannst du ja nicht vergleichen, ist ja wie einen Apfel mit einem Korb zu vergleichen.
Michael

Anders gefragt:
Auch wenn das eine ein Datentyp ist und das andere eine Art wie Instanzen die Daten speichern, warum würde es nur mit einem Array nicht reichen? Dieses würde mir die Werte auch als Daten speichern und ich könnte später wieder darauf zugreifen.

Wo sollte es den gespeichert werden?
PHP Variablen, auch Klasseneigenschaften existieren nur in dem Augenblick wo Symcon was damit macht, anschließend sind alle Werte weg, da daß Script ja beendet wurde.
Du musst schon einer der vier Arten hier benutzen:

Michael

Was ich meine wenn ich z.B. folgendes mache:
In meinem Modul habe ich ein Array mit 5 verschiedenen Ist-Temperaturen die aktuell an Thermostaten eingestellt sind. Ich ändere die Temperaturen z.B. wenn ich den Urlaubsmodus aktiviere, jetzt sollen alle aktuellen Werte für die spätere Verwendung gespeichert werden, bevor für alle Thermostate 12 Grad gesetzt werden.

Hierzu lege ich mir ein „Zwischen-Array“ an (dieses ist in der Visualisierung nicht zu sehen) in dem die Werte gespeichert werden. Aus diesem Array kann ich die Werte wieder herstellen wenn der Urlaubsmodus deaktiviert wird. Auch wenn ich keinen Attribut habe.

Das würde doch auch gehen oder nicht?
(Unabhängig von der Sinnhaftigkeit und das man es nicht so machen würde für eine Instanz, nur für mein Verständnis.)

Wo/Wie soll dieses Array den gespeichert werden?
Michael

Jetzt hast du mich bzw. ich habe es verstanden.

Mein genanntes letztes Beispiel wäre mit einer z.B. mit einer Integer-Variable möglich da der Wert hier dauerhaft gespeichert ist / bleibt. Aber mit dem Array nicht, wie du sagst wo wird es gespeichert? Nirgends, es ist nur zur Laufzeit vorhanden.

Genau. Und eine Symcon Variable würde ich dafür halt nicht nutzen, verwirrt ja nur den User.
Ein Attribut als String bleibt auch über einen Neustart erhalten und da drinnen lässt sich per serialize ein Array speichern.
Michael

Perfekt. Danke für die Denkanstöße Nall-Chan.