Алиса, открой ворота - или MVP умного дома за пару вечеров

Оригинал поста на хабре

TLDR: Схожих постов на хабре десятки, но мне хотелось показать, что внезапно можно очень быстро сделать классные штуки, которые не ради вау эффекта, а реально помогают жить.

Будет про:

  • Home Asistant
  • Алису и её станции
  • Ардуины и MQTT
  • управление воротами Came
  • локальное управление яндекс розетками
  • датчики движения
  • Влажность, температуру и CO2
  • Автоматический полив цветочков
  • Как при помощи всего этого развлечь детей и как они находят свои способы с этим играть.

Предпосылки

Мне всегда казалось, что умный дом это и сложно и какой-то бессмысленный выпендрёж.

Сложно - потому что надо изучать всякие там зигби, ставить шлюзы, контроллеры, интегрировать какие-то штуки, и вообще по хорошему надо нанимать бородатых дядек, которые сделают всё как нужно. И ещё и наверняка проводку для этого менять надо.

Выпендрёж - потому что меня всегда смущал основной вариант умного дома - управление светом. До сих пор не могу понять, зачем управлять им голосом, хлопками или датчиками движения. Поднять пятую точку и нажать выключатель - хоть какая-то разминка!

Кроме того, живу я с детьми по съёмной жилплощади, а хозяева за такую самодеятельность вряд ли спасибо скажут. Да и с собой не прихватишь при выезде. Как мне казалось.

Тем не менее, накопилось значительное количество несистематизированных огрызков:

  1. Ещё в далёком 2016 я собрал свой датчик CO2, темпераруты и влажности.
  2. На новый год ребёнок выпросил себе светодиодную ленту. Потратив какое-то время, я выбрал RGB ленту с умным контроллером MagicHome, которая внезапно сопряглась с Алисой. И это было прикольно.
  3. На новый год мы украсили на улице ёлку гирляндами. Когда мне надоело включать её руками, я заказал розетку яндекса и составил расписание включения. Заодно подключил так же уличный свет, выключатель которого висел крайне неудобно. К слову, розетки с честью выдержали нерегламентированные -15 на улице и продолжали бодро щёлкать реле.
  4. Периодически я призывал домой клининговый сервис, и каждый раз был квест с тем, как им оставить и забрать ключи. Очень хотелось решить это при помощи какого-то способа удалённого управления раздвижными воротами.
  5. У детей завелось две Яндекс.Станции, с которыми они активно общаются и слушают музыку.

В общем, я решил, что критическая масса накопилась, и пора бы посмотреть, что можно сделать. Я думал, это будет долгоиграющий проект на долгие зимние вечера, но внезапно всё получилось буквально за пару вечеров, чему я страшно удивился.

Сердце умного дома

Какое-то время я листал имеющиеся решения, и в глазах рябило от жутких разноцветных квадратов и прочих решений, интерфейсы к которым писали очевидно враждебные рептилоиды. В конце концов я нашёл то, что не вызывало отторжения и даже выглядело симпатично - Home Assistant. Выглядеть инсталлиция может, например, так.

Рассказывать долго про него буду, на хабре уже есть десятки статей, скажу лишь, что установка заняла примерно полчаса. Из которых 20 минут я придумывал, как мне работать с машинкой без клавиатуры и удалённого доступа.

Когда я вошёл в поднятую инсталляцию, он быстренько подцепил мой Keenetic City роутер, выдал информацию про все устройства, сам нашёл диодную ленту и телевизор. Что меня приятно удивило. Так же удивился количеству и качеству имеющихся интеграций. К тому моменту я смирился, что надо будет что-то писать на питоне, но этого так и не потребовалось.

Скажи «друг» и войди

Сначала я решил попробовать задачку, которая болела больше всего - открывать ворота. Лезть внутрь них и что-то добавлять мне очень не хотелось, как и делать так, чтобы они работали только через умный дом - это лучший способ в один прекрасный момент остаться за закрытыми дверьми. Так что я решил попробовать эмулировать брелок. На худой конец я бы засунул его в микроконтроллер и тупо замыкал контакты кнопок, но всё оказалось гораздо проще.

Забудьте про безопасность, динамические ключи и прочие вещи, которые давали вам спокойно спать. Пара трансмиттер-ресивер за 200 рублей может считать ключ от ворот CAME при нажатии на кнопку открытия ворот, и воспроизвести сигнал. Остаётся дело за малым - затащить это в Home Assistant.

Мне казалось, что MQTT это какая-то страшная аббревиатура, и сейчас я обложусь литературой и буду вникать, но… Оказалось, что это обычный pubsub, для которого есть библиотеки Arduino, и который цепляется в Home Assistant парой строчкой конфига. Всё это есть в репозитории по ссылкам выше, так что не буду останавливаться здесь подробнее. За вечер мне удалось и считать сигнал и воспроизвести его и затащить кнопкой в Home Assistant.

Минус у такого решения только один. Ворота довольно тупые, и единственная кнопка, которая у них есть - это “изменить текущее состояние”. Поэтому нельзя быть уверенным, ты открываешь ворота, закрываешь, или останавливаешь процесс. К счастью, это по большей части решает видеокамера, направленная на них. Да, можно было бы залезть в сами ворота и поставить там таймер на закрытие, который есть штатно, но повторюсь, что мне очень не хотелось что-то разбирать из местного хозяйства. Так что минимальная инвазивность решения для меня искупила его минусы.

Алиса, открой ворота

Въедливый читатель наверняка заметил, что Алиса на текущем этапе мне ворота не откроет. Она по них не знает. И здесь нам на помощь приходит интеграция с умным домом яндекса. Которая тоже настраивается за 10 минут и передаёт туда все устройства, которые ты указал, и которые ему понятны.

Теперь я могу управлять домом тремя способами:

  1. Админка Home Assistant через локальную сеть;
  2. Та же админка через интернет, выкинутая туда штатными средствами Keenetic - KeenDNS;
  3. Алиса, которая дёргает Home Assistant через пункт 2.

Видел много статей, которые предлагали другие средства вроде использования Blink или “домовёнка кузи” - но зачем умножать сущности, если можно этого не делать?

Как дополнительный неочевидный бонус, такая интеграция позволяет раздать управление умным домом через Алису всему семейству, чего штатно в Умном Доме Яндекса до сих пор, кажется, нет.

Влажность, температура, CO2

Как я уже упоминал выше, у меня уже шесть лет работает собранный на коленке датчик. Оставалось только прикрутить к нему публикацию данных через MQTT. Что тоже было сделано с лёгкостью, приводящей в изумление. Опять же не буду на этом останавливаться - конфиг для HA есть в репозитории.

Управление яндекс станциями

Это уже в общем-то из серии “потому что могу”. Заметил, что есть интеграция с яндекс станциями, которая позволяет говорить в них Алисой. Вроде бы фигня, но настроил, чтобы Алиса говорила мне о том, что пора проветрить, и предупреждала, что пора заваривать чай к стендапу (очень помогает его не продолбать).

Автоматический полив цветочков

Листая каталог компонентов, случайно наткнулся на набор для полива, который состоит из датчика влажности земли (втыкается в землю), реле и небольшого насоса. Процесс шёл всё быстрее, и вот уже ещё один контроллер сообщает мне о влажности земли и сам поливает цветочки. Правда, пока я пришёл к выводу, что собирать такое на каждый горшок - дороговато. Достаточно просто засунуть его в один горшок и при его высыхании слать напоминалку (лучше поливать всё одинаково, чем забыть на пару недель). Кроме станции, напоминалки у меня так же настроены в телеграмм, но настройка этого настолько тривиальна, что даже писать об этом стыдно.

Локальное управление Яндекс.Розетками

Вокруг красота, и я всем могу управлять через HA. Кроме розеток, что в целом пофигу, но я начал комплексовать и начал думать, что можно с этим делать. И тут подумал о том, что Keenetic и HA оба находят у меня устройства tuya, и это ЖЖЖ явно не спроста!

Долго ли коротко ли, оказалось, что Яндекс Розетки построены на OEM решении Tuya. Что в общем скорее хорошо, чем плохо, поскольку работает это решение хорошо, и добавочной стоимости это не создаёт. Но мне хотелось управлять ими через HA, то что я сначала переподцепил их через родное приложение и попробовал интеграцию с облачной туей. У меня она не взлетела, и тут я обнаружил, что есть хитрый способ подключить их локально через расширение LocalTuya - но тут потребовались пляски с бубном, девелоперский аккаунт и получение локального ключа. Однако, всё заработало, и теперь я могу ими управлять как из локальной сети, так и через УДЯ (Умный Дом Яндекса), куда прокинул их через тот же HA и KeeneticDNS.

Умный дом и дети

Детям очень зашла эта несложная магия, а старшая даже написала в УДЯ небольшой сценарий:

  1. Заходишь к ней, и колонка говорит “закрой дверь и выключи свет!” - и повторяет это, пока не сделаешь, как велено.
  2. Включается стробоскопическое красно-синее освещение и страшная музыка.
  3. Колонка говорит “Её я уже съела, а теперь и ты попался!”

Управляется это, правда, не хитрой автоматикой, а ребёнком, спрятавшимся в шкафу. Но вау эффект на детей делает. Тут мог бы быть смайлик, но сами знаете.

Кроме того, можно придумывать небольшие игры и шутки:

  • Весь вечер мы играли в шпионскую игру, где надо было обмануть датчик движения, который тоже был написан очень быстро. Когда он тебя замечал, то лента мигала, и Алиса говорила фразой из случайного набора вроде “Попался!” - вроде мелочь, но радости и адреналина много.
  • Один раз на ночь я положил в холодильник пауэрбанк с тем же датчиком движения, и при открытии двери холодильника сзади раздавался голос, порицающий обжорство.
  • Ещё очень удобно призывать ребёнка с другого этажа миганием ленты. Это гораздо менее инвазивно, чем заходить или звонить.

Что можно сделать ещё

Так же у меня возникали следующие мысли:

  • Поставить сервопривод на регулятор котла, чтобы менять температуру воды. У меня нет бойлера, так что регулировать температуру надо на котле. И бывает нужно тёплую, а бывает - кипяток. Бегать крутить ручку неудобно. Так же можно регулировать и отопление, но меня не обламывает это делать руками при изменении погоды. Хотя можно было бы приглушать отопление на ночь…
  • Ребёнок просил сделать алярм на случай, если проспал все будильники. Думаю, что датчик движения плюс станция вполне решат эту задачу.
  • Иногда хочется умных штор, но пока что это из той серии, что проще сделать руками. Да и для них надо добавлять специальные устройтва, от которых скорее всего останутся следы в стенах. Так что отложим.
  • Ещё наверное дойду до того, чтобы поставить датчики протечек, газа и огня. Протечки уже случались, и было бы неплохо хотя бы оперативно на это смочь среагировать.

Что можно было бы сделать лучше

Наверняка - почти всё. У меня всё получилось всё настолько быстро, что я не успел прочитать, как это делать правильно. Очевидные косяки есть такие:

  • Можно было бы использовать зигби. Но при моём количестве устройств две точки Keenetic в меш сети вполне тянут всё на вайфае, так что не хотелось дополнительной магии. А проблемы интерференции сетей в отдельном домике в подмосковье не существует.
  • Можно было бы писать в один топик все показатели от датчика CO2/температуры/влажности. А потом парсить. Но было лень, да и места в очереди не жалко.
  • Все устройства на микроконтроллерах можно было сделать с self discovery, чтобы не писать конфиг в HA, а он сам их находил и отрисовывал нужные иконки и контролы. Но лень.
  • Можно было бы использовать что-то вроде ESPHome, что позволяет прошивку и обновление устройств по воздуху. Но с моим пятком датчиков мне стало лень в этом разбираться, так что сделал как шесть лет назад.
  • Наверняка, ты, читатель, тоже увидел, что можно было сделать лучше или проще - подскажи!

Итог

Меня поразило, насколько всё это внезапно легко и быстро делается в 2022 году. Несколько расслабленных вечеров после работы - и ты получаешь реально полезные штуки, которые обладают внезапными синергетическими эффектами.

Полагаю, что со временем у меня получится больше интересного, несмотря на ограничения, которые накладывает арендуемое жильё - всё то, что сделано, можно спокойно снять и унести с собой, ничему не повредив.

Ну и отдельные лучи радости - экосистеме Яндекса, ребятам из Keenetic и сообществу Home Assistant. Работать с этими устройствами и софтом - просто счастье - как будто тебе вместо железного детского конструктора тебе вдруг дали приятные деревянные кубики.

Ну и вопрос напоследок. Какие у вас есть нетривиальные или неожиданные интеграции, и какие забавные истории про детей и умный дом можете поведать вы?