Можно долго рассуждать о том, является фирма DNS хорошей или плохой, но по крайней мере могу сказать точно, что иногда ей удается совершать абсолютно неповторимые финты ушами. В этот раз такое произошло с кондиционерами завода TCL, а именно моделями TAC-07CHSA/TPG, TAC-09CHSA/TPG и TAC-12CHSA/TPG. Что же в них такого интересного? Цена, конечно, и, при этом, удивительно высокое качество комплектующих. Точнее можно узнать у кондиционерщиков или, например, на профильных каналах youtube, где я пересмотрел десяток роликов со сравнениями этих моделей с другими, более дорогими но, на удивление, менее качественными! В общем, под переезд я решил приобрести себе такой, выбор пал на модель TAC-07CHSA/TPG.
Надо еще раз похвалить DNS- отхватил я это добро за 16000 рублей (прописью: шестнадцать тысяч!), ну а те же, кто успел открыть глаза побыстрее- еще дешевле. Опять же, не буду расписывать про него подробности, скажу просто- кондей, пусть и не инвертор, шикарен. Да еще и WiFi!! "Вот!",- думал я: "Щас я его и подцеплю к моему Home Assistant!". Ага, держи карман шире...
Минуточку внимания!
Произошли определенные изменения во внутреннем устройстве Home Assistant, из-за которых указанный ниже способ, вероятнее всего, уже не работает. Разработчики ESPHome постарались, как сумели. Все что написано ниже остается просто как архив, "на память"! Я разработал внешний компонент под наши кондиционеры, который теперь используется вместо способа, указанного ниже, статья здесь: https://dzen.ru/a/ZmdoyUNswXWnulhg, развернутые инструкции тоже не за горами.
Поддержите разработчика, не стойте в стороне в этот решающий момент, когда пиво уже на исходе!
Пришла беда...
Мир уже сталкивался с кондиционерами TCL, и не раз, ведь этот завод производит кондиционеры для марок Ballu, Hyundai и еще кучи других. Да, TCL, как марка, имеет свое ПО, которое раньше имело название TFIAC и, собственно, одноименную интеграцию для Home Assistant. Однако, некоторое время назад TCL сменила ПО, которое теперь имеет название TCL Home и, как-бы, теперь является центром техники TCL. Вполне возможно, мысль кажется здравой, вот только новые кондиционеры теперь работают только через нее и никак иначе, шифруют свой трафик, а припрятанные под верхней крышкой внутреннего блока кондиционера WiFi модули сменились с привычных Broadcom на что-то совершенно непонятное.
Ломать я его не решился- черт знает, как отреагирует гарантийная служба, если "вдруг что", а модуль будет раздолбан. Бегло прошерстив информацию в интернете я пришел к выводу, что через новое приложение кондиционер никак не удастся подключить к Home Assistant, прямо сейчас есть лишь малейшие попытки разобрать, как вообще это все работает, но если WiFi модуль и само приложение использует noise encryption, то вряд ли это будет возможно в обозримом будущем вообще. Но про модуль стало яснее- это такой же модуль, как и на любом другом кондиционере: да, у него разъем USB Type A, но это вовсе не USB, а последовательный интерфейс (UART иначе говоря), просто притянутый за уши к 5 вольтам. Есть даже какие-то проекты универсальных модулей, например, от широко известного в узких кругах Сергея Дуданова.
Руками делать не хотелось вообще- переезд все еще болевым эхом отзывался в каждой мышце и в каждом суставе тела, потому решено было искать легкие пути. И они таки нашлись: как минимум, в городе продавались универсальные модули Hommyn HDN/WFN-02-01, отличное решение! Ну, как тогда казалось...
Модуль сделан красиво и приятно, к тому же имеет свое чудо-ПО с поддержкой огромного числа кондиционеров, которое меня вообще не интересует. Главное- начинка, а именно SoC ESP32-C3. Превосходно! Ну, прошить я его мог в любой момент, а испытать хотелось побыстрее. Из кондиционера извлечен родной модуль, воткнут новый и... и модуль не включился, а кондиционер издал печальный писк...
Работа по железу
Печальный писк- странная реакция кондиционера на модуль, который даже не включился. Кондей сдох? Нет, с пульта работает. Воткнул родной модуль- работает. Ладно, будем ломать новый универсальный модуль. Сказано- сделано!
Ничего особо примечательного, на верхней стороне стабилизаторы питания, на нижней стороне распаян SoC, преобразователь уровней DD3 и переключатели DD1 и DD2. Как работают переключатели? По идее просто: в разных кондиционерах сигналы RX и TX могут быть подведены по-разному, этот переключатель просто перекидывает их местами, что резко увеличивает универсальность этого модуля. Увы, они дико грелись и не пропускали через себя сигнал- я пробовал подавать питание на модуль с блока питания, замыкать RX на TX, но эха в тестовой прошивке не было. Как так-то? Почему они сгорели? И этот печальный писк еще.. Похоже, что питание подается не так? Ага, именно это и происходит.
Модуль общается с платой кондиционера через небольшой шнурок, на одном из которых разъем USB мама, а с другой- рядный 4-хконтактный с защелкой, втыкаемый в разъем CN16 на плате кондиционера:
Крупным планом втычной разъем:
А вот и разъем на плате кондиционера:
Наметанный глаз любителя паять сразу заметил проблему: провода на разъеме стандартных, для шнурков USB, цветов, а вот вот распиновка ей не соответствует.. Прозвонив, стало понятно, что так оно и есть- распайка не соответствует, и там где у USB разъема должен быть +5 вольт теперь RXD, на Data- сидит TXD, на Data+ масса, а вместо массы +5 вольт. Жестокая подстава от TCL, видимо, они очень хотели, чтобы пользователи не могли просто так воспользоваться сторонними модулями. Так вот и сгорели переключатели. ШТОШ, исправим распайку:
Ладно, мне переключатели особо и не нужны, сносим нафиг и замкнем линии напрямую. Петля при замыкании на разъеме заработала, ура! Теперь же все пойдет как надо?
Не заработало, вообще. От кондиционера не было ВООБЩЕ никаких данных, RX и TX не перепутаны, сигнал дрыгается, вижу на осциллографе, но что не так-то? А не так то, что перепутанные контакты- это не все подлоги от TCL, есть еще интереснее! Тут последовательная шина с очень специфическим напряжением подтяжки- 4 вольта на передачу и 3 вольта на прием, когда стандарт либо 5 вольт, либо 3.3 вольта. Впрочем, это решается использованием цепей на 3.3 вольта, толерантных к 5 вольтам. К большому счастью, у ESP32-C3 цепи UART как раз терпят 5 вольт, так что кидаем перемычки от ESP32 прямо к USB разъему, в обход преобразователя уровней и выпаянных переключателей:
Эта жуткая работа паяльником с жалом, как гвоздь 200-ка принесла плоды- побежали байтики. Дело было за софтом, а конкретнее- за протоколом общения модуля с кондиционером.
Попытки оседлать протокол были сделаны, например, htmltiger, а на основе его работы уже xaxexa. Да, протоколы не совпадают с тем, что было раньше и лишь отдаленно похожи, например, на Midea. И их попытки разобрать протокол оказались неплохими, но увы, обе работы демонстрируют неполноценность, в частности, управление кондиционером проходит, в целом, верно, однако не работает управление горизонтальными шторками, которые при любой команде просто уходят до упора влево, отсутствуют полезные функции и т.п. Вроде как, реализован и пакет опроса состояния кондиционера и пакет команд, но кривости оставались. Я на скорую руку подкорректировал прошивку под модуль, залил ее и принялся играться. И это, надо сказать, быстро надоело- писк от команд преследовал как маньяк-убийца, а горизонтальные шторки, клинящие в левом положении при любой команде, направляли поток свежего мороза прямо на кровать. Отстой, надо расчехлять анализатор и копать. Сказано- сделано:
Надо тут подчеркнуть коварство TCL: У этих кондиционеров 3 вида пакетов от модуля к кондиционеру: 8 байт - опрос состояния, 31 байт- подтверждение основных режимов и 38 байт- командный пакет! Причем командный пакет передается только 1 раз, сразу после выбора режима в приложении в смартфоне, а дальше чередуются пакеты опроса состояния и подтверждение основных команд! Таким образом, если по какой-то причине пропустить мимо командный пакет- все, будет казаться, что пакет подтверждения из 31 байта и есть тот самый, ведь в нем есть почти все! Кроме положения заслонок и области их качания, а, может, и еще чего-то. И самое главное, о командном пакете ведь и не будешь задумываться, ведь обычно то пакетов только 2- пакет опроса и командный! Только в командном есть все, что надо, вот где собака порылась!
Программировай!
В общем, без шаманства кода тут не обойтись. А, надо сказать, что программист я столь же хорош, как и фотограф, именно поэтому нормальных фотографий я не делал никогда. Все это "Вайтивайти" виновато, будь оно не ладно. Одно дело писать конфиги на yaml, но здесь вам не тут! Впрочем ладно, мы всегда можем уметь, в данном случае, хоть что-то.
Вот ссылка на мой проект в гитфлик, где лежат исходники добра. Для работы потребуется Home Assistant старше 2021.8 (а лучше поновее) и установленный и обновленный ESPHome.
Как установить:
- Копируйте файлы в папку с проектами ESPHome:
HAOS: /config/esphome
HASS: ~/.homeassistant/esphome
docker: сами разбирайтесь что натворили - Заходите в ESPHome и под новой карточкой с файлом Conditioner.yaml жмите EDIT
- Если настроен файл secret, где есть SSID и пароль на wifi, то можно ничего не трогать, иначе меняйте поля ssid: и password: в разделе wifi: на то, что там в реальности на роутере
- По завершении- жать сверху справа "SAVE" и "INSTALL". Как именно сделать правильный INSTALL можно почитать в этих самых интернетах.
Например, к своему модулю я напрямую подпаялся к контактам для прошивки:
Очень бодрит, кстати, ведь при неловком движении есть шанс вырвать контактные пятаки с корнем :) А это все запихнул в программатор типа этого:
Итак, после перепиновки провода в кондиционере, доработки модуля паяльником и прошивки можно модуль собирать взад и засовывать в кондиционер назад. После присоединения к точке доступа и получения доступа к API Home Assistant, в логах сразу будет виден обмен данными, а сам модуль начнет помигивать красным и зеленым цветом. Новое устройство автоматически обнаружится в штатном режиме и настроится, как любое другое устройство в ESPHome- почти автоматом. На дашборде появится вот такая штука:
Новые фокусы
Что-ж, все работает, пора проверить, что тут есть. Если нажать на карточке кондиционера на три вертикальные точки, то выползет меню:
- Сейчас - текущая температура с датчика внутреннего блока кондиционера
- Целевая температура - уставка температуры, меняется кнопками справа: вверх и вниз
- Режим работы - режим работы кондиционера: автоматический, обогрев, охлаждение, осушение, вентиляция, выключено.
- Режим вентиляции - скорость вентилятора, от малой к большей: тихий, низкий, среднее, средний, высокий, фокус, диффузный. Это не опечатка, это такой перевод.
- Режим качания - режим качания шторок: выключено, оба, вертикально, горизонтально.
Тут, думаю, все понятно, ровно как на пульте. Чего тут нет- того тут нет. Шутка в том, что Home Assistant в своем модуле Climate имеет довольно ограниченный функционал, увы. Так, например, кондиционер имеет возможность качать шторки не на весь размах, а только в узкой области, или вообще может зафиксировать шторки в заданном положении, но Home Assistant не поддерживает такие функции в карточке. Потому я их вывел в настройки. Найти их можно так:
Настройки - Устройства и службы - ESPHome - X устройств - TCL Air Conditioner
Среди всего того, что будет там понаписано найдутся и настройки:
Что здесь интересного:
- Beep - переключатель работы пищалки, подтверждающей команды. Действует только для Home Assistant, с пульта будет пищать и дальше
- Data LEDs - светодиоды индикации обмена данными на модуле WiFi. Если бесят мигающие огоньки- выключить
- Display - переключатель работы индикатора уставки температуры на корпусе внутреннего блока. На ночь можно выключить, но работает коварно, об этом ниже!
- Horizontal fixing - фиксация горизонтальных заслонок в указанном положении
- Horizontal swing - режим качания горизонтальных заслонок
- Vertical fixing - фиксация вертикальной заслонки в указанном положении
- Vertical swing - режим качания вертикальной заслонки
Первое, что надо понять про этот кондиционер, так это то, что настройки не применяются сразу- они задействуются только при следующей подаче команды с карточки кондиционера на дашборде. Возможно, следует сделать так, чтобы настройки применялись сразу, но именно текущий вариант мне показался удобнее. Могу ошибаться- у меня не было возможности собрать обратную связь от пользователей, возможно, этот момент стоит пересмотреть.
Теперь разберемся с заслонками. Заслонки всегда находятся в одном из 2 режимов: либо в режиме фиксации, либо в режиме качания. Именно это и выбирается в карточке кондиционера на дашборде в разделе "Режим качания"- тут заслонки либо качаются, либо зафиксированы. К этой логике надо привыкнуть, ведь с пульта управляться заслонками куда проще, но увы- Home Assistant поддерживает лишь то, что есть, потому так. Собственно, последние 4 пункта в разделе настроек кондиционера позволяют выбрать режимы фиксации (Horizontal fixing и Vertical fixing) и режимы качания (Horizontal swing и Vertical swing) и выбирая "Режим качания", заслонки переключаются между одним и другим.
Для примера, при настройках, как на скриншоте выше, при выборе в "Режим качания" пункт по умолчанию "Выключено" вертикальная заслонка поднимется в верхнюю половину, а горизонтальная- в правую половину. Если в "Режим качания" выбрать "Вертикально", то вертикальная заслонка будет качаться вверх-вниз на всю высоту, а горизонтальная так и останется в правой половине. Если же теперь в "Режим качания" выбрать "Выключено", то вертикальная заслонка вернется в верхнюю половину.
Как же сделать так, чтобы при отключении качания заслонка замирала на месте, а не фиксировалась в каком-то положении? Надо в Horizontal fixing или Vertical fixing выбрать режим "Последнее положение".
Теперь что касается индикатора уставки температуры- чудесный мозг кондиционера настроен работать так, что если выключить индикатора уставки температуры, то при подаче любой команды кондиционер будет принудительно переключаться в режим "Авто", при этом сохраняя возможность изменять уставку температуры, скорость вентилятора и режимы шторок. И только так- можно ли победить это я, увы, не знаю, потому как то же самое происходит и при выключении индикатора с пульта, кондиционер тоже переводится в режим "Авто".
Заключение
Хоть кондиционер, в целом, побежден, я все же понимаю, что потребуется еще солидное количество доработок, чтобы все это стало жизнеспособным и симпатичным. И, к тому же, простым, наверное. Сейчас очевидно, что простой такую установку не назовешь- шаманство над кондиционером, шаманство над модулем, шаманство над файлами, шаманство с прошивкой- жесть. Конечно, для опытного любителя Home Assistant это все фигня, а не шаманство, но для тех, кто не хочет копать глубоко и имеет куда более интересные варианты времяпрепровождения это все вполне может оказаться душниловом. Увы, надо работать дальше.
А потому я жду обратной связи от всех, кому моя работа может оказаться полезной. Не ленитесь и пишите все как есть- без обратной связи я как без ушей.
Так же буду рад материальной поддержке- после переезда все мысли заняты ремонтом квартиры, обстановкой, ипотекой и необходимостью пахать по-стахановски для заработка денег на все это, потому каждый донат расслабляет меня и дает возможность заниматься любимым и, надеюсь, полезным для общества делом. Я же, со своей стороны, постараюсь не задерживать с публикациями и делать еще более крутые вещи.
Для поддержки в это не простое время теперь есть ссылка на форму для доната, но кидайте донаты только добровольно и не в ущерб себе любимому!