Seite 2 von 3

Re: Saunatemperatur

Verfasst: 23. Okt 2022 22:48
von peter-pan
...das mit dem Item Gaszähler war nur als Beispiel gedacht ;) . Ich hatte das Item mal zu Testzwecken angelegt. Dabei ging es um eine Rule hier im Forum, mit der ich experimentiert habe. Ich selber heize nicht mit Gas. Ich hatte mir zwar letztes Jahr überlegt von Öl auf Gas umzusteigen, da ich ein günstigen Angebot vom Gasversorger für einen Hausanschluss bekommen habe, aber das hat sich nun wohl erledigt. :shock:

Bei dir wäre das Item, das du anschubsen müsstest natürlich Sauna_Temperatur . Durch Manipulation desselben, wie beschrieben, könntest du die Rule von Udo dazu bringen zu triggern. Ich meine diese hier:

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

Re: Saunatemperatur

Verfasst: 30. Okt 2022 20:51
von Snatsch
Guten Abend :)
gestern war Saunaabend und ich konnte diese Rule ausprobieren :)

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
jetzt war es so das wenn die Temperatur über die 85 Grad kam eine Meldung gesendet wurde und kurz danach kam im LOG UNDEV und die Meldung wurde dann ständig wiederholt :( habe die Rule dann abgeschalten da mein Google Minni gar nicht hinterher gekommen ist :shock:

Re: Saunatemperatur

Verfasst: 30. Okt 2022 23:58
von udo1toni
Und es handelt sich um original diese Rule? was meinst Du mit Google Minni? Wie kommt die Meldung dort hin?

Re: Saunatemperatur

Verfasst: 31. Okt 2022 00:49
von Snatsch
In der Rule habe ich "Meldung" Das heißt ich bekomme eine Nachricht aufs Handy und der Goggle Minni spricht den Text. Ich habe auch 1000 mal die Nachricht bekommen das die Saunatemperatur 85 Grad überschritten hat

Re: Saunatemperatur

Verfasst: 31. Okt 2022 09:31
von udo1toni
Dann hast Du eine zweite Rule, die sich darum kümmert, dass die Meldung weitergereicht wird.
openHAB für sich wird jedenfalls mit postUpdate nichts nach außen schicken (einzige Ausnahme: knx Binding in Verbindung mit *-control Channels).

Interessant wäre ein Auszug aus den Logs (sowohl events.log also auch openhab.log, bitte direkt aus den Dateien, kein Screenshot). Beide Dateien werden auch länger gespeichert, wenn Die Datei eine gewisse Größe überschreitet, wird die umbenannt und eine neue Datei geöffnet.

Eine Abwandlung der Rule von oben, die allerdings im Zweifel dann gar keine Meldung sendet:

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
    if(!(previousState instanceof Number)) {                                                    // falls alter Wert ungültig
        logWarn("SaunaTemperatur", "Vorgängerwert ungültig. Abbruch!")                          // Meldung
        return;
    }
    oldTemp = (previousState as Number).floatValue                                              // übernimm alten Wert ohne Einheit

    if(oldTemp <= 85 && newTemp > 85) {                                                         // falls Temperatur gerade über 85 gestiegen
        logInfo("SaunaTemperatur", "Die Sauna Temperatur hat 85 °C überschritten.")             // Meldung
        Meldung.postUpdate("Die Sauna hat die Temperatur von 85 Grad ereicht")
    }
end
Aber auch dann wäre das natürlich im Log dokumentiert und dieses hilfreich bei der Fehlersuche.

Re: Saunatemperatur

Verfasst: 31. Okt 2022 19:01
von Snatsch
:) wie immer vielen dank für deine Hilfe
ja hab eine Rule laufen die Die Meldung weiter leitet

Code: Alles auswählen

var Timer mVolume = null
rule "send Message"
when
    Item Meldung received update
then
    
    if(Meldung.state == NULL || Meldung.state.toString == "") {
        logWarn("message","Item Meldung erhielt Update auf {}, keine Ausgabe möglich!",Meldung.state)
        return;
    }
    GoogleHomeMinni_Lautstarke.sendCommand(80)
    val String strMessage = Meldung.state.toString
    val urlmessage = java.net.URLEncoder::encode(strMessage, 'UTF-8')
    val telegramAction = getActions("telegram","telegram:telegramBot:xxxxxxxxx")
    telegramAction.sendTelegram(strMessage)
    say(strMessage,null)
    sendHttpGetRequest("https://api.callmebot.com/whatsapp.php?source=openHAB&phone=+xxxxxxxxx&apikey=xxxxxxxx&text=" + urlmessage)
    
    mVolume = createTimer(now.plusSeconds(10), [|
    GoogleHomeMinni_Lautstarke.sendCommand(50)
    ])
    end
wegen den LOGS muss ich heute Abend mal schauen

Re: Saunatemperatur

Verfasst: 31. Okt 2022 23:03
von Snatsch
Screenshot (58).png
so Sauna wieder mal angefeuert :)

Code: Alles auswählen

2022-10-31 20:09:35.131 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:09:40.567 [INFO ] [hab.core.model.script.Geschirrspüler] - Rule triggert ! Wert : 9.87 W 
2022-10-31 20:09:40.606 [INFO ] [nhab.core.model.script.Waschmaschine] - Rule triggert ! Wert : 0.28 W 
2022-10-31 20:11:40.584 [INFO ] [hab.core.model.script.Geschirrspüler] - Rule triggert ! Wert : 9.58 W 
2022-10-31 20:11:40.621 [INFO ] [nhab.core.model.script.Waschmaschine] - Rule triggert ! Wert : 0.35 W 
2022-10-31 20:12:20.110 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:20.798 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:20.805 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:12:25.115 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:26.936 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:26.945 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:12:30.112 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:33.149 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:33.157 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:12:35.114 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:36.307 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:36.313 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:12:40.107 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:42.438 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:42.446 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:12:50.109 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:51.593 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:51.600 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:12:55.114 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
2022-10-31 20:12:57.737 [INFO ] [ab.core.model.script.SaunaTemperatur] - Vorgängerwert ungültig. Setze Wert unter Grenzwert!
2022-10-31 20:12:57.743 [INFO ] [ab.core.model.script.SaunaTemperatur] - Die Sauna Temperatur ist ueber 85 Grad
2022-10-31 20:13:05.115 [WARN ] [ab.core.model.script.SaunaTemperatur] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!
Ich habe heute gesehen das immer wenn sich der Temperatur Wert verändert kurz auf UNDEF steht und dadurch die Rule wahrscheinlich immer wieder ausgelöst wird. Als z.B 86.5 Grad ->UNDEF-> 86.6 Grad. Das passiert aber nur wenn die Temperatur über 85 Grad ist

Re: Saunatemperatur

Verfasst: 1. Nov 2022 02:33
von udo1toni
Und im Log sehen wir schon das Problem... Dein Temperaturfühler meldet zwischendurch (und mutmaßlich vor allem bei höheren Temperaturen) ein UNDEV, welches keine gültige Zahl darstellt. Es läuft also so:

Wert steigt über Grenzwert -> Nachricht wird versandt.
Wert kippt auf UNDEV -> Rule wird mit Fehlermeldung abgebrochen
Wert ist wieder gültig und über Grenzwert -> Vorheriger Wert ist aber ungüültig, da UNDEV -> Rule nimmt für alten Wert den Wert unter Grenzwert an -> Meldung wird erzeugt.

Da der Sensor mehrfach hin- und her wechelt, bekommst Du auch jedes zweite Mal eine Meldung.

Dieses Problem kannst Du dämpfen, indem Du dafür sorgst, dass sich die gesendeten Meldungen unterscheiden müssen (Trigger der Melde-Rule auf changed ändern). Weiterhin kannst Du beim Melden einen Merker setzen, den Du mit einem Timer wieder löschst, so dass z.B. maximal alle 15 Minuten eine Meldung eingeht. Du kannst diesen Timer auch so gestalten, dass er retriggert werden kann, wenn also mehrere Meldungen eingehen, startet der Timer bei jeder Meldung erneut, unabhängig davon, ob die Meldung tatsächlich versandt wird. Kommen die Meldungen also z.B. alle 14 Minuten rein, aber der Timeout ist auf 15 Minuten eingestellt, so erfolgt nur ein Alarm zu Beginn, danach nicht mehr.

Die bessere Lösung des Problem besteht aber darin, den Sensor gegen ein Modell zu tauschen, welches nicht ständig Fehler produziert.

PS: Es kann natürlich auch sein, dass Du hier z.B. ein Tasmota Modul verwendest und nicht berücksichtigt hast, dass nicht ausschließlich dieser eine Sensor seinen Werte sendet, dann müsste man halt eine Anpassung am Channel vornehmen, um zu verhindern, dass der Channel zwischendurch auf UNDEV wechselt.

Re: Saunatemperatur

Verfasst: 1. Nov 2022 10:39
von Snatsch
Guten Morgen udo1toni :)
Der Sensor hängt an einem Shelly 1 und ich habe mehrere davon im Haus verbaut.(unter anderen auch am Pufferspeicher) Du denkst also das der Sensor defekt ist ? Das komische ist wenn ich den Sensor in meiner Shelly App beobachte zeigt er die Werte immer an ohne ständig zu wechseln :(

Re: Saunatemperatur

Verfasst: 1. Nov 2022 12:54
von udo1toni
Na, da steht eindeutig UNDEF, toggelt immer schön hin und her.
Ob das nun an einem defekten Sensor liegt, oder andere Ursachen hat, wäre noch zu klären.
Ich weiß nicht, was die Shelly App an dieser Stelle macht (also ob sie vielleicht z.B. beim Ausbleiben eines einzelnen Messwerts einfach den letzten bekannten Wert nimmt).