Welcome 👋
Here you'll find a collection of automations that'll allow you to precisely control the heating within your home on a room-by-room basis, using Zigbee based TRVs and temperature sensors.
Fine-tunable, fully automated, and remote-controlled heating.
This is a cost efficient system which converts traditional hot water radiator heating systems into a zone-controlled heating system; each room with an installation has the capability to self-regulate its own temperature.
This project's goal is to be as comprehensive as possible, providing a local-controlled alternative to closed source automated heating systems like that offered by Tado, Drayton's Wiser, and Resieo's Evohome.
A TRV (Thermostatic Radiator Valve) is a device which is connected to hot water radiator heating systems, at each radiator. These allow you to set a rough temperature per room by adjusting the water in-flow into each radiator. These offer better temperature regulation than conventional flow based radiator valves, but still require the the main heating system to be pumping in order to heat the room or area.
Heating is controlled through a feedback system, which is managed by Home Assistant.
Home Assistant monitors the current temperature of a given climate (room) and adjusts the TRV's state (open/closed), and the central thermostat setpoint when heating is required or no longer required.
The feedback loop looks like this:
flowchart TD
Z((Home Assistant))
W[/Mobile Device/]
A((Manipulate Central Thermostat))
B(Google Cloud Service Pub/Sub)
Z --> | 1 - Publish setpoint change | B
Z .-> | 2 - Retry on failure x3 | B
B --> A
Z .-> | 3 - Notify after 3 failures to retry | W
Z --> C(Room 1);
Z --> D(Room 2);
Z --> E(Room 3);
F{Is room temperature above setpoint?};
G([Continue monitoring temperature]);
H[YES];
I[NO];
J([Open room's TRV]);
K[/Request setpoint change/];
L{Are We Heating?};
%% Room 1 is at temperature
C --> F;
%% Room 2 is at temperature
D --> F;
%% Room 3 asks for heat
E --> F;
%% Do Nothing
F --> H;
H --> L;
L --> M[YES] --> N([Close room's TRV]) .-> K;
L --> O[NO] --> G;
%% Call for heat
F --> I;
I .-> J;
J .-> K;
K .-> Z;
Warning
It's very important that every aspect of this system can be manually controlled, both digitally and physically!
You must consider fall-back options, should your Home Assistant installation or internet connectivity fail. Provided you followed the steps outlined here, your system should be failsafe.
A personal anecdote. I've used this setup for over a year and experienced both a power failure, and my Home Assistant system failing to boot. Neither events affected our heating, as each radiator is locally controlled, and our thermostat (Google Learning Thermostat) is still capable of local independent control our boiler. We still had heating when we needed it, even when the automation failed.
Important
You must have a decent level of familiarity with Home Assistant; the open source home automation platform.
- A central, hot water based, heating system that uses radiators and a "CV boiler"
- For best results, your CV needs to be OpenTherm compatible. This standard is nearly 30 years old, so it's likely yours is, but there are some caveats:
- Some Nefit / Bosch units may require an additional addon to convert their CVs from Bosch's proprietary communication standard. The (Nefit) Bosh part number is
7746901847
. - You can reference known OpenTherm compatible systems here
- Some Nefit / Bosch units may require an additional addon to convert their CVs from Bosch's proprietary communication standard. The (Nefit) Bosh part number is
- For best results, your CV needs to be OpenTherm compatible. This standard is nearly 30 years old, so it's likely yours is, but there are some caveats:
- An established and functional Home Assistant installation
- A Home Assistant installation with HACS; we'll need a few integrations which fall outside the realm of "official integrations."
- A Zigbee coordinator
- An established and configured Zigbee2MQTT installation within Home Assistant
Let's assume we're installing this system in a fictional house:
This house has:
- 3 levels
- 1 CV boiler
- 8 radiators
- 1 central thermostat
- 2 heating loops
We need to decide which radiators will be equipped with TRVs and which radiators will remain as "dumb radiators." We must have at least one "dumb radiator" per heating loop to prevent damage to your CV.
Important
It is critical to have a few "dumb radiators" throughout your house, with them set to be marginally open. This is generally called "Frost Protection" on consumer systems. Failure to have a couple non-automated radiators on your system could create a water hammer-like effect within your heating loops, which could cause damage to your CV.
For example, a potential runaway scenario would be when all TRVs are closed on your system (the rooms are at the desired temperature), while the Central Thermostat is still calling for heat. Since you've got a few "dumb radiators" on each heating loop, that means that those radiators are still open on the system, reducing the total system pressure, and mitigating any over-pressure events.
Once you've decided on which rooms will have TRVs, you then need to assess whether or not that room has one or more-than-one radiator. If it has one radiator, then install a TRV. If it has more-than-one radiator, you must install a TRV on only one of the radiators - the others must remain dumb. This is because each room will be classified as a "climate."
Now that you've planned out which rooms and which radiators will have TRVs, you can go ahead and install all TRVs and temperature sensors.
Our house with TRVs and temperature sensors
Device Image | Device Name |
---|---|
|
Central Thermostat |
|
TRV |
|
Temperature Sensor |
Add all devices to Home Assistant via Zigbee2MQTT. Make sure you use a consistent and clear naming scheme. I use the following:
[ Climate Area ] - [ Sensor / Device Type ] - [ Numerical Room Identifier{.}Numerical Device Identifier ] - [ Unique Identifier ]
- Climate area
- the room that the device is installed in
- Sensor / Device Type
- the type of sensor. TRV, temperature sensor, presence sensor, etc
- Numerical Room Identifier
- Each room should be numbered, so all devices within that room can be indexed. For example:
- Kitchen = 1
- Living Room = 2
- Main Bedroom = 3
- Guest Bedroom = 4
- Etc
- Each room should be numbered, so all devices within that room can be indexed. For example:
- Unique Identifier
💡 Pro-tip - physically label each device with its unique identifier!
- Each sensor should have a unique identifier. My rule of thumb is to prefix all devices of a type with a common letter, followed by a number. That way you can move sensors around the house and rename them easily. For example:
- All TRVs are labeled as
TRVX
whereX
is a numberTRV1
is in the BathroomTRV2
is in the Kitchen
- All temperature sensors are prefixed with the letter
K
K1
is in the Main BedroomK2
is in the BathroomK3
is in the Kitchen
- All TRVs are labeled as
- Each sensor should have a unique identifier. My rule of thumb is to prefix all devices of a type with a common letter, followed by a number. That way you can move sensors around the house and rename them easily. For example:
- Climate area
This translates to:
Kitchen - TRV - 2.1 - TRV3
Kitchen - Temperature - 2.2 - K3
Bathroom - TRV - 4.1 - TRV2
Bathroom - Temperature - 4.2 - K2
Using a predictable naming scheme will allow you to filter or search for devices by type, location, or unique identifier.
The hard work is done and now it's time to start creating climates in Home Assistant! Make a beverage of your choice and sit yourself down in-front of your computer.
- Make sure the Weather integration is configured in your Home Assistant installation
- Install "Better Thermostat" via HACS; trust me, you'll want this.
Once you've installed and configured both "Better Thermostat" and "Weather," it's now time to setup each climate. I won't dive into how to setup each climate, as that's documented quite extensively on Better Thermostat's website, here. However once you've completed that, you should now have a handful of rooms, or areas, which are designated as climates.
You can now implement any of the automations I've created in this repository, but at a minimum you'll need these 4 automations:
- Input Boolean - Turn off all heating automation
- Input Boolean - Turn on all heating automation
- Master Switch - turn off all heating automation
- Master Switch - turn on all heating automation
Congrats, you've now got a fully zone-controlled TRV heating system. Wicked, right?
You've now got a fully zone-controlled system, but now let's go for the wow-factor. Here's a collection of automations which take the entire system up a notch:
- Round climates with tolerance check
- Preheat certain climates early in the morning (getting out of a warm bed into a cold room will never be a problem again!)
- Lower house termperature overnight - save some $$$
- Heat a specific climate at a specific time
- Enable heating automation if temperature is forecast bellow a certain temperature
- Dsiable heating automation if termpature is forecast above a certain temperature
- For the Data Scientists - Log daily usage data and state changes
Here are some nice push-notification automations: