Strange rule behavior - temperature alert

Dear all,

I’m encountering some random executions of the following rules.

The purpose is to send an alert if the measured temperature goes over a certain level. And send an alert again after 15/20 minutes if the temperature is still too high.

It’s not clear to me why the 2nd rule triggers at 16:30 (and some more during today).
The first rule seem to work well.

2019-03-10 16:29:41.304 [vent.ItemStateChangedEvent] - eg_ku_s_XiaomiTemperatursensorB_Temperature changed from 6.77 °C to 6.95 °C
2019-03-10 16:30:13.629 [INFO ] [.eclipse.smarthome.model.script.RULE] - --> Temperaturalarm: Kühlschrank >= 8.5°C / B_Temperature
// Variables for Timer
var Timer   tTTemp = null       // Freezer
var Timer   tKTemp = null       // Fridge


rule "Temperature Freezer"
when
    Item eg_ku_s_XiaomiTemperatursensorA_Temperature changed
then
    if(eg_ku_s_XiaomiTemperatursensorA_Temperature.state instanceof Number) {
        if((eg_ku_s_XiaomiTemperatursensorA_Temperature.state as Number) >= -17) {
            if(tTTemp === null)
                tTTemp = createTimer (now, [|
                    logInfo("RULE", "--> Temperaturalarm: Tiefkühler >= -17°C / A_Temperature")
                    // sendPushoverMessage(pushoverBuilder("Temperaturalarm: Tiefkühler >= -17°C").withPriority(1).withSound("spacealarm"))
                    tTTemp.reschedule(now.plusMinutes(15))
               ])
        } else if((eg_ku_s_XiaomiTemperatursensorA_Temperature.state as Number) < -17.2) {
            tTTemp.cancel()      
            tTTemp = null
        }
    }
end


rule "Temperatur Fridge"
when
    Item eg_ku_s_XiaomiTemperatursensorB_Temperature changed
then
    if(eg_ku_s_XiaomiTemperatursensorB_Temperature.state instanceof Number) {
        if((eg_ku_s_XiaomiTemperatursensorB_Temperature.state as Number) >= 8.5) {
            if(tKTemp === null)
                tKTemp = createTimer (now, [|
                    logInfo("RULE", "--> Temperaturalarm: Kühlschrank >= 8.5°C / B_Temperature")
                    // sendPushoverMessage(pushoverBuilder("Temperaturalarm: Kühlschrank >= 8.5°C").withPriority(1).withSound("spacealarm"))
                    tKTemp.reschedule(now.plusMinutes(20))
               ])
        } else if((eg_ku_s_XiaomiTemperatursensorB_Temperature.state as Number) < 8.2) {
            tKTemp.cancel()     
            tKTemp = null
        }
    }
end

Your comaparisons won’t work properly because your Number Item has a UoM

Try

if((eg_ku_s_XiaomiTemperatursensorB_Temperature.state as Number) >= 8.5 | "°C") {
2 Likes

Many thanks for the hint!
I’ll try this :slight_smile: