Currently trying to set up a rule to turn on and off a radiator valve in my childrens bedroom depending on the room temperature, setpoint of the room and wether the boiler is running or not. saying there is issues on my log. could anybody shed some light?
rule “Kids Bedroom heating”
when
Item Boiler_Status changed to ON then
Item Kids_Bedroom_Temp_Setpoint changed or
Item Bed_Temperature changed
then
var Number cur_temp = Bed_Temperature.state as Number
var Number setpoint = Kids_Bedroom_Temp_Setpoint.state as Number
val Number hysteresis = 0.5
if (cur_temp < (setpoint - hysteresis)) {
if (Bed_Heater.state != ON) {Bed_Heater.sendCommand(ON)}
}
else if(cur_temp > setpoint + hysteresis) {
if (Bed_Heater.state != OFF) {Bed_Heater.sendCommand(OFF)}
}
rule "Elutoa temperatuur"
when
Item ElutoaSetpoint changed or
Item ElutoaTemp changed
then
var Number cur_temp = ElutoaTemp.state as Number
var Number setpoint = ElutoaSetpoint.state as Number
val Number hysteresis = 0.5
if (cur_temp < (setpoint - hysteresis) && Boiler_Status.state == ON) {
if (ElutoaRadikas.state != ON) {ElutoaRadikas.sendCommand(ON)}
}
else if(cur_temp > setpoint + hysteresis) {
if (ElutoaRadikas.state != OFF) {ElutoaRadikas.sendCommand(OFF)}
}
end
Or just check if the switch is off and do nothing with:
if (Boiler_Status.state == OFF) return;
Put this at the first part of the then part of rule. If the switch is off the rule will do nothing.
rule "Kids Bedroom heating"
when
Item Kids_Bedroom_Temp_Setpoint changed or
Item Bed_Temperature changed
then
var Number cur_temp = Bed_Temperature.state as Number
var Number setpoint = Kids_Bedroom_Temp_Setpoint.state as Number
val Number hysteresis = 0.5
if (cur_temp < (setpoint - hysteresis) && Boiler_Status.state == ON) {
if (Bed_Heater.state != ON) {Bed_Heater.sendCommand(ON)}
}
else if(cur_temp > setpoint + hysteresis) {
if (Bed_Heater.state != OFF) {Bed_Heater.sendCommand(OFF)}
}
end
just looking for a solution to turn the Bed_Heater OFF once the Boiler_State changes to OFF even if the setpoint has not been reached
Just remove the else if part and see what happens.
rule "Kids Bedroom heating"
when
Item Kids_Bedroom_Temp_Setpoint changed or
Item Bed_Temperature changed
then
var Number cur_temp = Bed_Temperature.state as Number
var Number setpoint = Kids_Bedroom_Temp_Setpoint.state as Number
val Number hysteresis = 0.5
if (cur_temp < (setpoint - hysteresis) && Boiler_Status.state == ON) {
if (Bed_Heater.state != ON) {Bed_Heater.sendCommand(ON)}
}
end
@Taffy, even better add another rule for the bed so you can maintain the temp if boiler is on.
rule "Kids Bedroom heating"
when
Item Kids_Bedroom_Temp_Setpoint changed or
Item Bed_Temperature changed
then
var Number cur_temp = Bed_Temperature.state as Number
var Number setpoint = Kids_Bedroom_Temp_Setpoint.state as Number
val Number hysteresis = 0.5
if (cur_temp < (setpoint - hysteresis) && Boiler_Status.state == ON) {
if (Bed_Heater.state != ON) {Bed_Heater.sendCommand(ON)}
}
else if(cur_temp > setpoint + hysteresis) {
if (Bed_Heater.state != OFF) {Bed_Heater.sendCommand(OFF)}
}
end
rule "Bed Off"
when
Item Boiler_Status changed to OFF
then
Bed_Heater.sendCommand(OFF)
end