A custom integration for Home Assistant that provides multi-zone heating management with centralized boiler control. No YAML scripting or manual automations required — everything is configured through the HA UI.
- 🖥️ 100% UI Config Flow — Setup wizard: select your boiler relay and add zones directly from the HA interface
- 🔘 Master Switch — One switch to enable/disable the entire heating system
- 🏠 Per-Zone Switches — Individual switches for each room/zone, persistent across restarts
- 🔥 Automatic Boiler Control — Boiler turns ON when any zone is heating, OFF when all zones are idle
- 🛡️ Boiler Protection — Native
numberentities for anti-short-cycle (min cycle on/off) and valve opening delay - 🪟 Window Sensor Detection — Automatically bypass zones when a window is opened, and restore them when closed
- 🌡️ Virtual Thermostats — Create virtual thermostat entities directly from the UI by combining a temperature sensor and a heater switch — no YAML needed
- 🔄 TRV Preset Sync — Optional per-zone preset synchronization for physical TRV valves
- ⚙️ Options Flow — Add/remove zones and virtual thermostats, change window sensors and settings after installation
- 🎨 3 Custom Lovelace Cards — Master status card, circular dial card, and compact button card — all auto-registered
- Open HACS from the sidebar
- Go to Integrations, click the 3-dot menu (top right) → Custom repositories
- Add
https://github.com/alex-military/multizone-thermostatwith category Integration - Search for "Multizone Thermostat" in HACS and click Download
- Restart Home Assistant
- Copy the
custom_components/multizone_thermostatfolder to your HAcustom_componentsdirectory - Restart Home Assistant
- Go to Settings → Devices & Services → Add Integration
- Search for "Multizone Thermostat"
- Follow the setup wizard:
- Step 1: Select your boiler switch/relay entity
- Step 2: Choose zone type — existing thermostat or create a virtual thermostat
- Step 3: Configure the zone (name, optional window sensor, optional TRV sync)
- Step 4: Add more zones or confirm and finish
If you don't have a pre-existing climate entity (e.g., you have a standalone temperature sensor and a relay/switch controlling a fancoil, radiator valve, or underfloor heating), you can create a Virtual Thermostat directly from the wizard:
- In the "Choose zone type" step, select "Create virtual thermostat"
- Fill in:
- Zone Name: A friendly name for the zone (e.g., "Camera", "Studio")
- Temperature Sensor: The
sensorentity that reads the room temperature (must havedevice_class: temperature) - Heater Switch: The
switchentity that controls the heater/relay in that zone - Target Temperature: Initial target temperature (default: 20°C)
- Tolerance: Hysteresis in °C (default: 0.5°C) — the heater turns ON when temperature drops below
target - tolerance, and turns OFF when it rises abovetarget + tolerance - Window Sensor (optional): A
binary_sensorto auto-bypass the zone when a window is open
- The integration will automatically create a
climateentity and register it as a zone
Virtual thermostats can also be created after installation from the Options menu.
Note: Entity IDs are assigned by Home Assistant based on the entity's unique ID and device name. The actual IDs may differ slightly from the examples below. Always copy the exact entity ID from Settings → Devices & Services → Multizone Thermostat or from the entity's settings page.
| Entity (example ID) | Description |
|---|---|
switch.multizone_thermostat_heating_master |
Master on/off for the entire heating system |
switch.multizone_thermostat_[zone_name] |
Per-zone on/off switch (one per configured zone) |
climate.multizone_thermostat_vt_[name] |
Virtual thermostat entity (only if created via the UI) |
number.multizone_thermostat_min_cycle_on |
Minimum boiler ON time (minutes, default: 5) |
number.multizone_thermostat_min_cycle_off |
Minimum boiler OFF time (minutes, default: 5) |
number.multizone_thermostat_valve_delay |
Valve opening delay before boiler starts (seconds, default: 0) |
Master Switch ON
└── Zone Switch ON → climate.set_hvac_mode(heat)
└── Zone Switch OFF → climate.set_hvac_mode(off)
Master Switch OFF
└── ALL zones → climate.set_hvac_mode(off)
└── Boiler → switch.turn_off() (ignores min_cycle_on for safety)
Any zone hvac_action = heating
└── If valve_delay > 0, wait for delay
└── If boiler was recently off, wait for min_cycle_off
└── Boiler ON
All zones hvac_action = idle/off
└── If boiler was recently on, wait for min_cycle_on
└── Boiler OFF
Window Opened
└── Zone Switch turns OFF automatically (bypassed) and saves state
Window Closed
└── Zone Switch restores previous state
Virtual Thermostat Logic (ON/OFF with hysteresis)
└── current_temp < target - tolerance → heater switch ON
└── current_temp > target + tolerance → heater switch OFF
└── Reports hvac_action = heating/idle to the coordinator
Go to Settings → Devices & Services → Multizone Thermostat → Configure to:
- Change the boiler switch
- Add a new zone (existing thermostat)
- Create a new virtual thermostat (sensor + switch → climate entity)
- Remove a zone
- Remove a virtual thermostat (removes both the climate entity and the associated zone)
- Edit a zone (TRV preset sync, Window Sensor)
When enabled for a zone, the integration automatically syncs the TRV preset mode:
- HVAC mode
heat→ presetmanual - HVAC mode
off→ presetoff
Only enable this for zones with physical TRV valves that support preset modes.
This integration includes three custom Lovelace cards to control your heating zones and view the central heating status directly in your Home Assistant dashboards. The cards are auto-registered — no manual resource configuration needed.
A zero-configuration, button-style card that displays the status of the central heating master switch. It changes color and icon dynamically depending on the state of the Master Switch and the Boiler/Circulator:
- Grey (Off): The master heating system is disabled.
- Yellow (Standby): The master heating system is enabled, but no zone is currently calling for heat (boiler is idle).
- Orange (Heating): The master heating system is enabled, and at least one zone is calling for heat (boiler is active).
| Off | Standby (Idle) | Active Heating |
|---|---|---|
![]() |
![]() |
![]() |
Wraps the native Home Assistant circular thermostat card and adds a built-in toggle switch to easily enable or exclude (bypass) the zone.
- Enabled: Displays the interactive dial to adjust temperature.
- Disabled: Dims the dial and overlays a clean "Zone Excluded / Bypassed" message.
| Enabled | Excluded (Bypassed) |
|---|---|
![]() |
![]() |
A compact button-based thermostat card designed for spaces where a circular dial is too large. It includes temperature controls (+ / -), current and target temperature displays, HVAC mode selectors, and the zone enable/exclude switch.
- Enabled: Fully interactive controls.
- Disabled: Dims the controls and displays a "Zone Excluded / Bypassed" overlay.
| Enabled | Excluded (Bypassed) |
|---|---|
![]() |
![]() |
The status card requires zero configuration because it automatically detects your Master Switch:
type: custom:multizone-thermostat-status-cardtype: custom:multizone-thermostat-dial-card
entity: climate.your_climate_entity # Your climate entity (copy ID from HA UI)
switch: switch.multizone_thermostat_zone_name # (Optional) The bypass switch (copy ID from HA UI)
title: Living Room # (Optional) Custom titletype: custom:multizone-thermostat-button-card
entity: climate.your_climate_entity # Your climate entity (copy ID from HA UI)
switch: switch.multizone_thermostat_zone_name # (Optional) The bypass switch (copy ID from HA UI)
title: Living Room # (Optional) Custom titleTip: To find your exact entity IDs, go to Settings → Devices & Services → Multizone Thermostat and click on any entity. The entity ID is shown at the bottom of the entity page.
Note: If you installed via HACS, the Lovelace card resource is registered automatically. If cards don't appear, add the resource manually: Go to Settings → Dashboards → Resources → Add
/multizone_thermostat_card/multizone-thermostat-card.jsas JavaScript Module.
- Home Assistant 2024.x or newer
- At least one
switchentity (boiler relay/circulator) - At least one
climateentity (thermostat/TRV) OR a temperature sensor + heater switch (to create a Virtual Thermostat) - Note: Currently supports only ON/OFF systems with a relay or actuator. Proportional modulation (PWM/PID) or OpenTherm will be added in future phases.
The project is structured in phases to evolve from a simple aggregator to a full-fledged smart climate manager.
- Antipendolamento (
min_cycle_duration): Previene oscillazioni rapide della caldaia con tempi minimi di ON/OFF (implementato via entitànumber). - Ritardo Accensione Caldaia (
valve_opening_delay): Ritardo in secondi per permettere l'apertura delle valvole termoelettriche (implementato via entitànumber). - Rilevamento Finestra Aperta (
window_sensor): Bypass automatico zona su apertura finestra, con ripristino stato precedente e persistenza su riavvio.
- Termostati Virtuali via UI: Creazione automatica di entità
climateda un sensore di temperatura e uno switch (es. fancoil/relè sfusi) senza YAML. - Preset Globali (Memoria Temperature e Bypass): I preset (Eco / Comfort / Sleep / Away) fungono da "scenari globali" con memoria dinamica per singola zona.
- Selezionando un preset, il sistema applicherà le impostazioni salvate per ogni zona.
- Se modifichi la temperatura o attivi/disattivi il bypass di una zona mentre è attivo un preset, il sistema ricorda quella modifica e la salverà permanentemente per quel preset.
- Al successivo utilizzo dello stesso preset, la zona tornerà esattamente allo stato (temperatura target e stato bypass) configurato l'ultima volta.
- Card Preset Rapida: Una custom card Lovelace dedicata alla selezione rapida e centralizzata dei preset globali.
- Geofencing Zero-Code: Cambio preset automatico in base alla presenza (Away/Comfort).
- Algoritmo PWM/PID Selezionabile: Modulazione del tempo di accensione per impianti modulanti.
- Carico Richiesto Globale (%): Sensore percentuale del fabbisogno termico per pompe di calore.
- Curva Climatica Integrata: Ottimizzazione temperatura di mandata basata sul meteo esterno.
- Antigrippaggio Estivo: Attivazione periodica delle valvole in estate per prevenire blocchi.
This project is licensed under the MIT License.






