Товары с Китая

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом


Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Лето 2020 года, обещает быть жарким, по крайней мере, об этом факте сообщили нам метеорологи этой весной. Ну что же, в это вполне можно поверить хотя прогнозы погоды с завидным постоянством не соответствуют действительности, особенно долгосрочные. Я все-таки решил не испытывать судьбу и поставить себе кондиционер, тем более разговоры об том уже давно велись. Последним аргументом «За» стал непонятно когда заканчивающийся режим самоизоляции и дистанционной работы. В общем решено будем охлаждать квартиру современными методами.

Критерии выбора были: недорогой, инверторный, на площадь 20-30 кв.м., и обязательно интеграция в систему Умного дома, при этом пункт про умный дом, пожалуй, был самым важным. Не то чтобы это была жизненная необходимость, но когда начинаешь всё в доме интегрировать в единую систему управления, то остановиться сложно. В качестве системы умного дома у меня Home Assistant, но обзор не о ней.

Варианты интеграции в УД

Изучив доступную в интернете информацию об интеграции Кондиционеров в Умный дом приходим к выводу, что есть три возможных варианта:

  1. 1) Wi-Fi модуль от производителя + приложение от производителя (если повезёт с возможностью интеграции через плагины в сторонние системы умного дома
  2. 2) IR (ИК) передатчик который обучается командам от пульта. Есть как готовые варианты в памяти которых есть поддержка множества кондиционеров, так и самоделки на базе ардуино или esp
  3. 3) Самодельный" Wi-Fi модуль с прошивкой и интеграция в open source системы умного дома (Home Assistant, Major Dome и т.д.)

Первый вариант, в целом, неплохой. Кто, как не производитель, может обеспечить полную поддержку команд кондиционера: приятный интерфейс управления и базовые автоматизации из коробки. Из плюсов такого решения — простота. Обычно такие решения от производителей требуют минимум настройки, а также хороший функционал и удобство. Из минусов — обычно цена и сложность интеграции в открытые системы умного дома (хотя это и не обязательно). Часто такие модули и сопутствующий софт это вещь в себе. Кто пробовал соединить различные умные устройства от разных производителей в какую-то общую инфраструктуру, тот поймёт. В прочем сейчас есть Гугл Ассистент, Алиса и прочие голосовые помощники которые стараются взять на себя работу по управлению умного дома и объединению в одну систему решений от разных производителей. Честно говоря, получается у них это весьма посредственно, ну и не голосом единым так сказать…

Второй вариант имеет право на жизнь и зачастую он единственный возможный для кондиционеров которые совсем неумные, уже установлены, а умный дом появился позже. И это просто неплохой вариант если в квартире уже есть ИК передатчик «шайба» управляющий другими домашними устройствами, например телевизором. Мне же он не нравится по двум причинам. Во-первых связь односторонняя, то-есть мы только и можем как посылать кондиционеру команды, а текущий статус, режимы работы, целевую температуру и т. д. мы узнать не можем. Ситуация усугубляется, когда мы пользуемся такой интеграцией в умный дом и пультом одновременно. Вторая причина — ИК канал в принципе не супер надёжный. Существует ненулевой шанс что пакет световых данных по пути к кондиционеру где-то потеряется и мы не можем спросить кондиционер как он понял нашу команду.

Остаётся третий вариант — сделать свой модуль интеграции. После поиска в интернете, мой выбор пал на кондиционеры Haier как на наиболее простые (ИМХО) в интеграции и недорогие по цене. Доступные в интернете статьи говорят нам о том, что протокол обмена с внешним миром у кондиционера довольно простой и его давно декодировали.

Выбор, покупка, установка

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

Что до самого кондиционера, то в моём распоряжении оказалась модель Haier HSU-09HTM103/R3(DB) в целом меня она устроила всем, компактная, нужной производительностью, инверторного типа, и на хладагенте R32, а значит кондиционер обещает быть экономичным и тихим.

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Немного про установку
С установкой в общем всё довольно удачно получилось, хоть сейчас и наступает сезон кондиционеров. Небольшое гугление в купе с поиском по дубльгису и инстаграму выдали пятерку приемлемых предложений. Половина отсеялась по причине большой очереди, вторая половина по причине, «ой, мы устанавливаем только те что сами продали». Остались ребята из Холодка, которые согласились на установку на следующий день утром. К обеду следующего дня кондиционер уже работал, сама установка прошла успешно, без проблем, всё чисто аккуратно и профессионально, и по современному. спасибо мастерам из www.instagram.com/holodok_72 (это, если что, Тюмень).

Установка модуля интеграции в Умный дом

Открыв крышку кондиционера, я ожидал увидеть отсек для стика и USB порт для подключения. Ожидания мои основывались на недавней публикации sprut.ai/client/article/2586 но там речь шла о серии Lightera. Однако в серии «эльдорадо/мвидеа» производители решили пойти другим путём, они хоть и ставили блок для установки стика в корпусе (менее заметный чем в Lightera), но USB порт выводить не стали, ограничившись 4-х пиновым папа разъёмом на материнской плате кондиционера. Разъём этот я нашел не сразу, для доступа к нему нужно немного вытащить плату из направляющей. Он будет в глубине, где-то посередине, в нижней части платы, пронумерован как CN35, характерные атрибуты говорящие нам что это то что нужно — надпись над разъемом RX TX GND +5V (спасибо производителям что подписали). Скажу сразу, разъем довольно нестандартный. Он хоть и с шагом 2,54 между пинами, но популярные гнезда с али туда не подходят, я использовал чуть подпиленные надфилем 4 раздельных dupont пина «мама» и капельку горячего клея для лучшей фиксации.

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Далее нам нужен любой модуль ESP8266 (можно и ESP32, или даже ZigBee (если сами готовы написать прошивку)), и конвертер уровней TTL, дело в том что кондиционер у нас с 5 вольтовой логикой, а ESP8266 3,3 вольта. Говорят можно и напрямую, но я сильно не рекомендую так делать, во первых оно может и заработает, но сколько проработает на перенапряжении мне не известно, во вторых платка трансляции уровней TTL стоит копейки и на али их пруд пруди, гуглится как «TTL level converter». В общем с ней будет лучше. Для удобства привожу схему подключения, в нелюбимом мной fritzing’e, но зато наглядно и доступно.

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Скажу по секрету, первым делом конечно у меня возникло желание запустить KiCad сделать там красивую плату, купить коннекторы, заказать всё это в Китае, но как подумал сколько займёт доставка (половину лета точно), то отбросил эту идею. Да и вариант с двумя готовыми платами оказался весьма аккуратным на вид, для Wemos D1 я дополнительно подключил внешнюю выносную антенну и разместил её рядом с датчиком температуры кондиционера, там как раз было для этого место. Я рекомендую Wemos от RobotDyn он хоть и чуть дороже обычного, но есть коннектор для внешней антенны и он в модном чёрном цвете )))

Больше фотографий процесса сборки — под спойлером
Модуль в процессе тестирования:

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Почти собранный модуль. Осталось уложить провода и закрыть крышку. Кстати, немного о проводах. Лично я в своих самоделках остановился на использовании луженных проводов в силиконовой изоляции (28 AWG), с большим количеством очень тонких жил, они всем хороши, особо мягкие, сломать или перегнуть их практически нереально, а повышенная гибкость позволяет их буквально засунуть в любой доступный угол. У них негорючая изоляция. которая при этом легко зачищается именно в том месте где нужно, луженые жилы проводов исключают окисление меди, прослужат они очень долго. Единственный минус таких проводов это цена, но для небольших монтажных целей когда не нужны толстые сечения, цена за метр провода получается доступной.

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Антенна модуля:

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

На этом сборка модуля закончена, переходим к программной части. Хотя тут на самом деле всё было немного по другому, перед тем как установить модуль в кондиционер и закрыть крышку нужно будет прошить нашу esp8266 (Wemos D1 mini). Достаточно одного раза по проводам, остальные обновления прошивки будут OTA (то-есть по воздуху).

Программная часть

Отправной точкой в изысканиях, как я уже отметил, была публикация sprut.ai/client/article/2586 которая в свою очередь переадресовала меня на более старую публикацию аж 2016 года blog.instalator.ru/archives/433 где автор делится как схемой модуля (по сути всё тоже самое), так и прошивкой, притом прошивки там две версии, первая написана в среде ардуино (и уже не поддерживается) github.com/instalator/Haier_WiFi а вторая прошивка это шлюз Telnet to Serial + драйвер для ioBroker’а.

Вариант с Telnet to Serial я откинул сразу, во первых иоброкер я не использую, во вторых логику (программную часть) пришлось-бы как-то реализовывать самостоятельно для Home Assistant, ну и в третьих Хоум ассистент не очень хорошо работает с телнетом.

Дальше через встроенный USB2UART прошиваем модуль первой прошивкой для среды ардуино. Я не буду тут писать тонкости прошивки через ардуино IDE, там всё довольно просто и есть много учебников в интернете по этому поводу. Возвращаем модуль в кондиционер, включаем и… видим следующую картину. Кондиционер стартует и через равные небольшие промежутки времени (2-5 сек) пищит (а пищит он на принятие почти любых команда от пульта) и переключается между режимами, в общем ведёт себя не адекватно. Ладно, то что кондиционер хоть как-то реагирует уже хорошо, значит модуль у нас рабочий. Дело за малым — разобраться в протоколе. Открываем исходники проекта в ардуино IDE, смотрим, сначала ничего не понимаем, выжидаем паузу, ещё раз смотрим, закрываем. Идем на гитхаб в поисках прошивки шлюза UART2MQTT. Идея была в том, чтобы посмотреть что именно нужно передать кондиционеру для правильного включения, сформировав набор байт по инструкции из публикации INSTALATOR’a. Но, приемлемо работающего и простого шлюза UART2MQTT я, к сожалению, не нашел.

Поиски альтернативной прошивки

Возвращаемся на GitHub и ищем по ключевым словам Haier и ESP8266. И, о чудо, натыкаемся на проект камрада MiguelAngelLV под названием esphaier. Сам проект это адаптация наработок INSTALATOR’а выполненных в виде модуля для esphome.

размышления о EspHome и других конструкторах
О прошивке EspHome я и раньше слышал. Впервые столкнулся с ней в процессе поиска альтернативных прошивок для устройств sonnof на популярном чипе совместимом с esp. Тогда по совокупным факторам я выбрал прошивку от проекта Tasmota, она была попроще и более дружелюбна к пользователю своим веб интерфейсом, В целом это конкурирующие проекты, но немного с разной философией.

Tasmota больше похожа на комбайн всё в одном и конфигурируется уже после прошивки через простой веб интерфейс.

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

EspHome, как я понял, это скорее модульный конструктор, который конфигурируется под конкретные нужды ещё на этапе сборки через редактирование yaml файла. Это удобно и позволяет засунуть в прошивку лишь то, что действительно будет использоваться. EspHome насчитана на тесную работу с HomeAssistant и фактически не требует каких-либо дополнительных настроек с его стороны, но при этом с некоторой доработкой может использоваться в других системах умного дома. В качестве транспорта у Еспхоум какой-то свой протокол которым сильно гордятся разработчики сравнивая его с MQTT, последний при этом, как вы уже догадались, представлен не в выигрышном свете. Хотя, по слухам MQTT также можно включить.

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

Предварительно настроив yaml файл esphome, добавив туда возможность обновляться по воздуху, веб интерфейс, явки пароли для точки доступа — прошиваемся. Работает! Заходим в хоум ассистент, включаем интеграцию EpsHome, прописываем IP адрес модуля который выдал ему роутер и видим одно климатическое устройство. Это мой кондиционер — три режима (авто, охлаждение и обогрев), возможность указать целевую температуру и посмотреть текущую в комнате. Хм… не густо. Кроме того, переключая режимы кондиционера с пульта, я вижу что в хоум ассистент не всегда корректно приходит статус о текущем состоянии устройства, корректно отображается режим работы и статус Вкл/Выкл только при базовых режимах. При включении режима «здоровье», всё ломается.

Кроме того в ридми к проекту написано:

For now, ESPHome climate component don’t support fan speed or swing, so, ESP Haier neither. When esphome will have support, I will add it.

Что в дословном переводе звучит так: «Сейчас Еспхоум не поддерживает управление скоростью вращения и направлением воздушного потока, и как только функциональность появится, я обязательно её добавлю»… Мне как-то ждать не хотелось, возникли мысли а что мешает мне добавить ещё парочку модулей в ЕспХоум которые будут отвечать у меня за работу вентилятора и шторок и расположить их рядом. Уже собрался искать в интернете как это сделать, но решил зайти на русский телеграмм чат проекта EspHome t.me/esphome Рассказал там о проблеме, выслушал некоторые советы, размышления на тему автоматизации кондиционеров, как плохо с эти обстоят дела, мысли по поводу IR управления и приделывания датчиков с герконом от ксяоми на шторки кондиционера для обратной связи и т.д.

Среди всех размышлений был весьма дельный совет попробовать DEV версию EspHome где по некоторой информации компонент климата доделан, добавлены недостающие режимы (осушение, вентилятор), а также добавлено два селектора выбора — скорость вентилятора и направление потока.

Ставим Dev версию, и на этом этапе я ещё где-то час искал как можно поставить именно дев версию, если что, то вот так:

pip install -U git+https://github.com/esphome/esphome.git@dev 

Заливаем пока ещё старую прошивку (но с выводом отладки веб) и дальше начинаем методично перебирать с пульта все режимы, документируя что мы делаем и какие байты при этом поменялись в ответе кондиционера, эдакий датамайнинг.

Анализ протокола
Ещё через некоторое время мне стало ясно почему не всегда определяется статус Вкл/Выкл, какие байты отвечают за какие режимы и как со всем этим бороться. В общем ситуация следующая:

Для статуса работы кондиционера используется 29 байт, притом в этом байте сразу закодировано Вкл/Выкл (в нулевом бите), режим здоровья (в третьем бите), какой-то сервисный режим работы компрессора (в четвертом бите) что во втором и первом выяснить не удалось, протокол один а кондиционеров у хаера много с разной функциональностью и поддерживаемыми фишками. Если вдруг это читают ребята которые занимаются сервисом хаера, и у них есть какая официальная документация по протоколу обмена между вайфай стиком и кондиционером, пришлите пожалуйста, или напишите в комментариях что там за что отвечает, вместе мы сделаем лучшую поддержку всех возможных функций.

Для управления шторками используется 31-ый байт посылки (0-ой бит), он и отвечает за турбо режим (1 бит), сайлент режим (2 бит), горизонтальное и вертикальное положение шторок (3 и 4 биты), индикация на кондиционере (5 бит). Ещё для управления шторками дополнительно используется 27 байт посылки, там закодировано включение и отключение качения шторок.

Немного разобравшись в том, как вообще на этом Си++ (вроде) программировать, запасаясь знаниями из интернета идём писать быдло манки код, для меня лично самые сложные моменты были это битовые сдвиги и проверки конкретных битов. Парочка итераций и вроде всё работает, заливаем в гитхаб форк проекта, заливаем прошивку на устройство и наслаждаемся прохладой. Код доступен по ссылке github.com/Oksion/esphaier будет работать пока только с дев версией esphome.

Там есть ещё что доделать, почему-то разработчики esphome не добавили silent и turbo режимы в селектор скорости, вместо этого есть непонятный режим fan_mode_focus и fan_mode_diffuse (можно в принципе использовать их, но я пока не решил правильно-ли это будет. Также сейчас можно добавить кнопку блокировки пульта и выключения индикации отдельным виджетом, если у кого есть желание и скиллы для этого — велком на доработку, сообщество это оценит.

В качестве эпилога

Что можно сказать по итогу (выводы):

  • Во первых полная интеграция кондиционеров Haier в умный дом (те что имеют UART порт в любом его применении) это дело времени, думаю в ESPHome через какое-то время она будет из коробки, протокол несложный и успешно реверсится
  • Вайфай модуль самостоятельного изготовления доступен по цене от 160 руб до 300 руб в зависимости от производителя, плюс чуть прямых рук и проводов
  • Если сильно нужно, можно научится чуть чуть программировать править чужой код за вечер
  • Сам кондиционер мне понравился, приятное сочетание цены/качества и возможностей, тихий и компактный, несложная интеграция в умный дом. Из минусов кондиционера неудобное управление шторками с пульта
  • EspHome очень удобный конструктор прошивок, с большими возможностями. Я приятно удивился скорости работы, реакция на нажатие кнопки на смартфоне мгновенная. Для популяризации ZigBee не хватает подобного конструктора.

Upd. Как выглядит интерфейс управления в ХА

А вот так:

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Все ссылки встречающиеся в тексте:

Под спойлером списком
blog.instalator.ru/archives/433 — Статья от 03.07.2016 про описание протокола, схемотехнику модуля и прошивки для ардуино IDE

habr.com/ru/post/395533/ — Также статья но на хабре

github.com/instalator/ioBroker.haier — Драйвер для IOBroker’a

github.com/instalator/ESP8266.TelnetToSerial — Шлюз Telnet To Serial нужен для работы с драйвером ИОброкера

github.com/instalator/Haier_WiFi — Прошивка для работы по протоколу MQTT (более не поддерживается, у меня не заработала как надо)

sprut.ai/client/article/2586 — Свежая статья про нестандартную интеграцию в Home Assistant на базе проекта выше

github.com/MiguelAngelLV — ESP Haier модуль для EspHome от камрада Miguel Ángel López Vicente (взят мной за основу)

github.com/Oksion/esphaier — Мой форк проекта выше со всеми актуальными доработками

esphome.io — Официальный сайт прошивки EspHome с документацией

t.me/esphome — Телеграмм чат по EspHome может быть отправной точкой в изучении

t.me/homassistant — Чат по Home Assistant — тут помогут в создании умного дома на основе этой замечательно, гибкой платформы

www.instagram.com/holodok_72 — Ребята установщики кондиционеров (в Тюмени).

Ну и по традиции, в ожидании прохлады
Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом

Esp8266 Wemos D1 mini, кондиционер Haier и его тернистая дорога в умный Дом



СМОТРИ ТАКЖЕ