/better_thermostat

This custom component for Home Assistant will add crucial features to your climate-controlling TRV (Thermostatic Radiator Valves) to save you the work of creating automations to make it smart. It combines a room-temperature sensor, window/door sensors, weather forecasts, or an ambient temperature probe to decide when it should call for heat and automatically calibrate your TRVs to fix the imprecise measurements taken in the radiator's vicinity.

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

Active installations GitHub issues Version - 1.0.0 Discord

Better Thermostat

Important Notice: Consider this software as unfinished as it has not reached version 1.0.

Requirements

  • Minimum required Home Assistant version: 2021.12 (Latest tested version: 2022.2.9)
  • Zigbee2MQTT in case you use Zigbee Thermostats (Latest tested version: 1.22.1-1)

Companion UI

We've created a companion UI element which can display more information that the default thermostat element in Home Assistant. Check it out via HACS: better-thermostat-ui-card

  • If you have a question or need help please create a new discussion or check if your question is already answered.
  • If you have a suggestion, found a bug, or want to add a new device or function create a new issue
  • If you want to contribute to this project create a new pull request

Featureset

This integration brings some smartness to your connected radiator thermostats setup:

  • Uses a temperature sensor far away from the radiators to measure the real room temperature
  • Makes your TRVs fully compatible with Google Home
  • Let your windows disable your heating (avoids programing this via automations)
  • Your weather forcast provider will turn your heat on/off
  • Or an outside air temperature sensor can do this as well
  • Does some valve-maintenance automatically, to avoid that they will get stuck closed over summer

Which hardware do we support?

At this time following models are tested and reported to work:

Vendor Product Name Product Number HA Manufacturer HA Model Whitelabel
Eurotronic Spirit Zigbee SPZB0001 Eurotronic Spirit Zigbee wireless heater thermostat (SPZB0001)
Moes ZigBee3.0 Thermostat SEA801‑Zigbee Saswell Thermostatic radiator valve (SEA801-Zigbee/SEA802-Zigbee) - HiHome WZB‑TRVL
- Hama 00176592
- RTX ZB‑RT1
Moes ZigBee3.0 Thermostat SEA802‑Zigbee Saswell Thermostatic radiator valve (SEA801-Zigbee/SEA802-Zigbee) - HiHome WZB‑TRVL
- Hama 00176592
- RTX ZB‑RT1
TuYa TS0601 TS0601_thermostat TuYa Radiator valve with thermostat (TS0601_thermostat) - Moes HY368
- Moes HY369RT
- SHOJZJ 378RT
- Silvercrest TVR01
TuYa TV02-Zigbee TV02-Zigbee TuYa Thermostat radiator valve (TV02-Zigbee) - Moes TV01-ZB
- Tesla Smart TSL-TRV-TV01ZG
- Unknown/id3.pl GTZ08
Siterwell Radiator Thermostat GS361A‑H04
BECA BRT-100 ZB BRT‑100‑TRV

Is your hardware not listed? Shoot us a ticket!

Howto Setup

This custom component requires a manual edit of the configuration.yaml of Home Assistant.

After you opened the configuration file, you'll create one virtual Better Thermostat entity for each room you like us to control. This will create a secondary climate entity which controls the original climate entity of your thermostat.

Here is a minimal configuration example

climate:
  - platform: better_thermostat
    name: room
    thermostat: climate.trv
    temperature_sensor: sensor.temperature
    window_sensors: group.office_windows

Here is a full configuration example

climate:
  - platform: better_thermostat
    name: room
    thermostat: climate.trv
    temperature_sensor: sensor.temperature
    window_sensors: group.office_windows # if this is not set, the window open detection is off
    weather: weather.home # if this is set, the outdoor_sensor is ignored, remove the outdoor_sensor config!
    outdoor_sensor: sensor.outdoor_temperature # if you want to use it, remove the weather entity from the config!
    off_temperature: 17.5
    window_off_delay: 15 # in seconds
    valve_maintenance: false
    night_temp: 18.5
    night_start: '22:00'
    night_end: '06:00'

IMPORTANT: the weather and outdoor_sensor are not required, but you need one of them if you want to use this function, if not remove them

Key Example Value Required? Description
platform better_thermostat yes
name Thermostat - Livingroom no Used to name the virtual thermostat
thermostat climate.trv yes a climate entity.
unique_id 392049 no A unique_id (e.g. UNIX timestamp) mostly needed when using google home.
temperature_sensor sensor.temperature yes a sensor entity that is used for the actual temperature input of the thermostat.
window_sensors group.livingroom_windows no a group of window/door - sensors (see below) that are used for the open window detection of the thermostat (the thermostat doesn't need to support an open window detection for that feature). If you have only one window, you can pass the entity without the group.
window_off_delay 15 no Only set the thermostat to an OFF state if the window/door - sensors are open for X seconds. Default is 0 for an instant turnoff.
weather weather.home no a weather entity (e.g. by the Meteorologisk Institutt - Metno integration) within Home Assistant to check the forecast to detect if heating is needed. The threshold is set by the off_temperature. This setting overwrites the outdoor_sensor.
outdoor_sensor sensor.outdoor_temperature no A temperature sensor entity within Home Assistant that is used to determine if the heating should be switched off. The threshold is set by the off_temperature. If a weather entity is configured this setting is ignored.
off_temperature 17.5 no An integer as a temperature cutoff in case the weather is warm. This setting requires either a weather or an outdoor_sensor setting to work.
valve_maintenance false no This is a maintenance function that will prevent the valve to get stuck or make annoying sounds, the default is false. If set to true it will perform a valve open-close-procedure every five days
night_temp 18.5 no if this value is set, the night temperature reduction is active and set it to the temperature at night (to disable it, remove this setting or set it to -1) see also night_start and night_end
night_start 23:00 no define the start time of the night for the night reduction (night_temp must be set) the TRV will be set to the night temp
night_end 07:00 no define the end time of the night for the night reduction (night_temp must be set) the TRV will be set back to the last active temp

Example Window/Door - Sensor config

livingroom_windows:
  name: Livingroom Windows
  icon: mdi:window-open-variant
  all: false
  entities:
    - binary_sensor.openclose_1
    - binary_sensor.openclose_2
    - binary_sensor.openclose_3

Combine multiple TRV to one

Install the HACS climate_group from @daenny

As each TRV has an individual local_temperature and must be individually calibrated, you need to create a better_thermostat entity for each TRV and then group them:

Example:

climate:
  - platform: better_thermostat
    name: Ai - TRV - Office - 1
    thermostat: climate.real_trv_office_1
    temperature_sensor: sensor.temperatur_office_temperature
    window_sensors: group.office_windows
    weather: weather.home
    off_temperature: 19.5
    unique_id: 1
  - platform: better_thermostat
    name: Ai - TRV - Office - 2
    thermostat: climate.real_trv_office_2
    temperature_sensor: sensor.temperatur_office_temperature
    window_sensors: group.office_windows
    weather: weather.home
    off_temperature: 19.5
    unique_id: 2
  - platform: climate_group
    name: "TRV - Office"
    temperature_unit: C
    entities:
      - climate.ai_trv_office_1
      - climate.ai_trv_office_2

☕ Supporters

If you want to support this project, you can ☕ buy a coffee here.

User Donation
Someone ☕ x 3
Someone ☕ x 3
Someone ☕ x 1

Maintainers

‎‍💻 Code Contributors

User
@RubenKelevra
@bruvv
@Cycor

Buy Me A Coffee