Управление кондиционером Haier на базе ESP8266

Кондиционер Haier серии Lightera имеет на своем борту модуль WiFi для управления им через приложение на телефоне, которое работает через неведомый китайский облачный сервис. Для старых моделей модуль был опцией и приобретался отдельно, подключается к плате управления во внутреннем блоке. На новых моделях разъем выведен под декоративную накладку и в серии Lightera модуль уже установлен. Таким образом, данное устройство применимо ко многим кондиционерам марки Haier.

Для управления кондиционером через родной WiFi модуль необходимо скачать приложение на смартфон/планшет, зарегистрироваться в нем, подключится вашим смартфоном/планшетом к роутеру по Wi-Fi. Включить кондиционер в режиме охлаждения на 30 градусов с минимальной скоростью вентилятора, убедится, что появилась сеть Haier-uAC, и запустить программу поиска устройств и сетей. Программа находит ваш кондиционер и доступные сети. Вы регистрируете свою сеть, выбрав ее из списка, и переходите к регистрации вашей модели оборудования (кондиционера). В моей домашней сети на роутере отключен сервер DHCP и чтобы подключиться к моей сети WiFi на подключаемом устройстве необходимо создать новое подключение и прописать там помимо SSID (так как он скрыт) и пароля еще и статический IP адрес. Именно по этой причине у меня не получилось добавить мой кондиционер в приложение, так как оно при добавлении кондиционера просит выбрать только точку доступа WiFi и пароль. Введенные данные приложение отправляет WiFi модулю кондиционера и он, используя эти данные, пытается подключиться к вашей точке доступа, надеясь, что ему дадут IP адрес, но мой роутер разбивает все его надежды.

Внешний вид родного модуля WiFi.

fba97a5fcabe4aea8d7ebba7b4f8ff93

Для теста я все-таки подключил его через другой роутер. Управление через приложение работает, а вот управлять кондиционером без приложения нет возможности, через какой облачный сервис работает не ясно, личного кабинета никакого нет. Как итог, Haier, как и многие производители техники, создали свою железку со своим приложением без возможности интеграции с другими системами автоматизации (без специальных модулей и оборудования). В итоге я решил сделать свой модуль WiFi со всеми характеристиками от известного всем персонажа.

За основу был взят ESP8266 12F, который будет работать напрямую с моим сервером по протоколу MQTT. На сервере установленIOBroker, который выступает так же в качестве MQTT сервера.

Оставалось понять протокол обмена с самим кондиционером. Изучив родной модуль и схемы блоков управления предыдущих моделей стало понятно, что модуль WiFi общается с кондиционером через обычный UART с уровнями TTL. Подключив параллельно линии RX/TX переходник UART/USB и управляя кондиционером из приложения и с пульта, прочитал все данные.

Фото платы родного модуля.

9c728474ac914855a7af1e30a8b95b27

На плате видно DC/DC преобразователь на 3.3 В и преобразователи логических уровней. Экран снимать не стал, что под ним неизвестно.

4152eca238784c5482da059d7846c0a6

Это мой первый опыт реверса протокола, но на мой взгляд протокол оказался очень простой.
Скорость обмена составляет 9600/8-N-1. Модуль WiFi каждые 2 секунды отправляет запрос (13 байт), на который кондиционер выдает пакет (37 байт) со всеми данными. Под спойлером список байт которые получилось разгадать.

1 — FF cтартовый байт
2 — FF cтартовый байт
3 — 22 — HEX Длина пакета без двух стартовых байт и контрольной суммы
4 — 00
5 — 00
6 — 00
7 — 00
8 — 00
9 — 01
10 — 01 — при запросе, 02 — в ответе
11 — 4D — при запросе, 6D — в ответе
12 — 5F — при запросе
13 — 00
14 — 1A — 26 градусов, 1B — 27, Текущая температура
15 — 00
16 — 00
17 — 00
18 — 00 — при запросе, 7F-в ответе
19 — 00
20 — 00
21 — 00
22 — 00
23 — 00
24 — 00 — smart, 01 — cool, 02 — heat, 03 — вентиляция, 04 — DRY,
25 — 00
26 — 00 — max, 01 — mid, 02 — min, 03 — auto — FanSpeed
27 — 00
28 — 00 — выкл., 01 — верхний и нижний предел вкл. 02 — левый/правый вкл. 03 — оба вкл
29 — 00 — блокировка кнопок пульта выкл, 80 блокировка вкл.
30 — 00 — power off, x1 — power on, (1x ) — Компрессор? x9 — Health
31 — 00
32 — 00 — fresh off, 01 — fresh on
33 — 00
34 — 00
35 — 00
36 — 00 — 16 градусов, 01 — 17 0E — 30 градусов. Установленная температура
37 — Контрольная сумма. Просто сумма всех байт без двух стартовых.

FF FF 0A 00 00 00 00 00 01 01 4D 02 5B Включение
FF FF 0A 00 00 00 00 00 01 01 4D 03 5C Выключение
FF FF 0A 00 00 00 00 00 01 03 00 00 0E Блокировка пульта
FF FF 0A 00 00 00 00 00 01 01 4D 01 5A Опрос состояния

Например для установки температуры необходимо отправить:
FF FF 22 00 00 00 00 00 01 01 4D 5F 00 00 00 00 00 00 00 00 00 00 00 01 00 02 00 00 00 01 00 00 00 00 00 04 D8 — установить на 20 градусов.

Рисуем принципиальную схему. Схема питается 5 вольтами от кондиционера, а так как напряжение питания ESP8266 — 3.3 вольта, далее стоит линейный стабилизатор LM1117(AMS1117) на соответствующее выходное напряжение. На элементах R1, Q1, R3 и R2, R3 собраны преобразователи логических уровней так как RXD TXD модуля ESP8266 не толерантны к 5 В. Для программирования ESP контакты U2 U3 необходимо замкнуть вместе.
Принципиальная схема.

db844688b6cc4090baa37009173340c8

Разводим печатную плату. Компоновка платы сделана для установки в корпус от родного WiFi модуля.

899bb3d26431439db346242ab24b2dc7

5a5330caae44425ea1dd2a4d58aebf98

На фото ниже тестовая плата.

5dd1950ab3d344e5b1b1e962decf0e49

Заказал наконец то платы из китая:

IMG_1580 IMG_1583 IMG_1584

Код написан в среде Arduino. Актуальная версия доступна на GitHub.

Добавлено 29.08.2017:

На данный момент я отказался на обработку протокола в самой ESP. Я написал для ioBroker’а драйвер, а ESP используется как шлюз Telnet to Serial.

Прошивка модуля (ESP8266)

Прошивка написана в среде Arduino IDE, поэтому первым делом нужно установить ее. Скачиваем последнюю версию с официально сайта. После установки нужно добавить поддержку плат ESP. Для этого идем меню «Файл» — «Настройки» и в строке «Дополнительные ссылки для Менеджера плат» добавляем следующую ссылку — http://arduino.esp8266.com/stable/package_esp8266com_index.json

Нажимаем «Ок«, теперь идем в «Инструменты» —  «Плата» — «Менеджер плат«, находим в списке «esp8266 by ESP8266 Community» и устанавливаем пакет.

Если планируется прошивать модуль по OTA (по воздуху, не вынимая модуль из кондиционера), то необходимо установить Python версии 2.7.x https://www.python.org/downloads/ . ВАЖНО! При установке нужно включить опцию Add python.exe to Path

Открываем файл прошивки (последняя версия ESP8266.TelnetToSerial тут). Выбираем нужную плату:

Выбираем порт — последовательный порт COM* (где * номер порта к которому подключен переходник USB-TTL) или сетевой порт для прошивки модуля по OTA.

Для прошивки через последовательный порт подключаем переходник USB-TTL к модулю согласно распиновке модуля и переходника. Контакты RX и TX подключаются перекрестно т.е. RX-TX, TX-RX.

Распиновка модуля haier
Распиновка модуля haier

Устанавливаем на модуль перемычку и подаем на модуль питание, при этом модуль входит в режим программирования. В Arduino IDE жмем кнопку «Загрузка» и дожидаемся завершения прошивки. После завершения прошивки нужно снять перемычку и перезагрузить модуль. На этом прошивка модуля закончена.

После прошивки ESP8266 ставим модуль в кондиционер. Если загружена первая версия прошивки с MQTT, то на сервере MQTT автоматически создаются топики:

559d53096cd3452890825dc485aa1d79

Если используем прошивку ESP8266.TelnetToSerial, то необходимо в IoBroker установить драйвер haier, прописать в настройках драйвера IP адрес и порт нашего модуля и можно пользоваться.

Панель управления кондиционером на веб странице vis iobroker.

e4b3f02e748e4e62b917610f015dbde4

Кроме управления с веб страницы, организовано управление голосовыми командами, а так же через драйвер Telegram для IOBroker.

На текущий момент изготовлена  третья ревизия платы. Написана прошивка поддерживающая все модели кондиционеров Haier, включая модели с новым протоколом (например Haier Elegant AS25NHPHRA/1U25NHPFRA). Пример работы веб интерфейса новой прошивки на gif’ке ниже. Так же есть возможность управлять кондиционером через MQTT либо WebSocket.

Плата WiFi модуля управления кондиционером Haier
третья ревизия платы модуля.
Подписаться
Уведомлять
guest

39 комментариев
Старые вначале
Новые вначале По голосам
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
7 лет назад

Отличная работа!
Давно хотел проснифферить , но было лень 🙂
Открываются большие возможности…
Хочу обрадовать интересующихся- разъем с RxD, TxD, gnd, +5V есть практически на каждой современной плате управления внутренним блоком кондиционера Haier. Правда не везде впаян разъем.

kesha4
kesha4
3 лет назад
Ответить на  Сергей

Только что разобрал свой Хаер, действительно на плате есть эти контакты и даже подписаны как wi-fi. Впаял usb разъем, осталось сделать модуль)

Денис
Денис
5 лет назад

Автор, спасибо за описание! Собираюсь приобрести кондиционер Lightera, статья очень кстати. Можете подсказать, где конкретно в Китае заказывали плату?
Сам так аккуратно не сделаю, хочу заказать готовое!

Алексей
Алексей
5 лет назад

Добрый день! очень заинтересовала Ваша статья, выбираю кондиционер с возможностью интегрировать в Home Assistant. как показала себя в работе?
Есть возможность у Вас изготовить еще 1 такую платку, если да сколько хотите за нее?

Михаил
Михаил
3 лет назад
Ответить на  instalator

Как с вами связаться?

Oleg
5 лет назад

Очень качественно вышло. Я так понимаю это продолжение статьи на хабре.
Вы заказывали только платы, или паяли сами?

5 лет назад

Я также рассматривал переделку готового модуля. К примеру такого ESP Adapter 5v
comment image

Или изготовление переходника т.к. мне кажется это удешевит конструкцию . Также могу заметить, что ESP достаточно толерантный к 5v и ради эксперимента можно подключить напрямик.

Никита
Никита
5 лет назад

Здравствуйте!
А при считывании показаний и/или изменении состояния кондиционера у Вас также кондиционер издает писк(как при изменении режима) или удалось как то это обойти?

Александр
Александр
4 лет назад
Ответить на  instalator

Можно ли подключить при помощи данной платы кондиционер в Home Assistant?

amicopc90
amicopc90
4 лет назад

excellent work, can would you upload the file greber?

Александр
Александр
3 лет назад

Автор, мне кажется в принципиальной схеме у вас ошибка. В делителе напряжений резисторы R2 и R4 перепутаны местами. По вашей схеме на rx идет 1.6, а не 3.3 вольта.

Александр
Александр
3 лет назад
Ответить на  instalator

На красной плате (судя по вашим фото) тоже не правильно запаяли. В принципе должно работать и на 1.6 вольт

Александр
Александр
3 лет назад
Ответить на  instalator

У меня есть esp8266 в виде платы wemos d1 mini.
Могу ли я на пины rx и tx просто повесить транзисторный конвертер уровней? (типа такогоcomment image) А к стороне уровней 5v припаять usb для подключения к кондиционеру.

Александр
Александр
3 лет назад
Ответить на  instalator

Я ниже еще спрашивал про прошивку. Посмотрите пожалуйста. Вообще проект еще поддерживается? Вопросы можно задавать?

Александр
Александр
3 лет назад

Обсуждение вашего модуля и прошивки идет на sprut.ai в этой теме https://sprut.ai/client/article/2586
На сколько я понял, по просьбе Александра Подосинникова (alex.pod) месяц назад вы доработали прошивку для HomeAssistant, но нигде её не выложили. Хотя Александр утверждает, что в описании на гитхабе уже есть изменения (но прошивка определенно старая, не обновлялась 2 года).
Можете пояснить, где взять наиболее актуальную версию прошивки для работы через mqtt с обработкой кодов в самой esp без IoBroker?

Андрей
Андрей
3 лет назад

С чем может быть связано долгое обновление состояний?
Сейчас, например, время 18:09. Обновление «power» = 15:22, «fanspeed» = 16:26
Проскакивает периодически обновление с интервалом в пару минут или с неправильными данными (фанспид на максимум или температура 0, при заданной 199)

Андрей
Андрей
3 лет назад
Ответить на  Андрей

Короче, не заработало. У меня ответ приходит в виде 5-12 отдельных кусков различной длины (сумма 37 байт за ~100мс) и, соответственно, результат не обрабатывается

Kevin
Kevin
3 лет назад
Ответить на  Андрей

Hi, did you manage to get rid of this chunk problem? I’m having the same trouble. My received packages are only at a length of about 1-3. Controlling works but receiving wont

Последний раз редактировалось 3 лет назад Kevin ем
Kevin
Kevin
3 лет назад
Ответить на  Kevin

I managed to get the serial working by bumping up the delay in line 93 of the arduino code to 37ms the only thing now is that the iobroker script will continiously push Error length packet. Raw response: {ff} Length packet:[1]. Beside this small issue the states are now correct in ioBroker.

Андрей
Андрей
1 год назад
Ответить на  Kevin

Добавил между строками 85 и 86 delay(150); и заработало
😀
До этого было некоторое извращение в коде с суммированием ответов в нужную строку

Последний раз редактировалось 1 год назад Андрей ем
Павел Геннадиевич
Павел Геннадиевич
3 лет назад

Люди добрые, привет.

Помогите пожалуйста. Пришлите распиновку шнурка A0010402992. Оригинальный долго ждать. Уже 4 дня жду ответа от сервисного центра в Казани. 🙁

Заранее спасибо! 🙂

Sirse
Sirse
2 лет назад
Ответить на  Павел Геннадиевич

Брал на ZStock за 200 с гаком рублей, отправили на следующий день.
Литьё шнурка, кстати, имеет специальную форму для того, чтобы защёлкиваться в оригинальный отсек для стика.

Руслан
Руслан
2 лет назад

Где скачать последнюю прошивку с вэб интерфейсом и mqtt?

Oleg
1 год назад

Пытаюсь понять как разрабатываються такие схемы и возник вопросс.
Почему в одних случаях вы используете делитель напряжения на резисторах, а в другом случае на транзисторе?

Андрей
Андрей
14 дней назад

Панель управления кондиционером на веб странице vis iobroker Как организована? не могу натйти готового виджета

Максим
Максим
2 дней назад
Ожидает утверждения администратором

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

39
0
Поделиться своими мыслямиx