Saunatemperatur

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Saunatemperatur

Beitrag von Snatsch »

Hallo :)
ich hatte immer eine Rule laufen die mir angesagt hatte wenn meine Sauna eine Temperatur von 85 Grad erreicht hatte.
unter Version 3.0.2 lief sie auch immer ohne Probleme ;) jetzt habe ich auf Version 3.3.0 aktualisiert und die Rule ging nicht mehr :( gestern war Saunaabend und als die Temperatur 85 Grad überschritten hatte bekam ich 1000 Meldungen das die 85 Grad erreicht sind.
Jetzt habe ich die Rule versucht umzuschreiben und bekomme aber immer folgende Fehlermeldung.

Code: Alles auswählen

2022-10-13 21:28:40.206 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'Saunatemperatur_85_Grad.rules', using it anyway:


Das ist die Rule

Code: Alles auswählen

rule "Sauna Temperatur 85 Grad"
when 
    Item Sauna_Temperatur changed 
then
    if(!(Sauna_Temperatur.state instanceof Number)) {
       logWarn("SaunaTemperatur", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")
       return;
    }
    val nNew = (Sauna_Temperatur.state as Number).floatValue
    if(nNew > 85 && nPrev <= 85) {
       logInfo("SaunaTemperatur", "Die Sauna Temperatur ist ueber 85 Grad")
      Meldung.postUpdate("Die Sauna hat die Temperatur von 85 Grad ereicht ")
    }  
vielleicht kann mir jemand sagen was verkehrt ist :?:
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Saunatemperatur

Beitrag von Mclupo »

Code: Alles auswählen

 if(nNew > 85 && nPrev <= 85)
Wo kommt denn nPrev her?
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Saunatemperatur

Beitrag von peter-pan »

...hast du es vielleicht schon mal so probiert(implizite Variablen):

Code: Alles auswählen

if(previousState <= 85 && newState > 85)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Saunatemperatur

Beitrag von Snatsch »

:) He vielen Dank für eure Hilfe.
Ich habe meinen Raspi einmal neu gestartet seitdem ist die Fehlermeldung weg. Mal schauen wie es beim nächsten Saunaabend aussieht :lol:
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Saunatemperatur

Beitrag von Snatsch »

Hallo,
heute war mal wieder Saunaabend doch mit der Rule wollte es nicht funktionieren :(
Leider gab es keine Ausgabe mit folgender Rule

Code: Alles auswählen

rule "Sauna Temperatur 85 Grad"
when 
    Item Sauna_Temperatur changed 
then
    if(!(Sauna_Temperatur.state instanceof Number)) {
       logWarn("SaunaTemperatur", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")
       return;
    }
    val newState = (Sauna_Temperatur.state as Number).floatValue
    if(previousState <= 85 && newState > 85) {
       logInfo("SaunaTemperatur", "Die Sauna Temperatur ist ueber 85 Grad")
      Meldung.postUpdate("Die Sauna hat die Temperatur von 85 Grad ereicht ")
    }  
end
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

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

Re: Saunatemperatur

Beitrag von udo1toni »

Erst mal: newState ist eine implizite Variable, die darfst Du nicht setzen. newState enthält analog zu previousState den Status des triggernden Items.

Der Inhalt ist aber jeweils ein Status, keine Zahl. Es ist möglich, dass openHAB den Status automatisch als Zahl behandelt, aber es gibt verschiedene Möglichkeiten, warum das nicht passiert. Auch kann das Item ein UoM Item sein, womit dann der Vergleich mit Einheit stattfinden muss oder die Einheit, falls vorhanden, gestrippt werden muss.

Auf der sicheren Seite wärst Du mit folgender Regel:

Code: Alles auswählen

rule "Sauna Temperatur 85 Grad"
when
    Item Sauna_Temperatur changed
then
    if(!(newState instanceof Number)) {                                                         // Falls aktuell kein gültiger Wert
       logWarn("SaunaTemperatur", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")   // Meldung
       return;                                                                                  // und Abbruch
    }
    val newTemp = (newState as Number).floatValue                                               // übernimm Wert ohne Einheit
    var oldTemp = 20.1                                                                          // erzwinge eine Variable vom Typ Float
    if(!(previousState instanceof Number)) {                                                    // falls alter Wert ungültig
       logInfo("SaunaTemperatur", "Vorgängerwert ungültig. Setze Wert unter Grenzwert!")        // Meldung
       oldTemp = 80                                                                             // und default Wert setzen
    } else                                                                                      // falls alter Wert gültig
       oldTemp = (previousState as Number).floatValue                                           // übernimm diesen ohne Einheit

    if(oldTemp <= 85 && newTemp > 85) {                                                         // falls Temperatur gerade über 85 gestiegen
        logInfo("SaunaTemperatur", "Die Sauna Temperatur ist ueber 85 Grad")                    // Meldung
        Meldung.postUpdate("Die Sauna hat die Temperatur von 85 Grad ereicht")
    }
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Saunatemperatur

Beitrag von Snatsch »

He udo1toni :) wie immer bin ich dir für deine Hilfe sehr dankbar :)
wenn ich die Rule von dir per Hand anschiebe kommt die Fehlermeldung im Log

Code: Alles auswählen

2022-10-23 00:03:49.935 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

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

Re: Saunatemperatur

Beitrag von udo1toni »

Die Warnmeldung ist in der Regel selbst codiert und völlig korrekt.

Man kann diese Regel nicht händisch starten, weil sie auf dem Trigger changed beruht und auch von den impliziten Variablen Gebrauch macht.
Du kannst natürlich newState mit itemname.state ersetzen, das nutzt Dir aber im Zusammenhang mit previousState nichts, denn auch dies steht nur im changed-Kontext zur Verfügung, aber im Gegensatz zu newState gibt es keinen Ersatz - es sei denn, Du hast das Item persistiert, dann könntest Du Itemname.previousState verwenden. Das sähe dann so aus:

Code: Alles auswählen

rule "Sauna Temperatur 85 Grad"
when
    Item Sauna_Temperatur changed
then
    if(!(Sauna_Temperatur.state instanceof Number)) {                                                         // Falls aktuell kein gültiger Wert
       logWarn("SaunaTemperatur", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")   // Meldung
       return;                                                                                  // und Abbruch
    }
    val newTemp = (Sauna_Temperatur.state as Number).floatValue                                               // übernimm Wert ohne Einheit
    var oldTemp = 20.1                                                                          // erzwinge eine Variable vom Typ Float
    if(!(Sauna_Temperatur.previousState.state instanceof Number)) {                                                    // falls alter Wert ungültig
       logInfo("SaunaTemperatur", "Vorgängerwert ungültig. Setze Wert unter Grenzwert!")        // Meldung
       oldTemp = 80                                                                             // und default Wert setzen
    } else                                                                                      // falls alter Wert gültig
       oldTemp = (Sauna_Temperatur.previousState.state as Number).floatValue                                           // übernimm diesen ohne Einheit

    if(oldTemp <= 85 && newTemp > 85) {                                                         // falls Temperatur gerade über 85 gestiegen
        logInfo("SaunaTemperatur", "Die Sauna Temperatur ist ueber 85 Grad")                    // Meldung
        Meldung.postUpdate("Die Sauna hat die Temperatur von 85 Grad ereicht")
    }
end
Allerdings ist es eher witzlos, die Rule so zu starten, denn sie wird niemals etwas tun (es sei denn, Du startest sie in dem Moment von Hand, wo sie ohnehin durch den Trigger gestartet wurde und den Kipppunkt <=85 -> > 85 detektiert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Saunatemperatur

Beitrag von peter-pan »

...vielleicht geht ja zur Manipulation des Items ein "kleiner Schubs" per Karaf-Konsole. Das könnte dann mit der von Udo ursprünglich erstellten Rule doch gehen.

Also zuerst schauen, wie die aktuelle Temperatur ist, und dann eine Wert, (1/2 Grad hoch/runter) an das Item senden(Beispiel):

Code: Alles auswählen

openhab> items list |grep -i gaszaehler_heute
Gaszaehler_Heute (Type=NumberItem, State=0.03, Label=Gaszählerstand heute, Category=null)

openhab> openhab:send Gaszaehler_Heute 0
Command has been sent successfully.
openhab>
Bei der Eingabe in der Konsole ist zu beachten, das nur über die "normale Tastatur" Eingaben erfolgen (auch Zahlen). Die Zehnertastatur darf nicht benutzt werden (zumindest bei mir).
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Saunatemperatur

Beitrag von Snatsch »

Vielen Dank udo1toni für die Erklärung :) Also auf den nächsten Saunaabend warten :) aber deine Sachen haben bis jetzt immer gepasst :D
peter-pan der Rule Schnipsel von dir würde mich auch sehr interessieren da das mein nächstes Objekt werden soll :lol: Ich habe eine Gastherme (Buderus) mit KM 200 Binding und würde mir gerne meinen Gasverbrauch für Tag, Monat und Jahr anzeigen lassen :D
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

Antworten