Мы делали-делали и, наконец, доделали! Косячки, конечно, остались, но все работает! С чем всех и поздравляю и о чем хочу рассказать вам в нескольких частях.
Первым делом- благодарности!
Хочу выразить огромную благодарность всем тем прекрасным людям, которые поддерживали меня на протяжении всей работы. Это и комментаторы, и естествоиспытатели, которые рвались в первые ряды проверять "как оно там вообще пашет, не?", и те, кто предметно общался со мной в личке по ошибкам или функционалу, и конечно всем тем, кто донатил на любимый пивасик! Всем вам хочу сказать: "Большое спасибо!". Без вас всех было бы трудно, плохо и печально, а могло бы и не быть вообще.
Ну, а теперь, когда героям довольно воздали дани, мы поговорим о результате работы.
Оглавление.
- Часть 4: Готовый модуль.
- Часть 5: Хакер в деле или как самому понять протокол связи.
Рекогносцировка на местности.
Итак, некоторое время назад фирма TCL запустила, условно говоря, новую платформу, на которой начала делать новые бюджетные кондиционеры, причем как под своей маркой, так и в OEM исполнении с перемаркировкой под марки партнеров. Новая платформа подразумевала не только конструктивное исполнение блоков сплит-систем, но так же и электронную начинку, которая, будучи довольно универсальной, могла адаптироваться под существенное разнообразие компонентов. Так, на новой платформе появились и простые старт-стопные системы, так и более дорогие и современные инверторные модели. В целом же можно сказать так: если Вы видели кондиционер типа TCL TAC-07CHSA/TPG, то, в целом, Вы можете понять, какие кондиционеры других марок сделаны на этой платформе: характерная геометрия внутреннего и внешнего блоков, похожие шторки, LED-дисплей с уставкой температуры, расположение фильтра под крышкой внутреннего блока и т.д.
Для нас же самое ценное- это электронная начинка, а точнее протокол управления этими кондиционерами, этот самый протокол так же общий на всех. Разумеется, энтузиастам захотелось подключить эти кондиционеры к своим системам Home Assistant, чтобы вытворять непотребства посредством разнообразных автоматизаций. Увы, сходу не вышло. К этому моменту в дело подключился я и у меня даже вышло, почитать о приключениях можно здесь. Но не на долго, ведь у Home Assistant (точнее у ESPHome) началась очередная борьба бобра со злом, очередные изменения, которые "ну в этот раз уж точно сделают всем хорошо и тогда заживем!", поэтому мой вариант был признан костыльным, сначала начал барахлить, а вскоре и совсем навернулся. Что-ж, я принял решение делать полноценный внешний компонент для ESPHome, что меня жуть как пугало, ведь я с подобным не сталкивался ни разу, документации толком нет и некому меня научить а я еще и не программист- я начальник отдела производства электроники, экс-радиомонтажник! Но при помощи собравшегося сообщества неравнодушных людей все же удалось сделать это дело- я написал не только сам внешний компонент, но и обвязку к нему из переключателей, событий и подгружаемых файлов. Но обо всем по порядку.
Итак, сейчас важно знать, что компонент работает и проверен на следующих кондиционерах:
- Axioma ASX09H1/ASB09H1
- Ballu Discovery DC BSVI-07HN8
- Ballu Discovery DC BSVI-09HN8
- Daichi AIR20AVQ1/AIR20FV1
- Daichi AIR25AVQS1R-1/AIR25FVS1R-1
- Daichi AIR35AVQS1R-1/AIR35FVS1R-1
- Daichi DA35EVQ1-1/DF35EV1-1
- Dantex RK-12SATI/RK-12SATIE
- Ecostar Radium KVS-RAD09CH
- Royal Clima Gloria Inverter
- TCL ELI ONF 12
- TCL Liferise ONF 09
- TCL One Inverter TACM-09HRID/E1 (возможно, иной порядок контактов)
- TCL TAC-07CHSA/TPG-W
- TCL TAC-09CHSA/TPG
- TCL TAC-09CHSA/DSEI-W
- TCL TAC-09HRID/E1
- TCL TAC-12CHSA/TPG
- TCL TAC-XAL24I
- TCL TPG31IHB
Позже будут добавляться еще модели, по мере появления отзывов от владельцев.
Быстрый старт для нормальных людей.
Для быстрого старта нам понадобится что-то простое и удобное, как валенок. И чтобы купить можно было легко и дешево, как валенок. И чтобы сломать было так же сложно, как валенок. Можно было бы подумать, что нам нужен валенок, но нет, нам нужен модуль ESP-WROOM-32 DevKit v1. Его три главных достоинства для быстрого старта: цена, USB разъем для программирования и возможность запитать от 5 вольт. Сейчас я очень стремно нарисую, что и куда должно подключаться, если у Вас в кондиционере уже установлен USB разъем под WiFi модуль:
Если разъем у Вас какой-то другой- не беда, ведь подпаивается аналогично. А что делать, если вот никак дома разъема нет, а вот "прям щас" хочется? Не проблема- на схеме я не просто так нарисовал провода разными цветами! Если взять любой USB 2.0 кабель (например, принтерный USB A-B) и отрезать его, то внутри обнаружатся провода этих цветов. Соединять с модулем согласно цветам и будет счастье. Удалось спаять? Если да, то все шикарно, но в кондиционер модуль втыкать пока не надо, а надо модуль подключить к ПК кабелем с разъемом MicroUSB. Пора заняться программным обеспечением.
Программировай!
Итак, модуль программируется через ESPHome - удивительно удобное приспособление для программирования различных модулей для нативной работы с Home Assistant через его API. Подробную информацию можно найти на официальном сайте ESPHome, увы, только на английском. К счастью, яндекс в помощь- в русскоязычном сегменте интернета достаточно статей об этом инструменте. О способах установки есть документация на английском, но и на русском можно найти.
Для тех, кому не хочется залезать куда-то глубоко в дебри кода, у кого есть дела поважнее и поинтереснее разглядывания буковок и циферок на экране я сделал простой путь: подгружаемые файлы. Старт предельно простой, все что нужно- простая конфигурация, к примеру, подсмотрим вариант одного из первых испытателей компонента. Кстати, у него вообще можно подглядеть процесс чего-куда, но вернемся к конфигурации. Увы, конфигурация будет картинкой, потому как встроенный редактор дзена ультра-убогий. Но можно скачать образец конфигурации с моего гита. Итак:
Все, больше ничего не нужно! Все остальные файлы с настройками, скриптами и сам компонент кондиционера ESPHome подтянет из интернета самостоятельно!
Как видно, конфигурация состоит из 3 частей: 1 часть отвечает за переменные, в которых хранятся важные личные настройки, во 2 части указано, какие файлы тащить из интернета, а 3 отвечает за выбор модуля, на котором сделан адаптер для кондиционера.
Для быстрого старта 2 часть трогать не надо, да и нет необходимости в знаниях о 2 части, хотя, если любопытно, об этом написано в официальной документации к ESPHome.
Так же не нужно трогать и 3 часть, если в качестве модуля был выбран рекомендованный мной ESP-WROOM-32 DevKit v1.
А вот о первой части поговорим подробно. Итак, тут 11 переменных, и почти все они нужны и важны.
device_name - Уникальное имя этой конфигурации, стоит использовать только латинские буквы и цифры, никаких пробелов или спецсимволов, например, "tclac". Если будет несколько кондиционеров и, соответственно, модулей кондиционера, то device_name надо задавать отличными друг от друга, например, добавляя цифры: tclac1, tclac2, tclac3 и т.д.
humanly_name - Человеческое имя для кондиционера, это имя будет отображаться в интерфейсе, конкретнее- в карточке кондиционера.
wifi_ssid - Имя точки доступа WiFi Вашей сети. Данные могут храниться в файле "secret" в ESPHome, тогда нужно указать что-то вроде !secret wifi_ssid, иначе просто указывается имя.
wifi_password - Пароль к точке доступа WiFi Вашей сети. Данные могут храниться в файле "secret" в ESPHome, тогда нужно указать нечто типа !secret wifi_password, иначе просто указывается пароль.
recovery_pass - Пароль для точки доступа для восстановления, если модуль не сможет подколючиться к Вашей сети, то он сам создаст точку доступа, к которой можно будет подключиться для, например, прошивки. Имя точки доступа будет: "{device_name} Fallback Hotspot"
ota_pass - Пароль для обновления по воздуху, для возможности обновлять модуль из ESPHome прямо через WiFi. Этот пароль придумывается один раз и потом используется всегда на автомате. Как придумать? Просто возьмите образец и замените любую букву или цифру. Только запишите куда-нибудь! Забудете- придется прошивать через кабель.
api_key - Ключ подключения к Home Assistant API, новый ключ можно получить здесь: https://esphome.io/components/api.html Это ключ шифрования трафика между модулем и сервером Home Assistant, помнить его не обязательно, в будущем, при необходимости, всегда можно будет подсмотреть его в ESPHome.
uart_rx - Вывод модуля, к которому подключен сигнал RX порта UART. В нашем случае быстрого старта это GPIO3
uart_tx - Вывод модуля, к которому подключен сигнал TX порта UART. В нашем случае быстрого старта это GPIO1
receive_led и transmit_led - Выводы модуля для подключения сигнальных светодиодов, в нашем случае оно, вроде как, и не надо, потому и там и там просто указано GPIO2
На самом деле, если заглянуть ко мне в репозиторий по адресу https://github.com/I-am-nightingale/tclac, то можно там найти файл TCL-Conditioner.yaml, в котором есть подробные комментарии того, что где и как надо менять. Да и инструкция там есть, но об этом поговорим во 2 части.
Теперь, когда мы знаем что и как надо делать, пора добавить конфигурацию в ESPHome. Начнем с того, что нам нужен Chrome-образный браузер, например, Chromium, Google Chrome, Яндекс.Браузер или даже Microsoft Edge. Заходим через него в свой web- интерфейс сервера Home Assistant и жмем сюда:
Тут добавляем новое устройство:
Дальше жмем CONTINUE, вводим имя кондиционера без кавычек и спецсимволов, например, tclac11 (а почему бы нет?), потом выбираем "ESP32" и в последнем окне жмем "Skip" , и в результате получаем новое устройство, под которым надо нажать Edit:
Откроется редактор, где все стираем и вставляем указанную выше конфигурацию:
Кстати, не забудьте отредактировать переменные, согласно описанию, которое я привел выше!
Ага, конфигурация составлена, надо скомпилировать ее в живую прошивку. Как? А вот так: жмем сначала 1 кнопку, потом 2:
Далее жмем на "Ручную загрузку":
После этого начнется процесс компиляции прошивки. Трогать ничего не нужно до тех пор, пока не вылезет вот такое окно, где нужно будет выбрать современный формат прошивки:
И в итоге файл прошивки будет скачан и сохранен, вероятнее всего, в папке "Загрузки":
Не потеряйте его, он скоро нам понадобится.
Кройка и шитье
Что-ж, пора прошивать. Так как на нашем модуле есть USB разъем, то многого знать не нужно, по сути уже все есть, так что подключив модуль к ПК, надо будет лишь установить драйвер на чип USB-UART моста. Обычно все случается автоматически и ОС находит все сама. Далее, через диспетчер устройств надо будет найти этот мост и узнать номер виртуального COM-порта.
В моем случае это COM3, это великое знание нам пригодится. Теперь ломимся на сайт https://web.esphome.io/ через тот самый Chrome-образный браузер. Не через фаерфокс, не через оперу, именно через то, что я перечислил выше, иначе работать не будет. В моем случае будет Microsoft Edge, заходим на сайт и жмем сюда:
В общем- жать надо на "CONNECT", но это, наверное, уже понятно по стрелке, нарисованной прямо на сайте :)
Далее вылезет окно, в котором надо будет выбрать тот самый COM-порт, номер которого мы узнали раньше:
Появится вот такое вот окно, в котором нужно сразу и без зазрения совести жать "Install":
Откроется окно выбора файла. Помните, мы прошивку компилировали, потом она скачалась? Не потеряли? Тогда сначала жать на "Выбор файла", в открывшемся окне выбрать файл прошивки, а после жать на "Install":
Остальное все сделается само, надо только ждать:
После появления окна конгратуляций- все, с прошивкой разобрались!
Пробуем победу на вкус
Отключаем модуль от ПК, втыкаем в кондиционер и ждем загрузки. Обычно, все добавляется само, но иногда такой фокус не проходит и тогда в веб-интерфейсе Home Assistant в разделе "Уведомления" появляется новое уведомление, в котором будет сказано, что определилось новое устройство и надо чек ит аут. Жмем туда, дальше жмем настроить и вот тогда все само уже настроится до конца. Как узнать что точно до конца? В разделе "Обзор" появится вот такая карточка:
Это сокращенная версия полной карточки управления, которую можно вызвать, если нажать на 3 точки в правом верхнем углу карточки, жмякаем- вылезает это:
Почти то же самое, только больше, а поэтому именно тут остановимся поподробнее.
1 - Текущая температура воздуха в ближайшем окружении от внутреннего блока кондиционера, со встроенного датчика
2 - Состояние кондиционера прямо сейчас
3 - Колесо задания температуры, мелкий кружок- текущая температура, большой кружок- уставка температуры, большой кружок можно крутить по дуге, удобно. А можно под дугой жать кнопки "-" и "+"
4 - Уставка температуры, кондиционер будет стремиться привести показания текущей температуры именно к этой уставке
5 - Режим работы кондиционера, традиционно: выключено, автоматический, обогрев, охлаждение, осушение, вентиляция
6 - Скорость вентилятора, от малой к большей: тихий, низкий, среднее, средний, высокий, фокус, диффузный. Это не моя опечатка, это такой перевод и уже давно. Просто примите такой шакальный набор скоростей как данность..
7 - Предустановка кондиционера: Комфорт (ионизатор), Эко (режим сбережения энергии) и Сон (оптимизация работы во время сна). Увы, можно включать только 1 режим за раз, таков путь.
8 - Режим качания шторок: выключено, оба, вертикально, горизонтально
9 - Дополнительное меню.
Почему вообще я написал про дополнительное меню? Оно тут при чем? А при том, что если нажать на эти 3 точки и выбрать "Устройство", то откроются дополнительные настройки кондиционера:
Слева- краткая сводка по устройству, автоматизациям, сценам и скриптам, в которых кондиционер учавствует. Справа- история событий. А в центре самое ценное- настройки:
- Beeper - переключатель работы пищалки, подтверждающей команды. Действует только для Home Assistant, с пульта будет пищать и дальше
- Display - переключатель работы индикатора уставки температуры на корпусе внутреннего блока. На ночь можно выключить, но работает коварно, об этом ниже!
- Display on module - светодиоды индикации обмена данными на модуле WiFi. Если бесят мигающие огоньки- выключить. Конечно, если Вы их изначально включали в конфигурации модуля.
- Horizontal fixing - фиксация горизонтальных заслонок в указанном положении
- Horizontal swing - режим качания горизонтальных заслонок
- Vertical fixing - фиксация вертикальной заслонки в указанном положении
- Vertical swing - режим качания вертикальной заслонки
- Force config - принудительное применение настроек сразу после изменения
Последнее надо пояснить: изначально было сделано так, что настройки не применяются сразу- они задействуются только при следующей подаче команды с карточки кондиционера на дашборде. Это связано с тем, что эти настройки- это, по сути, дописанные к компоненту кондиционера конфиги на YAML, с программным кодом на LAMBDA, они не имеют обратной связи и не считываются из данных, отправляемых кондиционером. То есть кондиционер никогда не знает, какую настройку может отправить ему модуль, в связи с чем при автоматизациях могут возникнуть непредвиденные моменты, которые решаются именно так, как изначально решил их я- в любых ситуациях отправлять то, что настроено пользователем.
Но чуть-чуть повозившись, я смог добавить переключатель Force config специально для тех, кому надо чтобы настройки применялись сразу, здесь и сейчас- это действительно удобно при ручном управлении. Поэтому, в зависимости от личных желаний, можно переключать эту настройку.
Теперь разберемся с заслонками. В общем-то, все как и было до этого: заслонки всегда находятся в одном из 2 режимов: либо в режиме фиксации, либо в режиме качания. Именно это и выбирается в карточке кондиционера в разделе "Режим качания"- тут заслонки либо качаются, либо зафиксированы. К этой логике надо привыкнуть, ведь с пульта управляться заслонками куда проще, но увы- у Home Assistant управление организованно именно вот так, и создатели так и не поменяли его, хотя разговоры и были... Собственно, в разделе дополнительных настроек кондиционера есть 4 пункта, которые позволяют выбрать режимы фиксации (Horizontal fixing и Vertical fixing) и режимы качания (Horizontal swing и Vertical swing), а выбирая в карточке кондиционера "Режим качания", заслонки переключаются между одним и другим. Просто поэкспериментируйте и быстро все поймете.
Для примера, для указанных выше настроек, при выборе в карточке "Режим качания" пункт по умолчанию "Выключено" вертикальная заслонка останется в последнем заданном положении (каким бы оно ни было), и горизонтальные сделают то же самое. Если в "Режим качания" выбрать "Вертикально", то вертикальная заслонка будет качаться вверх-вниз на всю высоту, а горизонтальная так и останется на прежнем месте. Если же теперь в "Режим качания" выбрать "Выключено", то вертикальная заслонка замрет в том положении, в котором она была на момент выключения качания..
Как же сделать так, чтобы при отключении качания заслонка замирала в каком-то конкретном положении, а не замирала где была? Надо в Horizontal fixing или Vertical fixing выбрать конкретное положение из доступных.
Теперь что касается индикатора уставки температуры- чудесный мозг кондиционера настроен работать так, что если выключить индикатор уставки температуры, то кондиционер будет принудительно переключаться в режим "Авто", при этом сохраняя возможность изменять уставку температуры, скорость вентилятора и режимы шторок. И только так- победить это не возможно, то же самое происходит и при выключении индикатора с пульта, кондиционер тоже переводится в режим "Авто". Надо было брать кондей за 40 кусков :)
В качестве эпилога
В общем, всеми правдами и неправдами с быстрым стартом разобрались, кондей начал слушаться Home Assistant'а и жизнь прекрасна. Можно полноценно управлять кондиционером, составлять различные автоматизации (в том числе и с алисой) и вообще радоваться и хвалиться диковинкой перед гостями. Да, я так и делаю, обожаю, как люди офигивают. Но, возможно, кому-то захочется копнуть поглубже, повнимательнее изучить программную составляющую, чтобы сделать что-то свое, особенное? Об этом я расскажу во 2 и 3 частях статьи.
Классная новость: теперь на Дзене есть донаты и меня можно поддержать нативно, без переходов куда-либо еще! Просто красота!
Накидать денежек для поддержки, на которые я закуплю всякого для новых поделок можно авторизовавшись на дзене и далее либо кнопкой "Поддержать автора" в конце статьи, либо щелкнув сюда . Для тех же, кто не хочет авторизовываться, как и раньше работает старая форма для донатов.
Скоро увидимся снова, пока!