Virtual thermostat

Thanks for sharing, the only problem I can see is that if you manually turn off your heater (Sw_Heater_Towels) and the temp sensor is below your threshold, it will just turn back on again, in the second half of your rule.

Here is a very similar rule I use;

rule "Nursery heating"
when
    Item VT_Heating_Mode_Nursery changed or
    Item VT_Heating_Setpoint_Nursery changed or
    Item FF_Nursery_Temp changed or 
    Item FF_Nursery_Window changed
then
    // 0="Off", 1="On", 2="Auto"
    if (VT_Heating_Mode_Nursery.state == 0) {
        // heater off
        FF_Nursery_Heater.sendCommand(OFF)
    } else if (VT_Heating_Mode_Nursery.state == 1) {
        // heater on
        FF_Nursery_Heater.sendCommand(ON)
    } else if (VT_Heating_Mode_Nursery.state == 2) {
        // only fire up the heater if the nursery window is closed
        if (FF_Nursery_Window.state == CLOSED) {
            // get the current setpoint for the nursery
            var Number setpoint = VT_Heating_Setpoint_Nursery.state as DecimalType

            // calculate the turn on/off temperatures
            var Number turnOnTemp = setpoint - 0.5
            var Number turnOffTemp = setpoint + 0.5

            // get the current temperature in the nursery
            var Number temp = FF_Nursery_Temp.state as DecimalType
            
            // determine whether we need to turn on/off the heater
            if (temp <= turnOnTemp) {
                // turn on temp has been reached so switch on the heater
                FF_Nursery_Heater.sendCommand(ON)
            } else if (temp >= turnOffTemp) {
                // turn off temp has been reached so switch off the heater
                FF_Nursery_Heater.sendCommand(OFF)
            }
        } else {
            // heater off
            FF_Nursery_Heater.sendCommand(OFF)
        }
    }
end

Using the following items;

// heating setpoints
Number      VT_Heating_Setpoint_Nursery "Nursery Setpoint [%.1f °C]"    <degreesc>

// heating modes: 0 - Off, 1 - On, 2 - Auto
Number      VT_Heating_Mode_Nursery     "Nursery Heating Mode"          <heating>

Switch      FF_Nursery_Heater           "Nursery Heater"         <fire>          { zwave="32:command=SWITCH_BINARY" }
Number      FF_Nursery_Temp             "Nursery [%.1f °C]"      <temperature>   { rfxcom="<14082:Temperature" }

Then finally in my sitemap;

                Switch item=VT_Heating_Mode_Nursery label="Heating Mode" mappings=[0="Off", 1="On", 2="Auto"]
                Setpoint item=VT_Heating_Setpoint_Nursery label="Target Temperature [%.1f °C]" minValue=16 maxValue=24 step=0.5 visibility=[VT_Heating_Mode_Nursery==2]
                Text item=FF_Nursery_Heater

So I can either manually override and set the heater on/off, or set it to auto and adjust the setpoint to control the temp. The Text item=FF_Nursery_Heater just shows the state of the heater, i.e. whether it is on or off.

4 Likes