Кондиционер Artel в Home Assistant

Дисклеймер: Данная статья не является рекламой бренда Artel, просто так уж вышло, что я его купил. ;) Кроме того, описанный ниже способ работает и с другими его OEM собратьями, коих довольно много.

Если вам лень читать всю статью, можно сразу перейти к технической сути, кликнув сюда.

Сложный выбор

Вряд-ли кто-то станет спорить с фактом, что кондиционер в “умном доме” является одним из ключевых элементов. Но какой кондиционер наиболее совместим с этим самым умным домом?
В идеале, я хотел купить изделие, которое прямо из коробки интегрируется с Home Assistant или, на худой конец, просто с mqtt. Но всё, что я находил в интернете, совершенно никак не относилось к ассортименту местного рынка.
В качестве компромисса, я стал искать то, что хотя бы как-то подключаться к Wi-Fi.
Лето было жарким, бюджет не велик и мой выбор пал на Artel Art-12HI. Благодаря таможенной политике нашей страны (удружили, блин), цена сего девайса была ощутимо ниже импортных конкурентов. В то же время, друг-кондиционерщик сказал, что это, практически, копия китайского Aux (и прочих его OEM клонов) и по начинке, в целом, критики не вызывает.
– Да и чёрт с ним, берём! Подумал я, и отправился за покупкой.

Первое знакомство

Кондиционер оказался и в правду, вполне достойным своей цены. Или, как минимум, мне достался удачно собранный экземпляр… В температурный режим выходит довольно быстро, особо противного шума при работе внутреннего блока – не замечено. Короче, проверив его основной функционал, я принялся изучать его “умную” часть. И вот тут меня ждал очень неприятный сюрприз!
В качестве “умного” модуля установлен какой-то OEM девайс от broadlink. Ранее, я пользовался “умным пультом” от Broadlink, который работал просто отвратительно. По этому, увидев снова это название, я сразу заподозрил неладное. Юзер интерфейсом к этому модулю служит приложение “AC freedom”, которое, работает через китайское облако. И это облако периодически недоступно! А если и доступно, то команда, отправленная кондиционеру, может выполниться с задержкой в 5 – 10 секунд. Ну а самое печальное то – что в итоге у кондиционера нет никакой прямой интеграции ни с Home Assistant ни с Яндекс.станцией. Что-ж, пойдём окольными путями…

Как добавить в Home Assistant?

Всё-же, у этой системы есть и локальное управление. А раз оно есть, с ним ведь можно как-то взаимодействовать?

Способ #1 (программный)

Погуглив, я набрёл на проект некого энтузиаста, представляющий собой софт-адаптер, между модулем broadlink и mqtt.

Установил. И в принципе, это было то, что нужно! Софт подключался напрямую к модулю и позволял вывести в mqtt самые основные функции кондея. Часть функционала, имеющаяся в родном приложении, всё же не была реализована, но это меня не сильно беспокоило. С mqtt я смог затащить кондиционер в Home Assistant и далее, в яндекс станцию. К сожалению, на этот раз я нарвался на нестабильную работу самого wifi модуля. Кондей мог перестать пинговаться, а следом падала и программный посредник.
Я пытался вставлять костыли для мониторинга и перезапуска софта, но всё равно, по крайней мере раз в 4-6 дней управление наглухо переставало работать и требовало ручного вмешательства. Примерно три года оно работало с переменным успехом и я регулярно хватался за физический пульт.

Способ #2 (аппаратный)

Однажды меня это так допекло, что я задумался… А зачем мне вообще родной wifi модуль с костылями? Погуглив на тему реверса протокола взаимодействия с кондиционером, я офигел от найденного! Оказалось, что для кондиционеров этого семейства OEM клонов, кое-кто уже давно выложил отличное решение: “Кастомный компонент для ESPHome для управления кондиционером по Wi-Fi”

Ближе к сути…

Из железа понадобилось: esp32-C3, понижающий dc-dc модуль (с 14 до 5 вольт) и проводочки.

На фото первый вариант модуля управления, собранного на nodemcu esp8266 с огромной “понижайкой”. Всё это хозяйство не помещалось под крышку кондиционера и было заменено на более компактный набор.

Работа с паяльником

В соответствии с распиновкой выходного коннектора кондиционера, подключаем вход DC-DC преобразователя к жёлтому проводу +14в, вешаем на выход вольтметр и крутим подстроечный резистор до тех пор, пока на выходе не получится 5,2 Вольта (с учётом отсутствия нагрузки).

Да, в распиновке имеется какой-то провод +5V, но не зная, нафиг он нужен, я не рискнул вешать на него нагрузку.

Далее, припаиваем положительный выход с преобразователя на вход esp32-C3 +5V, отрицательный к GND, TX к GPIO6, а RX к GPIO7.

Прошивка

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

Добавьте в ESPhome новое устройство. В процессе, мастер добавления устройства предложит дать ему имя (например AC).

Далее, будет предложено соединиться с устройством. Чтобы не тратить время, пропустите этот шаг, затем выберите из списка вручную ваше устройство (в моём случае, esp32-C3)
И в следующем диалоге тоже нажмите SKIP. На данный момент, нас не интересует установка базовой прошивки. Позже, мы зальём её в уже сконфигурированном виде.

Теперь, на появившемся устройстве нажимаем EDIT и настраиваем конфигурацию нашего устройства.

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

esphome:
  name: ac
  friendly_name: ac

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: arduino

external_components:
  - source:
      type: git
      url: https://github.com/GrKoR/esphome_aux_ac_component

logger:
    baud_rate: 0
api:
  encryption:
    key: "****" # этот ключ будет сгенерирован по ходу создания устройства, берите из его конфига.

ota:
  - platform: esphome
    password: "*****" # этот ключ, аналогично, берётся из сгенерированного конфига

wifi:
  ssid: "Ваш SSID"
  password: "пароль"

web_server:
  port: 80
  auth:
    username: "логин от веб интерфейса"
    password: "пароль"



uart:
  id: ac_uart_bus
  # ATTENTION! For TX and RX use GPIO4 (D2) and GPIO5 (D1) for NodeMCU-like boards!
  # See docs for details: https://github.com/GrKoR/esphome_aux_ac_component/blob/master/docs/HARDWARE-EN.md
  tx_pin: GPIO6
  rx_pin: GPIO7
  baud_rate: 4800
  data_bits: 8
  parity: EVEN
  stop_bits: 1

climate:
  - platform: aux_ac
    name: "Artel"
    period: 7s
    show_action: true
    display_inverted: false
    timeout: 150
    optimistic: true

    visual:
      min_temperature: 16
      max_temperature: 32
      temperature_step: 0.5
    supported_modes:
      - HEAT_COOL
      - COOL
      - HEAT
      - DRY
      - FAN_ONLY
    custom_fan_modes:
      - MUTE
      - TURBO
    supported_presets:
      - SLEEP
    custom_presets:
      - CLEAN
      - HEALTH
      - ANTIFUNGUS
    supported_swing_modes:
      - VERTICAL
      - HORIZONTAL
      - BOTH

После редактирования конфигурации, жмём SAVE, а затем INSTALL.

Подключите esp32-C3 к USB порту вашего компьютера, затем зажмите на ней кнопку boot и удерживая, щёлкните reset. Таким образом вы переведёте устройство в режим прошивки.

Тут можно выбрать способ прошивки. Поскольку OTA у нас ещё не работает, выбираем “Plug into this computer”.
В появившемся диалоге браузера выберите соответствующий устройству com порт и нажмите “подключение”.

Если вы правильно перевели esp32 в режим прошивки, то после компиляции, микропрограмма будет установлена в память устройства. После окончания установки ещё раз нажмите reset и проверьте, подключилось ли устройство к вашей wifi сети.

Если всё сделано верно, статус устройства в ESPhome перейдёт в ONLINE, а в настройках Home Assistant появится новое устройство. Добавляем его в дэшборд и наслаждаемся новыми возможностями умного дома.

Алиса, включи кондиционер!

При наличии интеграции с яндекс.станцией, просто добавьте это устройство в “УДЯ” и кондиционером можно будет управлять голосом.

Примеры команд:
“Алиса, включи кондиционер на охлаждение/обогрев/вентиляцию.”
“Алиса, поставь кондиционер на 24 градуса”
“Алиса, сделай похолоднее” (снизит температуру на один градус)
“Алиса, в каком режиме сейчас работает кондиционер?” (Расскажет о текущем режиме и температуре)


Что примечательно, ваш умный дом всегда будет знать актуальный статус кондиционера, даже если кто-то изменил его при помощи физического пульта. И это работает исключительно при наличии двухсторонней связи, в отличии от костылей с инфракрасным ретранслятором (так называемым “умным пультом”)

Как насчёт надёжности?

Что-ж, самоделки на esp32 далеко не всегда могут похвастаться стабильной работой, однако уже около месяца мой кондиционер не отваливается от умного дома. В сравнении с заводским управляющим модулем – это уже прекрасный результат.

P.S.
Остаётся только выразить огромный респект автору проекта, что я и сделал, немного задонатив ему в TON. ;) Поддерживайте энтузиастов, на них держится всё самое светлое в этом мире!