Einfacher geht es gar nicht mehr...
Dein Block oben:
Code: Alles auswählen
if(Thermostat_Bad_EG_Actual_Temperature.state >= Save_Temp_Fenster_auf_Bad_EG.state + 2)
Neue_Textnachricht.sendCommand("Temperatur im Bad unten um 2 Grad gefallen, bitt...")
else if(Save_Temp_Fenster_auf_Bad_EG.state <= Thermostat_Bad_EG_Actual_Temperature.state - 2)
Neue_Textnachricht.sendCommand("Temperatur im Bad unten um 2 Grad gestiegen, bitt...")
Wobei ich fürchte, dass der Code nicht stimmt.
Besser: (und das gilt ohne Einschränkung auch für die Umsetzung in Blockly):
Code: Alles auswählen
if(!(Thermostat_Bad_EG_Actual_Temperature.state instanceof Number)) { // falls kein gültiger Wert vorliegt
logWarn("fenster","Thermofühler liefert keinen gültigen Wert! Rule abgebrochen.") // Warnmeldung ausgeben
return; // und Ausführung beenden
}
val Number nIst = (Thermostat_Bad_EG_Actual_Temperature.state as Number).floatValue // Wert als Float in lokale Konstante übernehmen
if(!(Save_Temp_Fenster_auf_Bad_EG.state instanceof Number)) { // falls kein gültiger Wert vorliegt
logWarn("fenster","Grenzwertitem liefert keinen gültigen Wert! Rule abgebrochen.") // Warnmeldung ausgeben
return; // und Ausführung beenden
}
val Number nGrenze = (Save_Temp_Fenster_auf_Bad_EG.state as Number).floatValue // Wert als Float in lokale Konstante übernehmen
if(nIst < nGrenze - 2) // Falls Messwert kleiner als gesicherter Wert - 2
Neue_Textnachricht.sendCommand("Temperatur im Bad unten um 2 Grad gesunken, bitt...") // Meldung: Temperatur gefallen
else if(nIst > nGrenze + 2) // Falls Messwert größer als gesicherter Wert + 2
Neue_Textnachricht.sendCommand("Temperatur im Bad unten um 2 Grad gestiegen, bitt...") // Meldung: Temperatur gestiegen
Natürlich kannst Du die Prüfung auf instanceof weg lassen. Aber beschwere Dich nicht, wenn Du Fehlermeldungen erhältst, wenn das Item keine gültige Zahl enthält.
Die Gültigkeitsprüfung ist einfach guter Stil und sollte immer genutzt werden, wenn nicht zu 100 % auszuschließen ist, dass da unter Umständen eben keine Zahl kommt, sondern vielleicht NULL oder UNDEF (beides gültige Zustände für ein Number Item).
Die Umrechnung nach Float erzwingt einen Zahlenwert ohne Einheiten, ein Thermostat könnte leicht 22°C melden, das kann man nicht mit 20 vergleichen (also ohne Einheit).
Weil es zwei Vergleiche sind, lohnt auch der Einsatz der lokalen Konstanten.
Übrigens sollte man sich gut überlegen, ob man Itemnamen einfach so übernimmt, wie sie von openHAB angeboten werden EG_Bad_Temperatur_Ist wäre beispielsweise eine ganze Ecke Kürzer, ohne dabei wesentliche Informationen einzubüßen. Man könnte gar statt Temperatur einfach Temp schreiben, also EG_Bad_Temp_Ist und EG_Bad_Temp_FAuf.