mal wieder Fachwissen gefragt

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: mal wieder Fachwissen gefragt

Beitrag von udo1toni »

:) heißt, Du willst zwei Meldungen haben, im Zweifel sollte die 1. Meldung mit einer automatischen Steuerung der Solltemperaturen einhergehen. also ungefähr so:

Code: Alles auswählen

rule "Pufferspeicher Nachricht"
when 
    Item Pufferspeichersensor_Temperatur changed 
then
    logDebug("warmwasser", "Rule getriggert! Wert : {} ", Pufferspeichersensor_Temperatur.state )
    if(!(previousState instanceof Number))
       logWarn("warmwasser", "kein gültiger Vergleichswert! Setze Wert unter 55.")
    val nPrev = if(previousState instanceof Number) (previousState as Number).floatValue else 50
    if(!(newState instanceof Number)) {
       logWarn("warmwasser", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")
       return;
    }
    val nNew = (newState as Number).floatValue
    if(nNew > 55 && nPrev <= 55) {
       logInfo("warmwasser", "Pufferspeicher hat Temperatur 55 °C überschritten! ")
       Meldung.postUpdate("Der Pufferspeicher hat die Temperatur 55 °C überschritten!")
       // Hier Code zum Setzen der Solltemperatur einbauen:
       // Heizung1_Soll.sendCommand(21)
       // Heizung2_Soll.sendCommand(21)
    }
    if(nNew > 85 && nPrev <= 85) {
       logWarn("warmwasser", "Pufferspeicher hat Temperatur 85 °C überschritten!")
       Meldung.postUpdate("Der Pufferspeicher hat die Temperatur 85 °C überschritten!")
    }
end
Theoretisch könnte es dazu kommen, dass beide Meldungen ausgegeben werden, das ist aber nur der Fall, wenn die Temperatur zwischen zwei Messungen von unter 55 auf über 85 steigt. Also z.B., wenn der Kachelofen explodiert... ;) Schschschuldigung...
Zum Testen kannst Du entweder das Logging aufdrehen, oder natürlich das logDebug zu Beginn durch ein logInfo ersetzen. Aber im Normalbetrieb möchtest Du von solchen Rules nur behelligt werden, wenn es auch einen konkreten Anlass gibt (ein Sensor ist ausgefallen o.Ä.)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: mal wieder Fachwissen gefragt

Beitrag von Snatsch »

vielen lieben Dank udo1toni für deine Hilfe :) könntest du mir die Zeile nochmal erklären :?:

Code: Alles auswählen

val nPrev = if(previousState instanceof Number) (previousState as Number).floatValue else 50
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

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

Re: mal wieder Fachwissen gefragt

Beitrag von udo1toni »

Aber gerne.
Es wird eine Konstante (val) mit dem Namen nPrev definiert. Dieser Konstanten wird ein Wert zugewiesen, und zwar abhängig von der Bedingung (if()), dass die implizite Variable previousState eine Zahl enthält (instanceof Number).
Falls die Bedingung erfüllt ist, den Wert aus previousState, als Number verwendet und gewandelt nach Float.
Falls die Bedingung nicht erfüllt wird, wird der Wert 50 verwendet.

previousState ist eine implizite Variable, das heißt, das System stellt sie zur Verfügung, und zwar, weil die Rule mit dem Trigger changed auslöst. Die Variable enthält den Status des triggernden Items vor dem Change.

Falls openHAB neu gestartet ist, enthält previousState den Wert NULL. Falls der letzte Wert z.B. durch einen Übertragungsfehler keine gültige Zahl enthielt, nimmt die Rule einen Wert unterhalb des unteren Alarms an. Somit ist sichergestellt, dass beim Überschreiten der Grenzwerte im Zweifel eine Meldung geschickt wird, falls der letzte Wert ungültig war.

Das Konstrukt (if(a) b else c) heißt ternärer Operator.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: mal wieder Fachwissen gefragt

Beitrag von Snatsch »

:) super echt vielen Dank für deine Mühe.
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Antworten