После состоявшегося знакомства с HA и беглого изучения его возможностей, у меня возникло серьезное желание перенести управление кондиционерами в эту систему. А обострилось это желание после того, как я уехал со всей семьей в отпуск, забыв выключить кондиционер в одной из комнат…
В наличии у меня имелось 3 кондиционера Daikin бюджетной серии FTXB-C. Никаких «умных» функций в них не предусмотрено, а поиск возможных хаков или модификаций на тот момент успеха не принес.
Штатно эти кондиционеры комплектуются вот таким пультом дистанционного управления:

Контроль работы
После случая с оставленным на 2 недели работающим кондиционером мне, прежде всего, захотелось иметь возможность определить — работает кондиционер или нет.
Решить эту проблему без серьезных денежных затрат получилось приклеив на шторки кондиционеров по самому обычному датчику-геркону Xiaomi (Door & Window Sensor, MCCGQ01LM). В выключенном состоянии кондиционер закрывает направляющую поток воздуха шторку, что в свою очередь приводит к срабатыванию датчика.
В живую это выглядит так:
Кому-то внешний вид может не понравится, но все остальные рассмотренные мной способы были либо сильно дороже, либо требовали гораздо более серьезных вмешательств в кондиционеры.
В итоге, между несколько сомнительным внешним видом и возможностью контроля я выбрал контроль.
! При размещении датчика, нужно подобрать такое положение, при котором он не будет срабатывать во время работы режима качания шторки.
После размещения датчиков можно уже настроить необходимые сенсоры и автоматизации в HA.
Например, создав отдельные бинарные сенсоры под кондиционеры с device_class: power для удобного отображения в интерфейсе в будущем:
- platform: template
sensors:
ac_nursery_status:
device_class: power
value_template: "{{ is_state('binary_sensor.0x158d00039cf974_contact', 'on') }}"
ac_living_room_status:
device_class: power
value_template: "{{ is_state('binary_sensor.0x158d0003d54725_contact', 'on') }}"
ac_bedroom_status:
device_class: power
value_template: "{{ is_state('binary_sensor.0x158d0004073b67_contact', 'on') }}"
И автоматизации. Например, с оповещением о слишком долгой работе:
- alias: AC - long running [24h]
initial_state: true
trigger:
platform: state
entity_id:
- binary_sensor.0x158d00039cf974_contact
- binary_sensor.0x158d0003d54725_contact
- binary_sensor.0x158d0004073b67_contact
from: 'off'
to: 'on'
for:
hours: 24
action:
service: notify.telegram
data_template:
message: >
Внимание, *{{ trigger.to_state.attributes.friendly_name }}* работает больше *24* часов.
— ~ —
Tuya Smart Home
Следующим шагом стала реализация более-менее полноценного управление кондиционером из HA. В отсутствии вариантов управления напрямую, я решил попытать счастья с IR хабами, позволяющими эмулировать практически любой пульт ДУ.
Поиск на Алиэкспрессе выдал огромное разнообразие подобных устройств, из которых я наугад выбрал один из самых дешевых. Из коробки он работает на платформе Tuya и является братом-близнецом Умного Пульта от Яндекса.
При одинаковой начинке, устройства попадаются в разных корпусах. В моем случае это вариации на тему летающих тарелок:


Первое (и довольно продолжительное) время для управления этими устройствами я использовал родное приложение Tuya (Smart Life), в целом оно работало, но с оговоркой на пару неприятных проблем.
Первое и основное — зависимость от интернета и китайских облаков. И с этим ничего не сделать.
Вторая проблема заключалась в том, что стандартная интеграция Tuya не умеет пробрасывать в HA ни сами эти устройства, ни виртуальные кондиционеры, которые можно там создать.
Обойти эту проблему можно создав в приложении по несколько сцен для каждого из кондиционеров.
Например, у меня были сцены с режимом «Охлаждение» и температурой 23 градуса, или «Обогрев» и 25 градусов и т.д.
Были и отдельные сцены для выключения кондиционеров.
Эти сцены, в свою очередь, успешно прилетают в HA и активируя их можно тем самым менять режим работы кондиционера. Но, только на заранее собранные пресеты настроек «режим — температура», просто так изменить целевую температуру на пару градусов не получится.
В целом этот подход работал, позволяя мне в нужные моменты времени включать кондиционеры в заранее определенных режимах через HA.

— ~ —
ESPHome
Но мне хотелось большего, и как-то мне на глаза попалась крайне интересная статья, в которой был описан прямо мой случай — Daikin, Tuya IR Hub, Home Assistant и т.д.
Описанное там мне очень понравилось и я решил заказать себе еще один IR хаб для экспериментов по перепрошивке его в ESPHome. Как оказалось в дальнейшем, это было очень правильное решение. =)
Самым простым способом перепрошить устройство Tuya является использование tuya-convert, с его помощью можно сравнительно просто заменить прошивку прямо по воздуху, без вскрытия и паяльника.
Забегая вперед, этот инструмент с успехом перепрошил мои «старые» IR хабы. А вот с новым возникли проблемы…
Как оказалось, в последних версиях платформы Tuya были внесены изменения, которые делают невозможным использование tuya-convert для замены прошивки по воздуху. И чем новее устройство, тем выше шанс получить именно такое. Для любопытствующих, вся информация по этой проблеме собрана здесь.
К сожалению, мой новый хаб оказался как раз таким, поэтому пришлось его вскрывать.


После вскрытия видно что хаб построен на модуле TYWE3S, фактически это вариация на тему ESP8266.
В сети достаточно подробной информации о перепрошивке подобных устройств, например здесь, здесь или здесь.
Вкратце, все сводится к пайке проводов к чипу (или к диагностическим площадкам на плате), подключению к компьютеру с использованием USB — UART адаптера и прошивке ESPHome.
После того разобрались с вопросом как шить, можно начинать эксперименты по интеграции в HA.
Моя первая попытка была с таким конфигом ESPHome:
# Переменные для использования в конфиге
substitutions:
board_name: smartir_04
room_name: livingroom
esphome:
name: ${board_name}
platform: ESP8266
board: esp01_1m
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "SmartIR_04"
password: !secret wifi_fallback_ap_pass
captive_portal:
logger:
api:
password: !secret esphome_api_password
ota:
password: !secret esphome_api_password
time:
- platform: homeassistant
id: homeassistant_time
# Штатный светодиод статуса на GPIO4
status_led:
pin:
number: GPIO4
# Приемник ИК-команд на GPIO5
remote_receiver:
id: rcvr
pin:
number: GPIO5
inverted: True
dump: all
# ИК-передатчик на GPIO14
remote_transmitter:
pin:
number: GPIO14
inverted: false
carrier_duty_percent: 50%
sensor:
# Внешний датчик температуры из HA
- platform: homeassistant
name: "Current temperature"
entity_id: sensor.for_esphome_temp_in_${room_name}
id: ha_temp_${room_name}
internal: true
unit_of_measurement: °C
accuracy_decimals: 1
- platform: wifi_signal
name: ${board_name}_wifi_rssi
update_interval: 60s
internal: false
binary_sensor:
- platform: status
name: ${board_name}_status
internal: false
# Кнопка на корпусе - GPIO13
- platform: gpio
pin:
number: GPIO13
inverted: true
internal: true
name: ${board_name}_button
id: button
climate:
- platform: daikin
name: "Test AC"
receiver_id: rcvr
sensor: ha_temp_${room_name}
Самая интересная часть здесь — компонент IR Remote Climate, он позволяет создать в HA стандартную сущность Climate (кондиционеры, обогреватели и прочие климатические установки).
При этом есть возможность в качестве датчика температуры использовать любой из доступных в HA (показания внутреннего датчика кондиционера мы получить не можем), за это отвечает параметр sensor.
А также обеспечить некоторую обратную связь от родного пульта ДУ указав параметр receiver_id. Это позволит хабу ловить команды с пульта, дублировать их в эфир и отражать все изменения в HA.
В интерфейсе эту сущность можно представить в виде стандартной карточки thermostat:

В теории все очень удобно! Но в моем случае, к сожалению, не взлетело — кондиционеры не реагировали на команды с хаба, а сам хаб декодировал сигналы с родного пульта как Panasonic…
После долгих поисков и открытия issue в ESPHome, оказалось что у Daikin’а существует большое количество разных реализаций ИК протоколов для их техники (Daikin, Daikin128, Daikin152, Daikin160, Daikin2, Daikin216 и т.д.) и в моем случае протоколы в ESPHome и кондиционере не совпали.
IRremoteESP8266
Решением стало использование сторонней библиотеки IRremoteESP8266.
В результате наглого копирования чужих примеров, изучения в меру своего понимания API ESPHome и кода реализации протоколов Daikin в IRremoteESP8266, я смог добиться полноценного управления своими кондиционерами из HA.
Конфиг ESPHome у меня в итоге выглядит так:
substitutions:
board_name: smartir_03
room_name: livingroom
esphome:
name: ${board_name}
platform: ESP8266
board: esp01_1m
# Здесь подключаем библиотеку IRremoteESP8266 и заголовочный файл daikin_ir.h
includes:
- include/daikin_ir_v2.h
libraries:
- IRremoteESP8266
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "SmartIR_04"
password: !secret wifi_fallback_ap_pass
captive_portal:
logger:
api:
password: !secret esphome_api_password
ota:
password: !secret esphome_api_password
time:
- platform: homeassistant
id: homeassistant_time
status_led:
pin:
number: GPIO4
remote_transmitter:
pin:
number: GPIO14
inverted: false
carrier_duty_percent: 50%
sensor:
- platform: homeassistant
name: "Current temperature"
entity_id: sensor.for_esphome_temp_in_${room_name}
id: ha_temp_${room_name}
internal: true
unit_of_measurement: °C
accuracy_decimals: 1
- platform: wifi_signal
name: ${board_name}_wifi_rssi
update_interval: 60s
internal: false
binary_sensor:
- platform: status
name: ${board_name}_status
internal: false
- platform: gpio
pin:
number: GPIO13
inverted: true
internal: true
name: ${board_name}_button
id: button
climate:
- platform: custom
lambda: |-
auto daikinac = new DaikinAC();
# Подключение внешнего датчика температуры
daikinac->set_sensor(id(ha_temp_${room_name}));
App.register_component(daikinac);
return {daikinac};
climates:
- name: "Daikin Livingroom"
Файл daikin_ir_v2.h можно найти у меня в git по этой ссылке. Разместить по пути ../esphome/include/daikin_ir_v2.h.
В целом, получилось реализовать все что мне нужно в повседневной жизни — переключение режимов, выбор температуры и скорости вентилятора, управление движением шторки.
Часть функций реализованных в IRremoteESP8266 я не знаю как использовать в ESPHome, за бортом остались кнопки Powerful, Econo и Comfort. Так же в этом конфиге нет приема и дублирования команд с родного пульта ДУ.
Но лично я в реальной жизни ничего из этого никогда не использовал.
— ~ —
Simple Thermostat
После некоторых экспериментов с интерфейсом, я в итоге остановился на кастомной карточке simple-thermostat. Штатный thermostat занимает много места на экране, и содержит лишнюю для меня информацию. С использованием simple-thermostat получилось компактно разместить все те режимы и функции, которыми я пользуюсь чаще всего, оставив редко используемое доступным в окне объекта кондиционера:


Пример конфигурации карточки:
- type: 'custom:simple-thermostat'
entity: climate.daikin_nursery
show_header: false
decimals: 0
step_layout: row
step_size: 1
hide:
temperature: true
sensors:
- entity: binary_sensor.ac_nursery_status
icon: mdi:air-filter
control:
_names: false
hvac:
_name: "Режим:"
dry: false
fan_only: false
swing:
_name: "Движение шторки:"
"off":
icon: mdi:shuffle-disabled
vertical:
icon: mdi:shuffle

