Re: Nutzung von 2 Datenbanken im OH3
Verfasst: 22. Jul 2022 19:15
Also, Du schreibst bei jedem Systemstart eine Reihe Werte in die Datenbank und liest sie sofort wieder aus? Ich nehme an, es geht Dir beim dem Block "Aufzeiten zuweisen" nur um ein einmaliges initialisieren?
Jedenfalls war der vorherige Wert des Items ganz sicher NULL, wenn Du seit Systemstart nicht nochmal geschrieben hast.
Ich verstehe ehrlich gesagt auch nicht, worauf Du mit dem Code hinaus willst.
Wenn das System startet, sind alle Items erst mal mit dem Wert NULL gesetzt. Wenn Du möchtest, dass die Items den Wert vor dem Herunterfahren bekommen, so reicht es, in einer(!) der *.persist Dateien die Strategy everyChange,restoreOnStartup zu setzen.
Geht es darum, die Einstellungen wiederherzustellen, die zu einem ganz bestimmten Zeitpunkt galten, so musst Du mit historicState(<zeitstempel>).state arbeiten, wobei Du dann aber wissen musst, wann die Daten gespeichert wurden.
Allgemein wird man meist die zuletzt eingestellten Werte wiederherstellen wollen. Das geht am einfachsten über die mapDB Persistence.
Die mapDB speichert exakt den aktuellen Zustand eines Items. Beim Start von openHAB kann sie deshalb exakt den Zustand beim Herunterfahren des Systems wiederherstellen.
Dazu brauchst Du aber überhaupt keine Regel!
Der Codeeblock
löst mit ziemlicher Sicherheit den Fehler aus, denn zu diesem Zeitpunkt hat das Item das erste Mal einen gültigen Wert. Der vorhergehende Wert ist also NULL. NULL ist keine gültige Zahl und kann also auch nicht nach Number gecastet werden.
Wenn überhaupt, so müsste der Codeblock so aussehen:
oder alternativ kürzer:
Der ternäre Operator x= if(a) b else c weist x in Abhängigkeit von a entweder Wert b oder c zu.
Darf ich fragen, was Du eigentlich erreichen willst? Schon allein, dass Du Auf- und Abzeiten der Rollläden in openHAB setzt, scheint mir umständlich.
Ich habe hier diverse Sonoff T1 2Ch mit denen ich Rollläden steuere. Die Auf- und Abzeiten sind dabei im Sonoff gespeichert. Die Position gebe ich in % an, 0 % = maximal offen, 100 % = maximal geschlossen. Die normalen Steuerbefehle (UP/DOWN/STOP) funktionieren ebenfalls.
Die Sonoff sind mit Tasmota geflasht, welches seit V7.irgendwas auch Rollläden steuern kann, wenn man das möchte (muss natürlich aktiviert werden). Aktuell ist wohl V12.0.2...
Jedenfalls war der vorherige Wert des Items ganz sicher NULL, wenn Du seit Systemstart nicht nochmal geschrieben hast.
Ich verstehe ehrlich gesagt auch nicht, worauf Du mit dem Code hinaus willst.
Wenn das System startet, sind alle Items erst mal mit dem Wert NULL gesetzt. Wenn Du möchtest, dass die Items den Wert vor dem Herunterfahren bekommen, so reicht es, in einer(!) der *.persist Dateien die Strategy everyChange,restoreOnStartup zu setzen.
Geht es darum, die Einstellungen wiederherzustellen, die zu einem ganz bestimmten Zeitpunkt galten, so musst Du mit historicState(<zeitstempel>).state arbeiten, wobei Du dann aber wissen musst, wann die Daten gespeichert wurden.
Allgemein wird man meist die zuletzt eingestellten Werte wiederherstellen wollen. Das geht am einfachsten über die mapDB Persistence.
Die mapDB speichert exakt den aktuellen Zustand eines Items. Beim Start von openHAB kann sie deshalb exakt den Zustand beim Herunterfahren des Systems wiederherstellen.
Dazu brauchst Du aber überhaupt keine Regel!
Der Codeeblock
Code: Alles auswählen
gRS_REGEL.members.forEach[i| // Für alle RS mit Zeitsteuerung
zw = i.previousState(true,"influxdb").state as Number
Wenn überhaupt, so müsste der Codeblock so aussehen:
Code: Alles auswählen
gRS_REGEL.members.forEach[i| // Für alle RS mit Zeitsteuerung
if(i.previousState(true,"influxdb").state instanceof Number)
zw = i.previousState(true,"influxdb").state as Number
else
zw = 0
Code: Alles auswählen
gRS_REGEL.members.forEach[i| // Für alle RS mit Zeitsteuerung
zw = if(i.previousState(true,"influxdb").state instanceof Number) i.previousState(true,"influxdb").state as Number else 0
Darf ich fragen, was Du eigentlich erreichen willst? Schon allein, dass Du Auf- und Abzeiten der Rollläden in openHAB setzt, scheint mir umständlich.
Ich habe hier diverse Sonoff T1 2Ch mit denen ich Rollläden steuere. Die Auf- und Abzeiten sind dabei im Sonoff gespeichert. Die Position gebe ich in % an, 0 % = maximal offen, 100 % = maximal geschlossen. Die normalen Steuerbefehle (UP/DOWN/STOP) funktionieren ebenfalls.
Die Sonoff sind mit Tasmota geflasht, welches seit V7.irgendwas auch Rollläden steuern kann, wenn man das möchte (muss natürlich aktiviert werden). Aktuell ist wohl V12.0.2...