В очередной раз поймав себя на подобной мысли, решил:
- Все в эти выходные собираю девайс для удаленного управления кондиционером.
Разработкой такого устройства я занимался уже пару лет назад. Суть его работы заключалась в получении управляющих команд от центрального устройства протоколом ModBus RTU и передача соответствующих ИК команд на кондиционер, т.е типа такой пульт ДУ, прикрученный к серверу умного дома. И проектировал я его на самом тривиальном PIC микроконтроллере PIC12F629, в котором даже последовательный интерфейс для организации связи по RS485 , был организован программно. Кому интересно проект описан вот тут. Но от его внедрения меня удерживало две вещи:
- Не хочется пользовать программный последовательный интерфейс. (хоть он и показал себя вполне надежным, но без кварцевой стабилизации тактового генератора МК мне казалось это не постоянным).
- Еще более сдерживающим фактором было необходимость располагать устройство где то на подоконнике, где имелись сигнальные провода линии RS485 и откуда луч ИК светодиода должен был из за штор достигать приемника кондиционера, или тянуть витую пару от угла подоконника до кондиционера, чего сделать незаметно было никак нельзя.
WeMoc D1 mini у меня есть. Хорошо жену не послушал, и старый телек еще не унес на мусорку. Колупнул из него ИК приемник, и какой то транзистор. Осталось ИК светодиод найти.... Ладно на пробу воткну обычный за одно буду видеть, что посылка формируется, потом добегу до радиомагазина, прикуплю парочку ИК светодиодов.
На СИ я программировать не умею, но научится хочу и даже уже изучаю кое какие материалы. И Visual Studio Code с установленной кроссплатформенной IDE PlatformIO у меня уже давно развернуты на домашнем ПК. Поэтому Скопировать проект и сгенерировать бинарный файл для заливки особого труда не составило. Подключаем USB кабель заливаем прошивку и смотрим, что получилось.
Как обычно, при использовании библиотеки WiFiManager, при первом запуске создается точка доступа с именем ESPхххх без пароля. С мобильного телефона подключаемся к ней и заходим на веб страничку http://192.168.4.1/, где вносим настройки подключения устройства к WiFi сети своего роутера. После перезагрузки, устройство подключается к нашей сети, и по DHCP получает IP адрес.
По этому адресу мы можем зайти на веб интерфейс нашего ИК приемопередатчика. И что мы тут видим?
Всего 5 страничек. Про третью страничку с примерами HTTP запросов я особо писать не буду. Смотрите пробуйте разбирайтесь. Кстати рекомендую внимательно прочесть комментарии в исходнике IRMQTTServer.ino, там практически прописана полная инструкция по настройке и использованию нашего устройства. На пятой Административной странице собраны полезные служебные функции по перенастройки пинов, перепрошивке, сбросу устройства и полному сбросу настроек включая WiFi Скриншоты самых интересных страничек, смотрите ниже. (лучше окрывать в отдельной вкладке)
Мне не повезло, моего кондиционера в списке полностью поддерживаемых нет. Ну и ладно будет повод порыться в коде и поучится кодить. Но элементарный переключатель с функцией включить кондиционер на охлаждение до уровня 25 градусов и выключить кондиционер, я сделал. Для этого я считал ИК команду включения кондиционера с соответствующей уставкой температуры и ИК команду выключения и в раздел описания переключателей конфигуратора вписал такие строки:
switch: - platform: mqtt name: Кондиционер icon: mdi:power command_topic: "ir_server/send" payload_on: "10,8800B4F,28" payload_off: "10,88C0051,28" state_topic: "ir_server/send"
Дальше остается из макета сделать прототип.
У меня для этого есть универсальные платки для создания различных устройств на ESP8266. Кому интересно проект находится вот тут. Ставим туда миниатюрный импульсный блок питания, запаиваем ESP12? требуемую рассыпуху. Выводим на проводах ИК Приемник и инфракрасные светодиоды, Я впаял парочку оди будет светить внутри корпуса, другой наружу. Это для того что бы еще и телевизором попробовать по рулить на досуге.
Еще на будущее прицепил оптопару, для подключения параллельно к светодиоду индикатора включения кондиционера, что бы иметь обратную связь и знать реальное состояние. Ну и для этих же целей подключил цифровой термодатчик DS18B20. По его показаниям, тоже можно судить как работает кондиционер. Все шьем, настраиваем и вставляем платку внутрь кондиционера. Подключаем электропитание, и готово. Можно идти на работу не особо парясь о том включил я таймер на кондиционере или нет. В случае чего включу удаленно!
Обновление прошивки
Прошла зима. Коронавирус заставляет сидеть дома. На улице становится жарко, соответственно дома тоже. Самое время проверить и запустить кондиционер.
Выглянем на улицу, придирчиво осмотрим внешний блок. Ага солнышком подъело утеплители на трубках теплоносителя. Надо будет обращаться к помощи специалистов для замены. И следующий раз защищать чем то от солнца. Трубка сброса конденсата как то не туда загнута. Поправим шваброй.
Осмотрим внутренний блок. Тут все в порядке, фильтры помыты еще с осени. Протрем, дунем для успокоения совести... И включаем... Ура все заработало! А как себя чувствует самодельное удаленное управление? - Ух ты! Тоже работает! В смысле включается выключается. Надо бы заглянуть к автору прошивки, может чего нового полезного появилось?
Качаем свежий пакет с гитхаба, Компилируем новый бинарник. Благо прошивка позволяет обновление по ОТА, загружаем его в ЕСП. Смотрим чего нового?
На первый взгляд ничего... О! В административном разделе появилась кнопка "Send MQTT Discovery" Отправить сообщение об обнаружении Climate MQTT в Home Assistant. А может и мой кондиционер появился? Да, действительно в списке поддерживаемых кондиционеров появился мой "лыжик"! Попробуем его прикрутить в Home Assistant. Из описательной части в исходнике копируем предложенный кусочек кода в configuration.yaml (хотя нажатие на предложенную кнопку добавляет в список Current entities - climate.ir_server_aircon) После перезагрузки мы увидим в списке Current entities - climate.aircon.
# Управление кондиционером ИК MQTT climate: platform: mqtt name: Aircon modes: - "off" - "cool" - "auto" - "dry" - "heat" - "fan_only" fan_modes: - "auto" - "low" - "medium" - "high" swing_modes: - "off" - "auto" power_command_topic: "ir_server/ac/cmnd/power" mode_command_topic: "ir_server/ac/cmnd/mode" mode_state_topic: "ir_server/ac/stat/mode" temperature_command_topic: "ir_server/ac/cmnd/temp" temperature_state_topic: "ir_server/ac/stat/temp" fan_mode_command_topic: "ir_server/ac/cmnd/fanspeed" fan_mode_state_topic: "ir_server/ac/stat/fanspeed" swing_mode_command_topic: "ir_server/ac/cmnd/swingv" swing_mode_state_topic: "ir_server/ac/stat/swingv" min_temp: 18 max_temp: 30 temp_step: 1 retain: true
Речь идет о возможности интеграции управления кондиционером в системы управления УД. Само понятно что кондиционер автоматически поддерживает ту температуру которую ему установят. Главное его включить с этими уставками.
Я не расписывал возможность прошивки полной интеграции управления кондиционером в ХА т.к. мой тип кондиционера не поддерживается из коробки с полным функционалом. А те что поддерживаются. Можно управлять не только включением выключением, но и выбирать требуемую температуру, скорость вентилятора, направление потока, итд итп. Подробнее https://github.com/crankyoldgit/IRremoteESP8266/blob/master/examples/IRMQTTServer/IRMQTTServer.ino">в комментариях исходников. Я увы пока это не попробовал. Просто побыстрому прикрутил кондер к к ХА и получил возможность Запускать его удаленно.
Бродлинком или шайбой сяоми можно рулить из ХА с помощью Smart IR не только кондиционером, но и тв, рессивером. Там у них много пультов отсканировано, можно самому сделать скан. Миник недорого стоит.
Про Броадлик слышал. Эта прошивка делает по сути тоже самое. Ей тоже можно рулить любой бытовой техникой. Но вот то, что у броадлинка можно перехватить кондиционеры, утверждать и опровергать не берусь, не пробовал.
Дело в том что у большинства кондиционеров ИК посылка много длиннее, чем у тех же телевизоров (это не касается точно кондиционеров от LG). Даже бывает ИК Посылка может состоять из двух пакетов разной длинны. В ней кроме команды сразу содержится информация о выбранной температуре, скорости вентилятора, режимов работы направления потоком, и установок таймеров. В примере заложен дополнительный алгоритм анализа именно таких сложных пакетов кондиционеров многих брендов. Возможно ли это с
помощью Smart IR не знаю... Хорошо если можно.
У вас кондиционер чем рулится?
У меня бродлинком, мне повезло, у меня посылка из одного пакета. Smart IR работает. Кстати, как ты определяешь что посылка длиннее?
У меня есть все что бы посмотреть на нее физически (Осциллографом) и читая "грабером" прошивки вижу набор шестнадцатеричных символов посылки и вижу что их не 32 бита как у телевизора а 56 или 48 (притаскивал специально с работы пульты от разных кондеев)
Прикольно, что кондиционер LG, что у меня дома - шлет посылки в 24 бита.
Их то я еще пару лет назад вручную "сграбил" и воспроизвел микроконтроллером. И эта прошивка его вычислила без проблем.
Бродлинк отдает 167 байтов в Base64, однако некоторые пользователи моего плагина для Domoticz сталкиваются с проблемами, когда код посылается, но кондиционер молчит.. Вот и хотел покопать где собака порылась, чтобы поправить. Вроде этой длины должно хватить на всех.
Вот как раз может быть вариант двойного пакета. Тут конечно надо бы глубже в принимаемый код заглянуть. Ослика конечно покупать накладно можно https://ru.aliexpress.com/item/32877931876.html?">вот такой анализатор взять. Подключиться к транзистору управления светодиодом пульта и "сграбить" код.
Это да, но у меня нет доступа к устройству пользователя ) а у меня все работает четко.. По коду, который он присылает, последние байты забиты нулями, это вроде как код приходит целым, возможно начало теряется. Но непонятно почему тогда оно теряется, когда хвост в резерве..
167 байтов это в каком виде передавать в RAW? Тогда может и не хватить. Тогда уж можно сокращенней кодировать в
https://irdb.globalcache.com/">GlobalCache
Он в base64, декодируется потом в байты и отправляется в raw. Отправляется все, что пришло с пульта, т.е. он больше не отдает байтов.
Так в RAW то нужно конкретные длительности прописать для 0 и 1 и преамбула может быть своей длительности и пауза после нее у всех брендов разная. те должно быть с точностью до наоборот при чтении.
При приеме - Сначала определяем RAW длительности для 0 и 1 находим старт от преамбулы и далше читаем последовательность, затем преобразуем в код.
При отправке - код преобразуем в RAW последовательность импульсов известной теперь длительности.
У меня такое подозрение, что в грабленный код бродлинк уже сам все прописывает, потом интерпретирует. Иизменение частоты никак не влияет на результат. т.е. он отдает не чистый код, а уже модифицированный для себя. Потому как разные вендеры без проблем залетают.
Тогда кроме кода, должны как то отфиксироваться параметры RAW, тут в прошивке это прописано жестко под каждый бренд.
Да, точно. Прочитал протокол, все это уже зашито в сам пакет.
на сонофф бейсик с прошивкой RC в режиме термостата без проблем реализуется автоматика охлаждения без всяких прочих заумностей.
главное чтобы сплит поддерживал восстановление режима работы после отключения питания 220.
суть в том, что термостат сам отслеживает Т в помещении и включает\выключает кондей по достижению заданного значения. нужно только разово на самом сплите поставить какую-то холодную температуру ;)
Тоже вариант!
А можно просто к сонофу припаять светодиод и на прошивке тасмота рулить им через mqtt
Спасибо большое за статью и наводку на проект этой замечательной прошивки, кажется это лучшее что может быть для кондиционера, т.к. все принимаемые и распознанные команды контроллер отправляет в соответствующие статусные mqtt топики! А это уже почти полноценная обратная связь, т.е. при управлении кондиционером в обход с пульта, имеем отображение установленных режимов и в системе УД. Кстати моего кондиционера (ballu) тоже не было в списке, но когда я "сграбил" первую же кнопку с пульта, увидел что протокол принятой команды "coolix", установил его в настройках и все заработало без проблем. Теперь у меня полноценная интеграция кондиционера в HA.
Вот и славно! Рад быть полезным.