rule item beim hochzählen auslösen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

rule item beim hochzählen auslösen

Beitrag von hulda »

Hallo zusammen,
ich bräuchte mal wieder eure Hilfe.
Ich möchte ein item beim erreichen eines Wertes auslösen
Also wenn der cRestsauerstoffgehalt von 7 % auf 19% steigt soll das item cholznachlegen ausgelöst werden
Leider passt das so noch irgendwie nicht

Code: Alles auswählen

var  Number cholznachlegenvariable 

rule "nachlegen"

when	Item cRestsauerstoffgehalt changed       
 
then
 cholznachlegenvariable.postUpdate (cRestsauerstoffgehalt.state as Number) 

if ((cholznachlegenvariable.state  ) >= (cRestsauerstoffgehalt.state as Number))
{
 cholznachlegen.postUpdate(1) 
  }

else
{ 
   cholznachlegen.postUpdate(0)
}
end

Vielen Dank für eure Hilfe
Gruß Dirk

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: rule item beim hochzählen auslösen

Beitrag von udo1toni »

Also, da wären ein paar Dinge zu klären...
  1. Warum von 7% auf 19%? Das ist zum Einen ein ganz schöner Sprung und scheint mir auch sonst seltsam spezifisch.
  2. 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)?
  3. 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.
  4. 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

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: rule item beim hochzählen auslösen

Beitrag von hulda »

Hallo Toni,
danke für die Ausführliche Erklärung.
Ja das mit den 7 % war falsch. Wenn Feuer brennt geht der Sauerstoffgehalt nach unten ...und wenn er weil das Holz abgebrannt ist geht er wieder hoch. Der obere Wert ist bei so ca. 19%.
Ich glaube man muß noch folgende Dinge mit unterbringen:
1. ob überhaupt Feuer brennt (cKesselzustand = 3)
2. wie voll der Pufferspeicher ist (cPufferLadezustand =< 60) unter z.B. 60%
3. das die Tür vom Ofen geöffnet wurde (cKesselzustand = 6) und das nachgelegt wurde
Also wäre der Werdegang folgender:
- Feuer aus (cKesselzustand = 5)
- anzünden
- Feuer an (cKesselzustand = 3)
- Sauerstoffgehalt geht runter (cRestsauerstoffgehalt....Wert)
- Holz verbrennt und der Sauerstoffgehalt geht hoch auf z.B 19 %
- es wir angezeigt "nachlegen" wenn Pufferbehälter noch keine z.B. 60% hat
- Tür auf Holz rein (cKesselzustand = 6)
- Tür zu Feuer an (cKesselzustand = 3)
- Sauerstoffgehalt geht wieder nach unten
usw...bis Pufferspeicher voll.
- wenn Pufferspeicher voll (cPufferLadezustand => 60) "nicht nachlegen" anzeigen


ist komplizierter wie gedacht :)

Gruß Dirk

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: rule item beim hochzählen auslösen

Beitrag von udo1toni »

:) Eigentlich gar nicht soooo schlimm, vor allem, wenn Du die benötigten Werte schon so gut aufbereitet hast.

Darf ich annehmen, dass damit das Nachlegen-Item lediglich eine Anzeige darstellt, die meinetwegen noch ein externes Licht schaltet, ansonsten aber nur den Anwender erinnert, dass er das Holz nachlegen sollte?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: rule item beim hochzählen auslösen

Beitrag von hulda »

ja genau...es wird dann nur auf den Glastastern und in Openhab angezeigt.

Antworten