После состоявшегося знакомства с 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