Наступило лето, с ним — жара, а также время включать кондиционеры. А если вы увлекаетесь современными технологиями и умным домом, то управление кондиционерами хочется делать как-то по-умному (или хотя бы по-современному). Ниже — ряд заметок о моей попытке интегрировать погоду в доме с голосовым управлением и кросс-платформенным интерфейсом.
В квартире стоят четыре кондиционера, ими нужно научиться управлять:
Пожалуй, даже не буду рассказывать. Решение от производителя моих кондиционеров предполагало кучу проводов, минимум два дополнительных модуля на каждый блок, и цену порядка $200 на комнату. Плюс проприетарный протокол, древнее приложение, и всё такое. Вычёркиваем.
Примерно $100 на комнату, нативно работает с Google Assistant и IFTTT, красиво выглядит, но всё равно дороговато.
![](https://habrastorage.org/r/w780q1/webt/gw/yk/1c/gwyk1cvd9ukjhx9swiorxomydaw.jpeg)
tado° — аналогично (и ещё дороже).
Универсальные ИК-передатчики, некоторые теоретически поддерживают нужные кондиционеры «из коробки», с грехом пополам интегрируются с Home Assistant, но в целом — так себе решение, хоть и ценник уже гораздо ближе к доступному ($20-35 за комнату, в зависимости от возможностей). Да и приложения на китайском языке (в некоторых случаях) — это не то, к чему я стремился.
![](https://habrastorage.org/r/w780q1/webt/5e/jy/ox/5ejyoxdz-way61igy_qqt1xk1n8.jpeg)
Самый дешёвый и гибкий способ, о котором я и расскажу подробнее.
Тут есть над чем подумать, но в целом нам понадобится:
Тупо берём ESP8266, а для простоты прошивки и обеспечения питанием воспользуемся D1 mini. Управлять системой, очевидно, будем через WiFi.
![](https://habrastorage.org/r/w780q1/webt/lj/ky/l1/ljkyl1s6uubm_thvjuhnj6zggoi.jpeg)
Для прототипа воспользуемся простым ИК-светодиодом, сопротивлением и транзистором, потом подумаем, как это можно улучшить.
С ним веселее, можно задавать целевую температуру, и делать автоматическое включение/выключение. Для начала тупо возьмём DHT22.
![](https://habrastorage.org/r/w780q1/webt/cc/qb/tm/ccqbtm6-pkoe1xnxzetkaj8by98.jpeg)
На него выведем текущее состояние системы (для отладки), а может быть и текущий ip-адрес (вдруг пригодится?).
![](https://habrastorage.org/r/w780q1/webt/br/ha/gd/brhagdvncv5xxv8dos3nk_c9saw.jpeg)
Реализовывать всё будем в Arduino IDE (с которой я никогда до этого не работал), используя открытые библиотеки.
Сильно позже, когда проект уже работал, я перешёл на Visual Studio Code с плагином PlatformIO.
Общаться с Home Assistant будем через MQTT (библиотека PubSubClient), т.к. это открытый протокол, и для него есть специальный компонент.
Конфигурация будет выглядеть, например, как-то так:
Библиотека HeatpumpIR поможет нам отправлять сигналы на кондиционер (модель кондиционера пока захардкодим).
Понадобятся ещё библиотеки для таймера, для работы с датчиком температуры и с экраном, но это уже мелочи. Привычным жестом добавим WiFiManager и ArduinoOTA, чтобы обновлять прошивку через веб-интерфейс, а не USB.
Покупаем на алиэкспрессе случайные компоненты, собираем вместе на бредборде, тестируем идею.
![](https://habrastorage.org/r/w780q1/webt/n2/ve/_3/n2ve_3e4xbgeselooxb_z34j2zq.jpeg)
Понимаем, что:
Но в целом идея работает! В интерфейсе Home Assistant появляется «родной» компонент HVAC, а значит, управление из любой точки мира у нас уже «в кармане». Родная интеграция Home Assistant с Google Assistant добавляет нам голосовые команды и обратную связь: можно у ассистента спросить про температуру в комнате, и он ответит как целевую, так и текущую температуру.
![](https://habrastorage.org/r/w1560/webt/sy/wv/zh/sywvzhrpxflr_8k7izcu-gkwfms.png)
Изменение целевой температуры, скорости обдува и режима кондиционера в веб-интерфейсе тоже на месте (и, главное, работает!).
![](https://habrastorage.org/r/w1560/webt/zv/ly/4k/zvly4k9nokvr_n_x0gc0knfurfk.png)
Поменяем пару компонентов: закажем экранчик поменьше, и чтобы работал через I2C (и библиотеку применим другую).
![](https://habrastorage.org/r/w780q1/webt/9c/ld/zp/9cldzpkypgzfejdxaqujwm17qkq.jpeg)
Также заменим ИК-светодиод на готовый модуль.
![](https://habrastorage.org/r/w780q1/webt/pu/ob/ml/puobml0kneoraufy6fft9x9vt1g.jpeg)
Оказалось, что модули с одним светодиодом (на фото слева) на алиэкспрессе заказывать не стоит: они не содержат транзистора, и одна из ног (VCC) у них, по сути, бутафорская.
А вот если заказать модуль с двумя светодиодами (на фото справа), то тут уже все необходимые компоненты на месте, и подключается такой модуль легко и непринуждённо, и добивает немного дальше.
Также пришло время всё это собрать на своей печатной плате… Это был один из самых сложных моментов для человека, который никогда не проектировал печатные платы, и наверняка я всё сделал неправильно.
![](https://habrastorage.org/r/w1560/webt/z3/ea/sc/z3eascuagsayu7zqhb7_shrp0ia.png)
Для проектирования я использовал EasyEDA, готовую продукцию заказывал на OSHPark (опять же, наверняка можно было найти более дешёвый вариант), и в результате получил примерно такое:
![](https://habrastorage.org/r/w780q1/webt/rb/3l/iv/rb3liv9-vm-pnsaueafbpendiui.jpeg)
Кнопка была добавлена в последний момент, а место для неё нашлось совершенно случайно. Оказалось, что с кнопкой всё немного веселее, можно не держать экран включенным всё время (что для OLED вредно), а показывать состояние по нажатию.
Что ж, уже неплохо, осталось добавить корпус. Для этого запускаем Blender, делаем кучку параллелепипедов, применяем ряд булевских операций…
![](https://habrastorage.org/r/w1560/webt/fl/ig/h_/fligh_cx6xgegg5lrsoydl2azji.png)
И отправляем на 3D-принтер.
![](https://habrastorage.org/r/w780q1/webt/au/b8/ck/aub8ck2fywfbds1ytgiwbc5ia6s.jpeg)
Итого, получилось дёшево (меньше $10 за экземпляр), гибко (будет работать с почти любым кондиционером), легко интегрируется, управляется голосом и через веб, стабильно добивает с пяти метров. В общем, примерно то, чего я и хотел.
Как бы всё это сделать чуть лучше?..
Есть ряд направлений для улучшения получившегося продукта (точнее, возможностей улучшения, позволивших бы превратить эксперимент в продукт):
Это было славное приключение, и я многое понял. Например, я понял, почему серийные устройства стоят так дорого, и сколько сил нужно было бы приложить, чтобы выйти на один уровень с ними. С другой стороны, очень многое в этом проекте я делал впервые (работа в Arduino IDE, заказ печатных плат, создание модели для 3D-принтера), и получить этот опыт было бесценно. Исходники, впрочем, не покажу: мне за них достаточно стыдно :)
Но своей цели я всё-таки достиг, а дешёвое и гибкое управление кондиционерами оказалось вполне достижимо.
Задача
В квартире стоят четыре кондиционера, ими нужно научиться управлять:
- Из веб-интерфейса (у меня это Home Assistant, крутящийся на отдельном Raspberry Pi, но в идеале хочется простого подключения к любой системе);
- Голосом (Google Assistant подойдёт, потом подумаем об Алисе);
- Скриптами;
- Дёшево...
Исследование рынка
«Родное» решение
Пожалуй, даже не буду рассказывать. Решение от производителя моих кондиционеров предполагало кучу проводов, минимум два дополнительных модуля на каждый блок, и цену порядка $200 на комнату. Плюс проприетарный протокол, древнее приложение, и всё такое. Вычёркиваем.
Sensibo Sky
Примерно $100 на комнату, нативно работает с Google Assistant и IFTTT, красиво выглядит, но всё равно дороговато.
![](https://habrastorage.org/webt/gw/yk/1c/gwyk1cvd9ukjhx9swiorxomydaw.jpeg)
tado° — аналогично (и ещё дороже).
Xiaomi Aqara / Mi Home, Broadlink RM Pro / Mini
Универсальные ИК-передатчики, некоторые теоретически поддерживают нужные кондиционеры «из коробки», с грехом пополам интегрируются с Home Assistant, но в целом — так себе решение, хоть и ценник уже гораздо ближе к доступному ($20-35 за комнату, в зависимости от возможностей). Да и приложения на китайском языке (в некоторых случаях) — это не то, к чему я стремился.
![](https://habrastorage.org/webt/5e/jy/ox/5ejyoxdz-way61igy_qqt1xk1n8.jpeg)
DIY
Самый дешёвый и гибкий способ, о котором я и расскажу подробнее.
Выбор компонентов
Тут есть над чем подумать, но в целом нам понадобится:
Железо
Контроллер
Тупо берём ESP8266, а для простоты прошивки и обеспечения питанием воспользуемся D1 mini. Управлять системой, очевидно, будем через WiFi.
![](https://habrastorage.org/webt/lj/ky/l1/ljkyl1s6uubm_thvjuhnj6zggoi.jpeg)
ИК-передатчик
Для прототипа воспользуемся простым ИК-светодиодом, сопротивлением и транзистором, потом подумаем, как это можно улучшить.
Датчик температуры
С ним веселее, можно задавать целевую температуру, и делать автоматическое включение/выключение. Для начала тупо возьмём DHT22.
![](https://habrastorage.org/webt/cc/qb/tm/ccqbtm6-pkoe1xnxzetkaj8by98.jpeg)
Экран
На него выведем текущее состояние системы (для отладки), а может быть и текущий ip-адрес (вдруг пригодится?).
![](https://habrastorage.org/webt/br/ha/gd/brhagdvncv5xxv8dos3nk_c9saw.jpeg)
Софт
IDE
Реализовывать всё будем в Arduino IDE (с которой я никогда до этого не работал), используя открытые библиотеки.
Сильно позже, когда проект уже работал, я перешёл на Visual Studio Code с плагином PlatformIO.
Протокол
Общаться с Home Assistant будем через MQTT (библиотека PubSubClient), т.к. это открытый протокол, и для него есть специальный компонент.
Конфигурация будет выглядеть, например, как-то так:
climate:
- platform: mqtt
name: Living Room HVAC
modes:
- "off"
- "auto"
- "heat"
- "cool"
- "dry"
- "fan"
swing_modes:
- "auto"
- "off"
fan_modes:
- "auto"
- "low"
- "medium"
- "high"
mode_command_topic: "livingroom/meteo/mode/set"
mode_state_topic: "livingroom/meteo/mode"
temperature_command_topic: "livingroom/meteo/target/set"
temperature_state_topic: "livingroom/meteo/target"
fan_mode_command_topic: "livingroom/meteo/fan/set"
fan_mode_state_topic: "livingroom/meteo/fan"
swing_mode_command_topic: "livingroom/meteo/swing/set"
swing_mode_state_topic: "livingroom/meteo/swing"
current_temperature_topic: "livingroom/meteo/temperature"
Управление
Библиотека HeatpumpIR поможет нам отправлять сигналы на кондиционер (модель кондиционера пока захардкодим).
Разное
Понадобятся ещё библиотеки для таймера, для работы с датчиком температуры и с экраном, но это уже мелочи. Привычным жестом добавим WiFiManager и ArduinoOTA, чтобы обновлять прошивку через веб-интерфейс, а не USB.
Прототип (00)
Покупаем на алиэкспрессе случайные компоненты, собираем вместе на бредборде, тестируем идею.
![](https://habrastorage.org/webt/n2/ve/_3/n2ve_3e4xbgeselooxb_z34j2zq.jpeg)
Понимаем, что:
- Экран был заказан слишком большой, и у него слишком много ног.
- Один светодиод бьёт не очень далеко, и не очень надёжно.
Но в целом идея работает! В интерфейсе Home Assistant появляется «родной» компонент HVAC, а значит, управление из любой точки мира у нас уже «в кармане». Родная интеграция Home Assistant с Google Assistant добавляет нам голосовые команды и обратную связь: можно у ассистента спросить про температуру в комнате, и он ответит как целевую, так и текущую температуру.
![](https://habrastorage.org/webt/sy/wv/zh/sywvzhrpxflr_8k7izcu-gkwfms.png)
Изменение целевой температуры, скорости обдува и режима кондиционера в веб-интерфейсе тоже на месте (и, главное, работает!).
![](https://habrastorage.org/webt/zv/ly/4k/zvly4k9nokvr_n_x0gc0knfurfk.png)
Тестовый образец (01)
Поменяем пару компонентов: закажем экранчик поменьше, и чтобы работал через I2C (и библиотеку применим другую).
![](https://habrastorage.org/webt/9c/ld/zp/9cldzpkypgzfejdxaqujwm17qkq.jpeg)
Также заменим ИК-светодиод на готовый модуль.
![](https://habrastorage.org/webt/pu/ob/ml/puobml0kneoraufy6fft9x9vt1g.jpeg)
Оказалось, что модули с одним светодиодом (на фото слева) на алиэкспрессе заказывать не стоит: они не содержат транзистора, и одна из ног (VCC) у них, по сути, бутафорская.
А вот если заказать модуль с двумя светодиодами (на фото справа), то тут уже все необходимые компоненты на месте, и подключается такой модуль легко и непринуждённо, и добивает немного дальше.
Также пришло время всё это собрать на своей печатной плате… Это был один из самых сложных моментов для человека, который никогда не проектировал печатные платы, и наверняка я всё сделал неправильно.
![](https://habrastorage.org/webt/z3/ea/sc/z3eascuagsayu7zqhb7_shrp0ia.png)
Для проектирования я использовал EasyEDA, готовую продукцию заказывал на OSHPark (опять же, наверняка можно было найти более дешёвый вариант), и в результате получил примерно такое:
![]() |
![]() |
![](https://habrastorage.org/webt/rb/3l/iv/rb3liv9-vm-pnsaueafbpendiui.jpeg)
Кнопка была добавлена в последний момент, а место для неё нашлось совершенно случайно. Оказалось, что с кнопкой всё немного веселее, можно не держать экран включенным всё время (что для OLED вредно), а показывать состояние по нажатию.
Что ж, уже неплохо, осталось добавить корпус. Для этого запускаем Blender, делаем кучку параллелепипедов, применяем ряд булевских операций…
![](https://habrastorage.org/webt/fl/ig/h_/fligh_cx6xgegg5lrsoydl2azji.png)
И отправляем на 3D-принтер.
![](https://habrastorage.org/webt/au/b8/ck/aub8ck2fywfbds1ytgiwbc5ia6s.jpeg)
Итого, получилось дёшево (меньше $10 за экземпляр), гибко (будет работать с почти любым кондиционером), легко интегрируется, управляется голосом и через веб, стабильно добивает с пяти метров. В общем, примерно то, чего я и хотел.
Как бы всё это сделать чуть лучше?..
Серийная модель (02)
Есть ряд направлений для улучшения получившегося продукта (точнее, возможностей улучшения, позволивших бы превратить эксперимент в продукт):
- Датчик температуры можно взять поменьше размером и более точный, например, BME280, HTU21D или Si7021, что позволит повесить его на те же ноги, что и экран (I2C), заметно уменьшить размер готового устройства и упростить разводку печатной платы. На практике оказалось, что на тот же BME280 начинает сильно влиять нагрев самой ESP8266, и выдаваемые показания нужно корректировать.
- (вытекает из первого пункта) Держать ESP8266 постоянно работающей — это не комильфо, нужно периодически уходить в Deep Sleep, лишь иногда просыпаясь для отправки показаний и приёма команд;
- (вытекает из второго пункта) Обычный MQTT уже не очень подходит, нужно использовать MQTT-SN, чтобы управляющие команды запоминались и доставлялись на контроллер в момент пробуждения;
- Реализация вышеперечисленных пунктов позволит сменить «проводное» питание на аккумулятор;
- Текущий способ крепления компонентов к печатной плате (обычная пайка) является сложным в реализации и недостаточно гибок: имеет смысл припаять хедеры, чтобы те же датчики температуры можно было менять, как перчатки;
- Наконец (в противоречие с предыдущим пунктом), всё-таки готовые модули — это хорошо и просто, но слегка громоздко, в идеале вместо D1 mini была бы голая ESP8266, а датчик температуры, кнопка и ИК-светодиоды были бы распаяны на одной плате (как это и делают в серийных продуктах), что позволило бы уменьшить размер устройства и его серийную цену;
- Да и вообще, было бы здорово предусмотреть в прошивке возможность лёгкого выбора своей модели кондиционера одним кликом...
Заключение
Это было славное приключение, и я многое понял. Например, я понял, почему серийные устройства стоят так дорого, и сколько сил нужно было бы приложить, чтобы выйти на один уровень с ними. С другой стороны, очень многое в этом проекте я делал впервые (работа в Arduino IDE, заказ печатных плат, создание модели для 3D-принтера), и получить этот опыт было бесценно. Исходники, впрочем, не покажу: мне за них достаточно стыдно :)
Но своей цели я всё-таки достиг, а дешёвое и гибкое управление кондиционерами оказалось вполне достижимо.