July 24, 2021

Контроллер системы отопления для умного дома | ESPHome, Home Assistant

Одной из самых сложных для меня тем, которая вызывала много вопросов по реализации, была – регулировка температуры радиаторов отопления.

Лет 7 назад я установил на один из радиаторов термоголовку Danfoss с Z-Wave. И за пару месяцев использования, мне так и не удалось совладать с ней. Основными факторами, сыгравшими против, было то, что температура замерялась непосредственно возле радиатора и сильно отличалась от всего помещения. А также скорость реакции термоголовки на изменение уставки со стороны контроллера была неприемлемо низкой.

Чуть позже я опробовал еще одно подобное устройство от Stella Z, но проблема с замером температуры непосредственно возле отопительного прибора никуда не делась.

Да, существуют термоголовки от того же Danfoss с выносным термодатчиком,
но выглядит это довольно ужасно. К тому же оставался вопрос, как подружить такое устройство с умным домом.

Спустя какое-то время Fibaro представили свою термоголовку с отдельным беспроводным датчиком температуры. И это уже выглядело интереснее предыдущих вариантов.

К сожалению, это устройство обошло меня стороной.

Вновь к этой теме я вернулся, когда ручная регулировка температуры в доме стала доставлять массу неудобств, потому что приходилось крутить неудобные вентили на клапанах радиаторов.

Сначала я, конечно, вспомнил про Fibaro, но было неясно, как его нормально здесь использовать. При всём при этом стоимость всего мероприятия выходила бы совсем уж неприятной.

В поисках решения, которое можно было бы приладить к моим радиаторам, я наткнулся на термоприводы для коллекторов отопления. И тут меня осенило. Зачем пытаться что-то регулировать в конечных точках, когда это можно сделать централизованно на коллекторе.

Конкретно такие приводы имеют только два положения: открыто или закрыто.

Кстати, при желании, их всё же можно использовать на радиаторах, если на них
установлен термостатический клапан с резьбой M30x1.5.

Схема подключения

Все термоприводы — нормально-закрытые. Когда модуль ESP подаёт сигнал
на твердотельное реле, термопривод открывается. Занимает это несколько минут.

В собранном виде контроллер вместе с реле и блоком питания помещается в какую-то стандартную распаячную коробку.

Я решил не заморачиваться с установкой настенных термостатов, потому что
всё ручное управление осуществляется с телефона или компьютера.

В каждом помещении, где есть радиатор, я установил температурный датчик от Aqara, расположив их в местах, где предполагается самое частое присутствие людей.

Прошивка

Код для модуля ESP с прошивкой ESPHome также предельно простой.

esphome:
  name: esp16-heating-control-unit-1
  platform: ESP8266
  board: d1_mini

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  domain: !secret wifi_domain
  manual_ip:
    static_ip: 172.16.1.116
    subnet: 255.255.255.0
    gateway: 172.16.1.1
    dns1: 172.16.1.1

logger:
api:
ota:

dallas:
  - pin: 2

sensor:
  - platform: dallas
    address: 0xB1031635D6C6FF29
    name: "1 Heating Flow Temperature"

switch:
  - platform: gpio
    name: "Office Heater"
    icon: "mdi:radiator"
    pin: 16
    inverted: no
  - platform: gpio
    name: "Pantry Heater"
    icon: "mdi:radiator"
    pin: 14
    inverted: no
  - platform: gpio
    name: "Livingroom Heater"
    icon: "mdi:radiator"
    pin: 13
    inverted: no
  - platform: gpio
    name: "Kitchen Heater"
    icon: "mdi:radiator"
    pin: 12
    inverted: no
  • Описывается каждый вывод, который подключен к реле (pin).
  • Если бы термопривод был нормально-открытый, то у параметра inverted было бы значение yes.
  • Опционально к коллектору прицеплен датчик температуры DS18B20.

После подключения модуля ESP к Home Assistant, в интерфейсе появляются выключатели, управляющие термоприводами. Но сами по себе они не имеют особой пользы.

На удивление, термостат, реализованный средствами базовой интеграции Home Assistant, обладает всем необходимым функционалом. А то я сначала собирался самостоятельно строить логику управления в Node-RED. Тут тоже всё просто:

- platform: generic_thermostat
  name: Livingroom Thermostat
  heater: switch.livingroom_heater
  target_sensor: sensor.livingroom_temperature
  min_temp: 23
  max_temp: 27
  ac_mode: false
  cold_tolerance: 0.3
  hot_tolerance: 0.1
  min_cycle_duration:
    minutes: 5
  initial_hvac_mode: "off"
  precision: 0.1
  • указывается переключатель, управляющий термоприводом (heater)
  • датчик температуры, по которому термостат будет ориентироваться (target_sensor)
  • диапазон регулировки термостата (min_temp, max_temp)
  • гистерезис (cold_tolerance, hot_tolerance)
  • начальное состояние (initial_hvac_mode)
  • точность управления уставкой (precision)

По поводу начального состояния. После перезагрузки, все термостаты по умолчанию выключены. Есть отдельная автоматизация, которая при запуске Home Assistant проверяет, отопительный ли сейчас сезон, чтобы включить все термостаты:

- id: '1604184082358'
  alias: Термостаты в отопительный сезон
  description: ''
  trigger:
  - platform: homeassistant
    event: start
  condition:
  - condition: state
    entity_id: input_boolean.heating_season
    state: 'on'
  action:
  - service: homeassistant.turn_on
    data: {}
    entity_id: group.all_thermostats
  mode: single

Проверка основывается на состоянии виртуального переключателя (input_boolean), которое зависит от среднесуточной температуры, собираемой с помощью встроенного модуля статистики:

heating_season:
  name: Heating season
  icon: mdi:snowflake-melt

Показания температуры воздуха собираются с периодичностью 5 раз в час и хранятся 15 суток:

В Node-RED для этого есть небольшой сценарий:

Что касается точности работы контроллера, то на примере графика за сутки видно, как при ночной уставке в 25.5 градусов, температура в кабинете колебалась в пределах двух десятых от нее:

Дневная температура 26 градусов также стабильно поддерживалась, за исключением моментов с попаданием в комнату прямых солнечных лучей.

Выше — оранжевый график показывает, когда был открыт термопривод. И видно, как это совпадает с колебанием температуры в помещении.

Решение прекрасно пережило текущую зиму, и я остался доволен работой. Дополнительно написал пару сценариев для Node-RED, срабатывающих по времени суток или по присутствию.

Со стороны котла я решил не делать никаких подключений, так как максимум, на что он способен — включаться по внешнему сигналу, и это пока оказалось ненужным.

Предвидя вопрос, «А что, если отключат свет?». Будет всё равно, потому что
котёл тоже выключится. А, в случае, выхода из строя контроллера или термопривода, последний в одно движение снимается с коллектора.


Все конфигурации, описанные в статье, доступны на GitHub.