Сам написал код и распечатал гаджеты на 3D-принтере: как я организовал работу умного дома
Это история из Сообщества. Редакция задала наводящие вопросы, бережно отредактировала и оформила по стандартам журнала.
Технологии умного дома уже давно на слуху — любой инженер о них знает.
Я как раз работаю Embedded-инженером в сети кофеен. Одна из моих обязанностей — делать их «умными». Это как организовывать умный дом, только в промышленных масштабах. Технологии очень похожи — различаются лишь сценарии использования.
На работе я получил опыт создания умных устройств, после чего решил применить профессиональные навыки дома. На это у меня было еще две причины: любовь к гаджетам и лень. Я скорее готов смотаться в путешествие на выходные, чем протянуть руку на полметра, чтобы взять пульт от проектора.
Как я познакомился с технологиями умного дома
До работы в сети кофеен моей основной специализацией была робототехника, но я даже не задумывался об устройстве умных домов. Вернее, мне всегда хотелось избавить себя от рутинных операций вроде «встать с кровати, чтобы выключить свет», но я отмахивался от этой мысли и говорил себе, что займусь этим когда-нибудь потом.
Мне пришлось основательно погрузиться в тему автоматизации, когда на нынешней работе дали задачу спроектировать и разработать «умные кофейни». С моим бэкграундом изучать направление было несложно. Но и просто тоже не было: все-таки технологий и устройств на рынке много, а надо было сделать максимально бюджетно и надежно. Трудностей добавило еще и то, что я впервые самостоятельно делал проект в промышленных масштабах — от начала и до конца.
Спустя время я все же освоился. Мы с коллегами сделали MVP, минимально жизнеспособный продукт, после чего проверили его в действии. Тогда же внезапно прилетел запрос: надо было разработать удаленное управление отдельным оборудованием, но не влезать при этом в инженерные сети кофейни. Мне пришло в голову очевидное решение — использовать умную розетку.
Мы не стали брать готовое устройство, потому что могли возникнуть сложности с интеграцией розетки в систему. К тому же, если бы интернет упал, мы бы лишились удаленного управления. В итоге пришлось самому делать умную розетку — правда, ее прототип так и не ушел в работу.
Зато у меня появилась идея сделать то же самое дома. Я как раз тогда уже набрался опыта с розеткой, а еще мы с коллегами ради смеха «подружили» гибридную кофемашину WMF Espresso с Алисой. Проще говоря, научились работать и с гаджетами, и с голосовым помощником. Минимальный набор навыков был освоен — можно было баловаться!
Как я начал обустраивать умный дом вокруг Алисы
Нетрудно догадаться, что дома я сначала поставил самодельную розетку, похожую на ту, что спроектировал на работе. Все компоненты у меня уже были, но если бы мне в конце 2020 года пришлось покупать их на «Алиэкспрессе», я бы потратил на них около 900 ₽.
Корпус для розетки напечатал на своем 3D-принтере — ее вес получился около 50 граммов, то есть потратил на нее 50 ₽. Металлические зажимы вилки я выдрал из раздавленного диваном сетевого фильтра. Предположу, что они стоят еще 100 ₽. Итого затраты на материалы составили чуть больше 1000 ₽.
Магазинные устройства для умного дома взаимодействуют между собой по правилам, которые прописал производитель. Я же хотел не только использовать свою розетку, но и заставить Алису работать с моим собственным сервером и сервисами.
Поэтому пришлось использовать готовый навык — программу, написанную сторонними разработчиками. С ее помощью Алиса, которая изначально понятия не имеет о моем сервере и не знает, как с ним общаться, как раз обретает эту возможность. Я выбрал навык «Домовенок Кузя» — он нестабилен, работает со сбоями, зато очень гибкий и поэтому подходит для создания умного дома.
Я связал розетку и сервер, чтобы управлять ею через интернет. «Подружил» ее с «Домовенком Кузей», а затем создал «чат» для управления всеми своими устройствами. После этого подключил к розетке настенную лампу и стал наслаждаться возможностью менять свет в комнате через приложение «Яндекса».
Мне нравилось управлять светом с телефона, но лень взяла свое: негоже ведь ручки напрягать да какие-то тапы по экрану делать ради такого. Не для того в мозге нейронные связи вырабатываются. Так я задумался о приобретении «Яндекс-станции». Но сразу решил, что покупать ее ради одного освещения — так себе идея. Поэтому, чтобы в покупке колонки был смысл, я решил подключить к умному дому еще несколько устройств.
Сначала мой взгляд пал на GyverLamp — вайфай-лампу со множеством светодиодов, которая уже год стояла рядом с кроватью. Я переписал код лампы — она научилась менять режимы и яркость. С ее помощью можно даже вывести текст бегущей строкой. Правда, не знаю, зачем это может пригодиться. Ох уж эти инженеры — делают фичи ради фич!
Другое устройство — проектор, тянуться за пультом от которого я тоже всегда ленился. В умную лампу добавил инфракрасный светодиод и команды для управления проектором, после чего загрузил конфигурацию в «Домовенка». Когда я хочу включить или выключить проектор, говорю Алисе, чтобы лампа послала в пространство нужный сигнал вместо пульта — через ИК-светодиод.
Только после настройки нескольких устройств я решился на покупку «Станции». Платить полную стоимость, 12 000 ₽, сразу показалось мне безумной идеей, поэтому взял устройство по подписке — за 499 ₽ в месяц. Удобно оплачивать стоимость по частям в течение трех лет, к тому же в комплекте давали «Яндекс-плюс». Выбрал самую большую «Станцию», так как хотел, чтобы проектор был подключен к ней.
Мне было важно иметь техническую возможность стримить видео с компьютера — и особенно с YouTube — на «Станцию» беспроводным способом. Я нашел подходящий плагин для браузера: с его помощью можно открыть нужное видео и нажатием одной кнопки отправить его на «Яндекс-станцию». Плагин искал ее внутри вайфай-сети и воспроизводил видео. Проще говоря, технология работает как Google Cast или AirPlay.
Когда мне привезли «Яндекс-станцию», я быстро настроил голосовые сценарии и полгода наслаждался тем, как облегчил себе жизнь. Правда, плагин был старый и в какой-то момент перестал работать, так что я лишился возможности воспроизводить видео на колонке. Теперь проектор подключен напрямую к компьютеру, а станцией пользуюсь реже.
Как я сделал умные шторы и веб-интерфейс
Со временем я понял, что автоматизация может решить еще одну проблему. Я существо ночное и, если работаю дома, спать ложусь поздно. Когда светает, отраженные от соседнего дома солнечные лучи будят меня даже сквозь тканевые шторы. Вечером еще тяжелее: так как окна выходят на запад, в квартире становится жарко, как в теплице.
Очевидное решение — поставить рулонные блэкаут-шторы. Но лень-матушка не дала бы мне покоя: приходилось бы вставать с кровати, чтобы поднимать и опускать их. Это мне точно не подходило. Я загорелся идеей создать автоматические шторы. После затяжного эпизода тревожно-депрессивного расстройства в моей жизни как раз начался период, когда хотелось что-то делать.
Нашел в интернете похожий проект, но меня не устроила реализация софта. Зато понравилась модель привода для штор — я ее скачал и напечатал на 3D-принтере. Заказал в магазине два рулона штор и четыре пластиковые направляющие. Все вместе обошлось мне примерно в 3000 ₽.
Кинематику не пришлось покупать — у меня уже были моторчики: за годы работы с роботами успел что-то накопить. Один такой моторчик, который управляет валом шторы напрямую, стоит примерно 400 ₽. Конечно, можно было использовать редуктор или крутить за цепочку, но меня такие варианты не устроили. Хотелось избежать лишних отверстий и ненужных висюлек на шторах.
Еще мне потребовались датчики Холла в качестве концевиков — это такие преобразователи, которые чувствуют магнитное поле. Концевики нужны, чтобы контроллер понимал, где находится крайнее положение шторы. Из-за того, что шторы не установлены ровно, а моторчики откровенно слабые, они периодически подклинивают и система теряет правильные координаты края шторы. Концевики помогают системе откалиброваться — выставить начальное, нулевое положение. Понимаю, что правильнее было использовать магнитоконтактные герконовые датчики, но их у меня не было, в отличие от датчиков Холла.
Я спаял простенькую схему на макетной плате и сел писать код. Хотелось сделать его красивым и подкрутить к нему интерфейс для точной настройки скоростей и крайних положений. А еще иметь возможность менять адрес сервера без перепрошивки.
Пока я писал код, наткнулся на авторскую библиотеку для домашних устройств от AlexGyver, которая позволяет быстро и просто сверстать веб-страницу прямо на чипе. С его помощью я за два дня сделал прототип, поставил его на окно и откалибровал. Но потом заболел — и теперь уже прошло два месяца, а устройство так и висит незаконченным: контроллер без корпуса, провода не уложены, нет печатной платы. Даже «висюльки» до сих пор болтаются. Как говорится, работает — не трожь. Но однажды я все же завершу прототип.
К Алисе я подключил гаджет по стандартной схеме — через «Домовенка Кузю». Рад, что устройство не только выполняет главную функцию и поднимает шторы, когда мне лень. Его можно настроить на автоматическое и плавное открытие утром, чтобы просыпаться самому — без будильника, но в заданное время.
Суммарно я потратил около 5000 ₽ на установку комплекта штор на одно окно. Из-за желания все сделать самому я даже не рассматривал покупку готового решения. Думаю, вышло бы примерно столько же. Хотя есть и более дешевые варианты — например, можно купить только моторизованный вал за 1200 ₽ или навесной мотор за 2800 ₽.
Работа умного дома — в деталях
Самодельные устройства умного дома. Основа почти всех DIY-проектов для умного дома — чип ESP8266: он 32-битный, имеет на борту вайфай и достаточное число GPIO-выводов для подключения всех основных агрегатов типа кнопок, датчиков и реле. Спокойно программируется на C++ из-под PlatformIO.
Умная розетка. Для своей розетки я взял плату WeMos D1 mini, модуль реле на два канала, сенсорную кнопку, компактный преобразователь питания AC220IN и адресный светодиод для индикации.
Интернет вещей и брокер сообщений. Механизм работы интернета вещей, IoT, чаще всего такой: конечные устройства подключаются к серверу, где есть брокер сообщений. Он принимает команды от пользователя и посылает в устройства. Среди самых известных брокеров — MQTT и RabbitMQ. По сути, создается «чатик» между различными устройствами, сервером и обслуживающими всю удаленную логику микросервисами. В этот чатик обычно заливают сообщения, которые может прочитать и человек.
Сервер. Изначально я нашел открытый и бесплатный MQTT-сервер и направил сообщения для розетки туда. Но почти сразу отказался от этой идеи: подвела надежность открытых сервисов. Тогда арендовал сервер на AWS за 10 $ (574 ₽) в месяц. На нем поставил Ubuntu 20.04, поднял Mosquitto-сервер — собственно, это и есть брокер MQTT-сообщений. Кроме домашнего IoT, кручу на нем и другие бэкенды своих проектов. Сейчас дополнительно использую сервер как VPN.
Локальный сервер. Я хотел организовать работу умного дома самостоятельно — казалось, такой подход обеспечивает гибкость. Для этой цели поднял локальный сервер на Raspberry Pi — по сути, хаб, как у Xiaomi. Хотелось сделать так, чтобы дом работал корректно, даже если отключится интернет. Тогда управлять им пришлось бы не через Алису, а с помощью простого интерфейса внутри локальной сети.
Управление проектором через лампу. Любой пульт от телевизора, кондиционера, проектора работает так: в нем есть инфракрасный светодиод, который испускает некоторую закодированную команду — последовательность байтов, то есть нулей и единиц, где 0 означает, что диод не светится, а 1 — светится. Для считывания таких команд я собрал из подручных средств устройство и написал простенький код, который способен принимать последовательность импульсов из пульта и выводить ее на экран. Этот код я скопировал в прошивку лампы.
Как я добавил в систему робот-пылесос, увлажнитель воздуха и дополнительные розетки
Робот-пылесос. Давно на него засматривался, но никак не мог приобрести. Хороший вариант подвернулся случайно. Выкупил его у друзей — забавно, что это именно я его им подарил изначально. На тот момент он стоил около 14 000 ₽, а друзьям не подошел лишь потому, что распугивал их домашний зоопарк.
Xiaomi Mijia 1C — простой, но достойный внимания гаджет. У него на борту нет лидара — датчика, который сканирует пространство на 360° с помощью набора лазерных лучей. Но есть навигационная камера, смотрящая вверх, и ИК-датчики. Этого достаточно, чтобы убирать квартиру площадью 46 м² за 40 минут.
Конечно, забавно выглядит, когда робот пытается обойти препятствие методом «лбом нащупаем, где дырка». Если у вас большая квартира или вам жалко бьющийся пылесос, можно заплатить чуть больше и взять модель с лазером.
Зато у Xiaomi Mijia 1C есть еще один плюс — функция влажной уборки. Из минусов — лишь одна щетка справа и неспособность парковаться с первого раза. Этим мы с ним похожи.
Буквально в два клика я подключил робота к Алисе. Для этого связал аккаунты Xiaomi и «Яндекса», после чего запустил поиск доступных устройств. Дальше все произошло автоматически. Благодаря Provider Adapter API не нужно особенных усилий, чтобы связать устройства разных производителей с Алисой.
Увлажнитель воздуха. Чуть позже друг подарил мне увлажнитель воздуха, тоже от Xiaomi. Я моментально подключил его к Алисе — теперь она включает и выключает устройство и говорит, какая температура в квартире.
Умные розетки. Раньше я думал, что дешевле делать умные устройства самостоятельно, но понял, что это не всегда так. Купил со скидкой сразу три умные розетки от «Яндекса». Использую их вместо выключателей освещения. Не люблю верхний свет и умные лампы, а еще мне важно, чтобы был физический орган управления. Если тумблер питания до лампочки выключен, она становится бесполезной.
Мои планы
Хотелось бы все-таки доделать шторы до конца и создать собственный веб-интерфейс для управления умными устройствами квартиры. Конечно, существует множество готовых решений, но мне интересно закодить его самому и подучить новый фреймворк для фронтенда.
А еще думаю смастерить самопальную систему аквастопа — контроля и защиты от протечек воды. Обычно она состоит из трех модулей: датчиков протечки, электрокранов на воду и контроллера. Система работает следующим образом: когда на датчик попадает вода, контроллер начинает истошно пищать и подает сигнал крану, чтобы перекрыть воду. Особо умные контроллеры умеют даже присылать пуш-уведомление в приложение.
На работе мы тоже делаем аквастопы — стоит такое удовольствие, мягко говоря, недешево. За один только электрический кран водоснабжения сейчас придется отдать около 9000 ₽. Проводные датчики воды стоят по 1500 ₽, а беспроводные — намного дороже. К тому же для дома нужно докупать контроллер, а это еще 5000—10 000 ₽.
Я живу на съемной квартире, поэтому не хочу врезаться в водопровод. Скорее всего, ограничусь моторизированной накладкой на вентили запорной арматуры, самодельными беспроводными датчиками и контроллером. Как раз давно хотел устроить себе челлендж — добиться максимальной энергоэффективности в самодельных устройствах. Беспроводной датчик — отличный кейс для проверки.
Если хотите повторить то, что делал я, надеюсь, вам пригодится мой опыт. А вот советов по автоматизации давать не буду. На мой взгляд, умный дом неспроста называется умным: каждый организует его под себя и свои нужды.
Мы постим кружочки, красивые карточки и новости о технологиях и поп-культуре в нашем телеграм-канале. Подписывайтесь, там классно: @t_technocult.