Also, da wären ein paar Dinge zu klären...
- Warum von 7% auf 19%? Das ist zum Einen ein ganz schöner Sprung und scheint mir auch sonst seltsam spezifisch.
- Welche Itemtypen verwendest Du überhaupt? Ist cRestsauerstoffgehalt ein Number Item? Vermutlich...
Ist cholznachlegen ebenfalls ein Number Item? Wenn ja, warum (wo es doch augenscheinlich nur eine Ja/Nein Funktion hat, die sich besser mit ON/OFF abdecken ließe)?
- Du definierst eine globale Variable cholznachlegenvariable, soweit, so gut. Innerhalb der Rule behandelst Du die Variable aber als Item, indem Du versuchst, eine Methode .postUpdate() aufzurufen, welche Variablen nun mal nicht haben.
- Nachdem Du der Variablen einen Wert zugewiesen hast, vergleichst Du, ob dieser Wert nun größer oder gleich dem gerade zugewiesenen Wert ist. das scheint mir absoluter Quatsch zu sein...
Ich kann nur mutmaßen, dass Du in Wirklichkeit prüfen willst, ob der Sauerstoffgehalt gestiegen ist, also eine Vergleich zwischen dem alten Wert und dem neuen Wert anstellen willst. Nähme ich Punkt Eins meiner Frageliste wörtlich, müsstest Du den alten Wert mit 7 vergleichen und den neuen Wert mit 19, aber wie gesagt erscheint mir auch dieser Punkt äußerst unwahrscheinlich.
Am ehesten könnte ich mir sowas vorstellen:
Code: Alles auswählen
rule "Holz nachlegen"
when
Item cRestsauerstoffgehalt changed
then
val nRestO2neu = if(newState instanceof Number) (newState as Number) else -1
val nRestO2alt = if(previousState instanceof Number) (previousState as Number) else -1
var mySwitch = 0
if(nRestO2neu >= 19 && nRestO2alt < nRestO2neu)
mySwitch = 1
if(cholznachlegen.state != mySwitch)
cholznachlegen.sendCommand(mySwitch)
end
Wenn cRestsauerstoffgehalt seinen Status geändert hatstartet die Rule.
Es werden zwei lokale (!) Konstanten (!) definiert, die den WErt nach und den Wert vor der Änderung enthalten. Sollte das Item in einem der beiden Zustände keine gültige Zahl enthalten, so wird stattdessen -1 genommen (das könnte man auch anschließend als Kriterium verwenden, um die Rule sauber abbrechen zu lassen)
Eine lokale Variable wird angelegt und mit dem Wert 0 vorbelegt.
Falls der neue Messwert über dem alten Messwert liegt und die 19 erreicht oder überschreitet, wird die Variable auf 1 gesetzt.
Falls der aktuelle Zustand des Nachlege-Items vom neuen Sollwert abweicht, wird der neue Sollwert als Befehl abgesetzt.
Wie gesagt würde ich eher ein Switch Item für die Aktivierung des Nachlegens erwarten.
Die 7 kann ich nicht guten Gewissens in der Bedingung unterbringen, weil ich mit großer Sicherheit sagen kann, dass eine entsprechende Bedingung niemals erfüllt sein wird, es sei den, Du stellst Dich mit Laborinstrumenten hin und manipulierst den Sensor mit hohem Aufwand, so dass der Sauerstoffgehalt tatsächlich innerhalb zweier Messzyklen exakt um die geforderten 12% von 7% auf 19% ansteigt.
MAn wird sich irgendwo merken müssen, dass Holz nachgelegt wurde, damit nicht bei jeder neuen Messung mit gestiegenem Sauerstoffgehalt über 19% wieder Holznachlegen aktiviert wird.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet