A Home Assistant add-on that automatically manages your boiler based on heating demand from your TRV (Thermostatic Radiator Valve) entities.
What is it?
The Active Heating Manager monitors your TRVs and controls your boiler to match the actual heating demand in your home. When TRVs are calling for heat, it runs the boiler. When no heating is needed, it turns off or reduces the boiler.
Designed for multi-zone heating systems where each room has its own TRV managing its own schedule.
Key Features
Automatic Demand Detection - Monitors TRV hvac_action states on a polling interval
Dual Control Modes - Works with boiler thermostats or simple on/off switches
Dynamic Temperature Control - Adjusts boiler temperature based on valve position demand
Valve State Checking - Ignores TRVs with closed valves (prevents false demand)
Home Assistant Integration - Publishes sensor entities for monitoring and automation
Energy Efficient - Proportional heating prevents overshooting
Fully Configurable - Set your own temperatures and polling intervals
How It Works
The add-on continuously monitors your TRV entities and:
- Detects Heating Demand: Checks which TRVs have
hvac_action: heating - Validates Demand: Optionally checks valve positions to filter closed valves
- Calculates Target: Uses average valve position to determine boiler temperature (dynamic mode)
- Controls Boiler:
- Thermostat Mode: Sets manual temperature on boiler thermostat
- Toggle Mode: Turns boiler switch on/off
- Publishes Sensors: Updates Home Assistant entities for monitoring
Sensor Entities
The add-on creates these sensor entities for monitoring and automation:
sensor.active_heating_manager_status- Overall status (heating/idle)sensor.active_heating_manager_trvs_heating- Count of TRVs currently heatingsensor.active_heating_manager_avg_valve_position- Average valve position percentagesensor.active_heating_manager_target_temp- Current boiler target temperature
Use these in your dashboards, automations, or to monitor heating efficiency!
Dynamic Temperature Control
One of the standout features is proportional heating based on valve demand:
- 0% valve position → Off temperature (e.g., 14°C)
- 25% valve position → Current temp + 0.5°C (gentle heating)
- 25-100% position → Scales linearly to max temperature (e.g., 21°C)
This prevents the boiler from overshooting and wasting energy when demand is low.
Installation
Via Add-on Store
Or manually:
- Go to Settings → Add-ons → Add-on Store (⋮ menu) → Repositories
- Add:
https://github.com/BenWolstencroft/home-assistant-addons - Find “Active Heating Manager” in the add-on store
- Click Install
Configuration Examples
Example 1: Thermostat Mode (Recommended)
Control a boiler thermostat with dynamic temperature adjustment:
debug_logging: false
trv_entities:
- climate.living_room_trv
- climate.bedroom_trv
- climate.kitchen_trv
- climate.bathroom_trv
boiler_entity: climate.boiler_thermostat
boiler_mode: thermostat
manual_on_temperature: 21
manual_off_temperature: 14
check_valve_state: true
use_dynamic_temperature: true
polling_interval: 300
Example 2: Toggle Mode
Control a simple boiler switch:
debug_logging: false
trv_entities:
- climate.living_room_trv
- climate.bedroom_trv
boiler_entity: switch.boiler_relay
boiler_mode: toggle
check_valve_state: true
polling_interval: 300
Configuration Options
| Option | Type | Default | Description |
| `debug_logging` | boolean | `false` | Enable verbose logging for troubleshooting |
| `trv_entities` | list | `[]` | **Required** - List of TRV climate entities to monitor |
| `boiler_entity` | string | `""` | **Required** - Boiler thermostat or switch entity |
| `boiler_mode` | `thermostat`/`toggle` | `thermostat` | Control method for boiler |
| `manual_on_temperature` | integer (15-35) | `21` | Temperature when heating (thermostat mode) |
| `manual_off_temperature` | integer (5-20) | `14` | Temperature when not heating (thermostat mode) |
| `check_valve_state` | boolean | `true` | Filter TRVs with closed valves |
| `use_dynamic_temperature` | boolean | `true` | Adjust temp based on valve position |
| `polling_interval` | integer | `300` | Seconds between checks (300 = 5 minutes) |
Use Cases
Perfect for:
- Multi-zone heating systems with individual TRV schedules per room
- Combi boilers with thermostat or relay control
- System boilers with zone valves
- Energy saving through demand-based heating
Works great with:
-
My MOES TRV Schedule Card for schedule management
-
Any Zigbee/Z-Wave/Tuya TRV that reports
hvac_actionand valve position -
Standard Home Assistant climate entities
Important Notes
Design Philosophy: This add-on is designed for systems where TRVs control their own schedules. The add-on monitors heating demand and manages the boiler - it doesn’t control TRV temperatures or schedules.
Requirements:
- TRVs must report
hvac_actionstate (heating/idle) - For dynamic temperature control, TRVs should report valve position sensors
- Boiler entity must be controllable via Home Assistant
Performance:
- Lightweight Python script running in add-on container
- Configurable polling interval (default 5 minutes)
- Minimal CPU/memory usage
- All state checking via Home Assistant API
Compatibility
- Home Assistant OS (Add-on)
- Home Assistant Supervised (Add-on)
- Home Assistant Container (Can run as standalone script)
- Home Assistant Core (Can run as standalone script)
Tested with MOES Zigbee TRVs via Zigbee2MQTT and Hive boiler thermostat integrations.
Links
Documentation: Full docs with configuration examples
Issues: Report bugs or request features on GitHub
Support
Have questions? Need help? Found a bug?
-
Open an issue on GitHub: GitHub · Where software is built
-
Check the documentation
-
Enable
debug_logging: truefor troubleshooting
Questions or feedback welcome.