Use cases for heating automation

Winter is coming (at least for people living in the northern hemisphere) and therefore I wanted to start a topic to collect all different kind of use cases around the topic of heating.

Even some use cases are obvious, they are maybe not obvious for everyone, therefore please feel free to add anything you have in mind.

Window open/closed automation
If a window is opened, the radiator will turned off.
If the window is closed again, the radiator will be turned on again and the setpoint is set according to the schedule (see below).

For doors (e.g. balcony, terrace) I have added a delay / timer that the radiator will only turn off if the door is open for e.g. more than 30 seconds, to avoid rapid changes (maybe saves some battery of the thermostat😉) if you only open/close the door shortly.

At the bathroom, when the window is closed, I set the setpoint to a low temperature and not according to the schedule (I only open the window after I’m done with the shower, therefore after closing the window no heating is required anymore).

Time based automation / scheduling
Using the iCalendar binding to schedule the setpoint by time.

Alternatively you can e.g. use the timeline picker solution

I’m not using scheduled rules, as then anyone in my household would need to have access to the OH admin view and could change all things, items, pages, rules etc

Presence based automation
There are many ways to detect presence, I’m using the TR-064 binding in combination with AVM FritzBox, but there is also the Network binding as a generic fallback solution.

If someone is at home, than the heating is set as per the schedule (see above), if we are leaving home, the schedule is ignored & heating setpoint will be reduced (with a timer/delay of 30 min eg if you just leave for 5 minutes and visit your neighbors or similar)

If we are returning back to home, then the setpoints are recovered and set according the current schedule again.

Work from home switch
If you work from home on fixed days, you can use scheduling to heat your home office accordingly.
If you work from home irregular or always changing days, the dowelling is maybe helpful:

I am using a switch that I can turn on, if I’m working from home the next day.

Every morning, if the WFH - switch is ON, I will heat my office room and automatically turn off the switch again. By this I can flexible decide if the office room should be heated at the next morning or not.
In addition I have a daily schedule that will turn off heating /reduce setpoint every day in the afternoon after work, so that I don’t need to manually turn off the heating again.

Please feel free to add anything else, maybe we get a collection of great ideas


I’ve a somewhat unique use case which is concerned with cooling more than heating.

First a little background. In my part of the U.S., the most common type of heating and AC is central air. That means there is one heater, one AC, one thermostat, and a big fan that distributes the heated/cooled air throughout the house. In my particular case, I’m in a three level house (two stories with a finished basement.

When we moved into the house, there was no AC, just the heater.

The unique use case takes advantage of the fact that the basement is usually at least 10 °F cooler than the main floor which in turn is at least 5° F cooler than the top floor. So I set up some rules that monitor the temps on all three floors. If the outside temp is greater than a setpoint, the main floor or top floor is above another setpoint, and the basement or main floor is at least 5 °F cooler than the main floor and top floors turn on the HVAC fan.

That brings that cool air from the basement up to the upper floors and cools those floors down significantly.

However, I no longer do this because we had an AC installed and when they installed it they took my HestiaPi thermostat :sob: (I wasn’t there and my wife didn’t know I wanted to keep it) and replaced it with a Honeywell something or other for which there isn’t a binding in OH to support.

But I’d like to resurrect this capability because even with the AC, those temperature differentials remain. It’s just now instead the top floor is reasonably comfortable and the basement is down right cold. I think it would save a lot of energy if I could only turn on the AC when just running the fan is not working.

Of course, we can get a whole house fan that pulls the air from the basement through the house and solve the problem the same way, which is probably what I’ll end up doing given time constraints.

1 Like


This is a good level of restraint, in my opinion. A lot of people try to account for a wide variety of scenarios, but humans are extremely unpredictable. It’s better to allow for that flexibility and automate only the behaviours that are highly reliable.

I am not reliable enough for presence detection, so I instead use Google Assistant voice commands. While this may seem less automated, I prefer to see it as me being part of the automation (with 100% accuracy). I also like that I get an immediate confirmation that openHAB has turned everything off, rather than wondering if it worked properly after I’ve left.

I need to get window/door sensors, but I’ve been waiting on Matter to launch. I don’t want to get into Zigbee at this point, and Z-Wave sensors are too expensive.

For anyone debating the benefit of window/door sensors, there’s huge value to being able to quickly confirm that your windows/doors are all fully closed, so that you’re not wasting energy trying to heat/cool the entire world. It’s like trying to fill a water bucket that leaks through the bottom.

Once I can get some inexpensive Matter sensors, I’ll put them on every window/door I have.

I have intrusion alarm system with sensors on all doors and windows and several air-conditioners integrated in OpenHAB and I have some similar logic when door/window is opened.
Additionally, I change the setpoints based on the alarm arm status.
When we go to sleep the alarm is stay armed and we arm the alarm away when we are out of home. If the alarm is disarmed, then someone is at home, so that cancels the need for some kind of network based presence detection (although I use presence detection for some other stuff). Each alarm state triggers different “Home mode” and adjusts the setpoints accordingly. I have also Holiday mode that can be activated via UI with its own setpoints.
I am very satisfied with the results.

1 Like

I have zoned my heating into 3 areas, 2 of which are ground floor then 1st floor.
Additionally in the converted loft velux window opens based on temp up there.
Zone activated by BT presence or manually
Temp setpoint adjusted according to presence with heating activation dependent on lowest temp of active zones.
Use radiator valves to control temp in zones.

In addition to some of the mentioned rules I implemented some other rules that would need to undergo some testing since they didn’t really came into play yet:

Don’t heat when the outside temperature is above the setpoint
Don’t heat when the outside temperature is at least two degrees above room temperature (even when this is below the setpoint)
Don’t heat when the 3 hour forecast predicts a higher outside temperature than the setpoint.

To be honest I am somewhat sceptical if there are really a lot of occasions when one of these rules will take effect. I will see soon as it is now getting colder.

I also thought about a rule to stop heating when the sun is shining into the room. I have built myself a sun sensor to detect sunshine based on temperature difference that I only use to automatically close blinds. However this could also be used for this use case but would require to take sun azimuth and elevation into account as well. I didn’t have the motivation yet to figure out whether this would work.

1 Like

I’ve implemented basically everything you described. With these additions:

  1. I can switch between automatic mode when all the rules apply and a “manual” mode where all the automatics are switched off.
  2. One exception is the bathroom: Even in “manual” mode there is a rule in place that checks the room temperature in the morning against a threshold and enables heating for a certain time if necessary. This exception allows for a sooner switch to manual mode in spring and later switch to automatic mode in autumn.

I have a floor heating which needs quite some reaction time. Since the house is very well insulated I usually do not need “spontaneous” changes of the temperature. The automation below is thus created 25% because of usefullness and 75% because of my own pleasure. :smiley:

In cojunction with window sensors I do the following to avoid that the heating turns on while letting fresh air into the house:

  • Window gets opened
    ** Heating was on? Heating stays on. No need to switch it off because in autumn/winter the windows should not be longer opened than 5-10 minutes and the floor heating does not react that fast.
    ** Heating is off? The setpoint temperature is set to 16 °C to avoid the thermostate to switch on the heating while the windows are opened
    *** The windows gets closed: A 15 minute timer is now started. Once the timer is over, the set point temperature is set to the original user defined value.
    ** If at the evening the blinds of the window to be opened are closed, they get opened to let more fresh air circulate and get the humidity out. Once the window is closed the blinds go to the former position again. → This one has a very high WAF. :smiley:

Other use cases:

  • At night or when nobody is in the house for more than a day (this is a switch I click manually when I leave the house) I set all room temperatures to 18 °C
  • In case gas prices are not high :wink: Every morning/evening I set the room temperature of all bath rooms and the dining room to 24 °C to enjoy a warm floor when walking bare foot. Pure luxury, nothing I want to waste my money on currently, so this is switched off. → Although it has the highest WAF.

I have rules like this, but a little simpler. They worked fine in the winter, because the conditions are fairly predictable (meaning it’s almost always colder outside than inside). However, the spring/summer didn’t work as well, because of the wider temperature range.

An automation that I have setup that I don’t see mentioned yet is variable start heating: based on the temperature within the house (and some other factors such as presence), start heating earlier in the morning so that by the time you get out of bed the house is warm enough.

This is based on simple temp vs time data to work out rough degree/minute increase in temp when the heating is on. With this figure, openHAB checks every minute or so in the early morning, and if the amount of time between now and the wake up time is less than the amount of time it would take to heat the house up to temperature, then turn on the heating.

This works fine if the house is being lived in, and the temperature variations aren’t huge.

1 Like

Where I live there’s not much need for heating, but I do have reverse-cycle heat pump split systems in most rooms and a big solar PV array on the roof, and if I have spare PV generation (after Hot Water Tank and House Battery recharge) I turn some of the splits on for some free heating or cooling depending on the season (provided the doors and windows are closed).

The best thermal comfort automation is probably the cellular blinds opening or closing to absorb or reject solar heat.

The second best is probably the push notifications to prompt anyone who is home to open or close the doors/windows at appropriate times based on internal/external temperatures and time of day.

I have illumination sensors outside and can detect direct sunlight pretty good. In combination with azimut and elevation, I open the blinds and let the sun help to heat the room. If the temperature passes 2 degree above nominal temperature, I close the blinds again. Of course, this is only for the colder season :wink:

I live in a block of 4 houses and have achieved the lowest amount of gas used. I started with complex algos, including parameters as sun direction, light intensitivy, temperatur, time. We have floor-heating-system.

The best case was, to heat the UG, EG, OG for 1 hour between 6am and 7am and to heat EG,OG for another hour at 12pm.

Not only was this very transparent and cheap, I love the simplicity here as well :smiley:

Thanks for the post and some really good idea already:
@DrRSatzteil: I like your rules of inner/outer temp dependencies a lot

I personally have one more rule - since I live in Germany and have kids in school.

I import from into my setup and change the mode of the kids and living room thermostats normal/holiday based on this.

Additionally I have a rule for presense simulation that set all thermostats to a lower temperature.

I’ll try to summarize a slightly more complex case:

I live in central Europe, in a 10 year old family house,

  1. I use a gas instantaneous heater (max 24kW) for hot water and radiator heating (Viessmann from 2006),
  2. I use solar vacuum tubes approx 20pcs (for hot water heating), Resol (Deltasol bs 2009, VBus), 200 litre storage tank, connected in front of the water supply to the gas boiler,
  3. I check the opening status of windows/doors, measure gas and energy consumption, measure the temperature in different parts of the house/outside and for the storage tank/gas heater, control the boiler to heat the hot water boiler/storage tank and drain the water from the 200 litre storage tank when it overheats…

For some time each system lived “its own life”, later I tried different controller strategies for solar tubes but mainly for heating…
Chronologically - for two years the house was without insulation and solar tubes, then the gas consumption was reduced by about 35%, I don’t know if it was more because of insulation or hot water heating, for heating I used a simple space thermostat (ON/OFF) and Deltasol bs 2009 for water heating. Now I don’t use the gas boiler for hot water from April to October, in the summer months I need to drain the hot water from the tank as it reaches 70 degrees centigrade at the top of the tank if I leave the house for two days.
I gradually moved all automation to OH (2,3), using GPIO for relays, window sensors and DS18b20 thermometers (9), before the arrival of OH4 I moved much of the automation to the ESP32 chip, Tasmota.

Strategies for a family house with central heating radiator valve with manual control):
Turn off the house heating if:
a) the out temperature rises to 3.5 °C below the heating start temperature, via the Tasmota Rule
b) if more than 2 windows/doors are opened the heating is blocked for 30 minutes (minimum 15) from the time the second to last window is closed (one window can remain open for ventilation - bathroom…), if the heating is running there is no point in stopping it during heating,
c) heating will be locked for 30 minutes after the heating is finished, after 30 minutes it will be activated again (for the thermal inertia of the heating system), locking via Tasmota Rules - unlocking via OH Rules,
d) manual blocking of heating - for example service… , via OH Rules
e) if someone is using WiFi/Zigbee radiator valve, it is enough to block the valve if the window is open for more than 6 minutes,
f) I can set 4 kinds of temperature, Day (22), Night(21,8), Eco(21), Away(18) - realistically I only use Day/Night, via OH Rules
g) schedulling Day/Night via OH Rules (Time cron “0 0 23 1/1 * ? /*”,Time cron “0 15 6 1/1 * ? * *” ), ECO if I leave for 1 more than 1 day, AWAY more than a week,

The heating method for the family house from the central heating radiator valve with manual regulation):
0) heating is OFF, via both OH Rules and Tasmota Rule

  1. PI (Proportional-Integral) control e.g. Thermostat (Thermostat - Tasmota) or PID (PID Controller Automation - Automation | openHAB), I have tried both models, now I use Thermostat via Tasmota,
  2. PI Thermostat, with adjusted time readout to 1 second accuracy according to Duty Cycle, via Tasmota Rule
  3. Fixed heating time, ON is treshold temperature, OFF is adjustable heating time value, via Tasmota Rule
  4. Efficient mode, ON is treshold temperature, OFF is max temperature from hot water heating, via Tasmota Rule,
  5. ON is treshold temperature - hysteres, OFF is treshold temperature + hysteres,

I have the hysteresis set to 0.1 °C for modes 1 and 2, 5.
For modes 3 and 4 the hysteresis is meaningless.
The Treshold thermometer is placed 10 cm from the ceiling, away from heat sources like radiator, TV, Fridge…, about 3 meters from the door in the middle part of the house - the hallway. The location of the thermometer affects all parameters, it is important for the overall result of gas consumption (about 10%), because a gas boiler consumes 54 litres of gas in 1 minute of burning (that is why Mode 2 was created).

The efficient mode (4) probably deserves more space for explanation:

  • the manufacturer quotes an efficiency of gas to heat conversion in the range of 80-110% for different types of gas boilers (90% in my case). Unfortunately, the maximum value can only be reached at full boiler output, i.e. until the boiler starts to “modulate” output (then the efficiency drops to 70% or less). Efficient mode therefore means that the boiler switches on at treshold temperature (temperature sensor in the room) and switches off as soon as the temperature (temperature sensor on the exchanger in the gas boiler) in the boiler heat exchanger starts to drop (the boiler starts to reduce output because it has reached the internal temperature set on the panel for heating the radiators). This mode can save about 10-15% of gas.

The second in order of economy is Mode 2 (5-10% gas saving), the disadvantage is more frequent switching on and off of the boiler because the Thermostat does not have an automatic Duty Cycle change. This Mod is basically an extension of Mod 1 which copies the ON/OFF state of the Thermostat output Relay (Mod 1 speeds up the DutyCycle time to whole minutes). Essentially, the boiler will consume extra gas by rounding the DutyCycle time to whole minutes and at an average consumption of 50 litres per minute and about 15 ON states per day and 5 months of heating.

Mode 3 was created as part of the code for OH PID (PID Controller Automation - Automation | openHAB) and can be used, but you have to set the derivative part of the PID correctly so that the PID can calculate meaningful numbers, basically you can use this Mode for any PI heat controller.

Mode 5 is a replacement for a regular room ON/OFF thermostat.

One more fact worth mentioning, try measuring the temperature “up” in the hottest place and the temperature “down” in the coldest place in the house, apartment. If the temperature difference is more than 3.5 °C the “sensible” temperature decreases significantly. Modes 1,2 and in fact 3 were the worst in terms of feeling, the temperature difference was up to 4,5 °C. Conversely, Modes 4-5 were the best feeling, with a temperature difference of less than 3 °C. This is due to the fact that the PID/PI i.e. PWM control really “machine” calculates the heating time and keeps the hysteresis to a minimum, Modes 4 and 5 basically have no hysteresis. In Mode 4 the temperature overshoot was about 0.5 °C, in Mode 5 up to 1 °C behind the set temperature (22 °C).

Other components:
In addition to heating, I have also optimised the hot water heating. In the 200 liter tank I have 2 thermometers, one at the top of the tank which I use to control the hot water heating by the gas boiler. If the water in the tank is above the treshold value of the sensor (40°C) the gas boiler does not heat the water for showering or washing dishes, and if it is below this value the gas boiler heats the water coming from the tank to the set temperature.
It is worth mentioning that solar vacuum tubes can produce water at 30 degrees even in winter (when the sun is shining), so the gas boiler only heats the water at 30°C to the desired temperature (max 50°C).

1 Like

Do you mean that the max temperature for your domestic hot water is only 50 C? In Finland there is a law that the temperature must be at least 55 and the reason for this is to be sure that the legionella bacteria is killed. It reproduces in temperatures between 20-45 so the safety threshold on Finland is 55.


The Legionella bacteria is apparently dangerous only in Finland.

I honestly don’t know what the exact value of domestic hot water is because when it is heated it passes through the hot water exchanger in the gas boiler, which has its own logic for heating water (probably 60°C or more).
For a better explanation:

  1. the cold water from the public tap is 15 - 20 °C and is fed into a 200 litre storage tank.
  2. in the storage tank it is heated to a higher temperature (65 °C in summer, more than 30 °C in winter - depending on the weather) I measure the temperature in the middle part of the tank and also in the upper part (the temperature difference is between 5 and 15 °C).
  3. this preheated water goes to the gas boiler where it is heated in the exchanger to the temperature set by the boiler’s internal logic
  4. the difference in gas consumption of the gas boiler is therefore proportional to the difference in temperature of the water which comes not from the public water supply but from the 200 litre storage tank
  5. one relay controls the switching on of the gas boiler for domestic water heating (I made a small modification on the boiler board), the domestic hot water heating is conditioned by the setting of the value in the Tasmota Rule and can be changed (in my case the boiler switches on at the temperature of the water in the upper part of the tank if the temperature is below 43 °C). This modification was not necessary because you can also switch off the hot water heating in the settings of the gas boiler.

In 10 years I have not had a problem with legionella bacteria. The cold water from the public water supply is chemically treated, the temperature in the 200 litre tank is above 45 °C (often up to 65 °C) all summer long, in winter the hot water is heated in the exchanger in the gas boiler (60 to 80 °C - thermal disinfection - legionella dies immediately), so I assume that the gas boiler heats the water to a temperature higher than 60 °C.

st 15. 11. 2023 o 7:23 Markus Sipilä via openHAB Community <> napísal(a):