В стандартном понимании включенное отопление это когда подается питание, иначе как бы например электрическое отопление работало без питания, однако есть разные системы и одна из систем основана на перекрывании теплоносителя клапаном, но есть нормально закрытый клапан, это когда нет питания — нет отопления, клапан теплоноситель перекрывает и нормально открытый клапан, это когда нет питания и отопление есть поскольку клапан не перекрывает подачу теплоносителя.
в Home Assistant для термостата есть специальный компонент Generic Thermostat который позволяет реализовать управление клапаном основываясь на показаниях температурного датчика.
У меня имеется нормально открытый термической сервопривод. Он имеет следующие характеристики:
— скорость открытия/закрытия: 3 минуты
— напряжение питания: 220 В
— потребляемая мощность: 2 Вт
Привод подключен к умной розетке Tuya, в прочем от Tuya там осталось только название и модуль на микросхеме BK7231 который перепрошит альтернативной прошивкой ESPHome, в HomeAssistant канал реле этой розетки в объектах (Настройки — Устройства и службы — Объекты) называется switch.prise02_relay
Так же есть zigbee датчик температуры Xiaomi WSDCGQ11LM, температура в Home Assistant с которого в объектах называется sensor.sensor01_temperaturee
для работы термостата в Home Assistant в файле configuration.yaml нам надо написать следующий код:
climate: - platform: generic_thermostat unique_id: termostat01 name: Salon heater: switch.prise02_relay target_sensor: sensor.sensor01_temperaturee
Где switch.prise02_relay и sensor.sensor01_temperaturee соответствующие объекты.
Но такой код подходит только для случая если нет питания — нет отопления, есть питание — есть отопление, у нас клапан нормально открытый и логика работы обратная: есть питание — нет отопления, нет питания — нагрев, по этому нам надо изменить логику. Есть 2 способа в моем случае, это изменить логику работы реле в прошивке ESPHome добавив инвертирование, либо создать в HomeAssistant Template Switch
switch: - platform: template switches: switch_reversed01: value_template: "{{ is_state('switch.prise02_relay', 'off') }}" turn_on: service: switch.turn_off data: entity_id: switch.prise02_relay turn_off: service: switch.turn_on data: entity_id: switch.prise02_relay
где:
switch.prise02_relay — наше реле к которому подключен нормально открытый клапан
switch_reversed01 — наше реверсивное реле, если у него состояние включается, то switch.prise02_relay — выключается, если состояние выключается то switch.prise02_relay — включается. И в интеграции generic_thermostat нам надо заменить наше реле switch.prise02_relay на созданную интеграцию switch_reversed01. Необходимо учесть, что switch_reversed01 это всего лишь шаблон, чтобы он стал переключателем надо в начало добавить switch. и получится switch.switch_reversed01
Код нашего термостата будет выглядеть так:
climate: - platform: generic_thermostat unique_id: termostat01 name: Salon heater: switch.switch_reversed01 target_sensor: sensor.sensor01_temperaturee
где мы заменили наше физическое реле switch.prise02_relay на наше реверсивное виртуальное реле switch.switch_reversed01
Сохраняем файл configuration.yaml и перезагружаем Home Assistant и добавляем наш термостат в Lovelace интерфейс. Вот наш термостат:
Сейчас термостат в режиме Обогрев, посмотрим статус нашего реле
Как видно оно выключено, то есть питание на нормально открытый клапан не подается и клапан открыт и батарея нагревается. Таким образом я заменил термоголовку на батарейках которую постоянно закрывали одеждой в результате чего была не правильная температура.