Умный дом, опыт построения, бег по граблям (MajorDomo, Tasmota и Алиса)
Решил обобщить и систематизировать накопленный опыт в создании умного дома. Началось все с управления розетками (светом) на даче – если уехал и забыл выключить свет, можно через интернет выключить и спать спокойно. Потом появилось ограничение по мощности и желание автоматически реагировать на превышение мощности отключением маловажных потребителей типа чайника. Ну а дальше уже сложно остановиться. Климат, автономное снабжение, комфортный свет и все это — не вкладывая много денег, хотя если все посчитать..
Если теорию знаете, можно перейти к моей истории поисков идеального решения.
NB! Так же для удобства, жирным курсивом подсветил названия технологий и платформ. А просто жирным — важные наблюдения или выявленные глобальные засады.
Ну, а теперь по порядку, немного теории
Умным домом принято называть что угодно, от 2 лампочек, управляемых по таймеру до сложной системы, реагирующей на множество факторов и делающей жизнь владельца комфортной.
В любом случае речь про управление устройствами, кратко их можно собрать в группы:
Бытовая техника (пылесосы, телевизоры, чайники, кондиционеры)
Лампочки/ленты (меняют цвет и яркость)
Датчики (мощность, напряжение, температура, влажность, концентрация газов)
Диммеры (пропорциональный выходной сигнал)
Исполнительные устройства (регуляторы температуры, привод штор)
Шлюзы (пульты, универсальные передатчики команд)
Построение умного дома начинается с выбора платформы. Разные платформы имеют разную функциональность, стоимость, сложность настройки. Например:
Умный дом Яндекс — нет логики, только команды, много совместимых устройств
Xiaomi (Aqara) – простые скрипты
Google Home – простые скрипты, много совместимых устройств
Domoticz – ограничен набор устройств, развитая логика
IFTTT — ограничен набор устройств, развитая логика
HomeAssistant — ограничен набор устройств, развитая логика, настройка интерфейса плагинами
Majordomo (php) — развитая логика, открытый проект, активно развивается, требует умения программировать.
Нужно заметить, что платформы от именитых производителей умеют работать друг с другом. То есть их экосистемы можно объединять, что существенно расширяет перечень подключаемых устройств. Кстати, о подключениях тут есть 2 аспекта: как подключаться физически и как общаться с концентратором умного дома.
Физически можно связываться через локальную компьютерную сеть (проводную или беспроводную), сеть малого радиуса (Bluetooth, ZigBee) или просто по радио или инфракрасному каналу (последнее обычно только в одну сторону работает).
Что же касается «языка» на котором общаются устройства, то тут вариантов много, но можно разделить на открытые (общедоступные) типа mqtt (сервис коротких сообщений через центральный сервер) или web-hook (обычные прямые ссылки на веб-сервер на борту устройства) и закрытые типа протокола Xioami/Redmond и прочих, которые известны только производителям.
Устройства – это хорошо, но что же ими управляет? Центральное устройство/ центр управления. Кстати, хабы типа Aqara это нифига не центральный модуль, а всего лишь концентратор сети ZigBee или какой иной, понравившейся производителю – логика остается в самих устройствах или на телефоне пользователя или в облаке.
Насколько я понял, большинство облачных сервисов не поддерживают логику. То есть в «Яндекс доме» можно узнать температуру и включить обогреватель. Но заставить Яндекс следить за температурой и держать в комфортном диапазоне – нет!
Для реализации логики нужен центральный блок, причем желательно локальный. Вот тут вариантов масса – поставить на свой домашний комп программу управления, собрать отдельный сервер, разместить сервер в облаке.
Как ни странно, дешевые микро ПК на ARM процессорах, например OrangePi, Nano Pi и прочие фруктовые Пи вполне тянут систему с базой данных, брокером сообщений и веб-интерфейсом. Не говорю уже про Raspberry – это вообще, как заговоренные.
Из программных серверов умного дома можно выделить популярные: Blynk (есть вариант облака и локальный), IFTTT (чисто облако, но с мобильным приложением), Home Assistant, Domotics, Majordomo.
История рождения моего умного дома
На момент начала моей автоматизации, у меня были штук 6 устройств SonOff (у них родное приложение и облако – eWeLink), управлял розетками на даче. И поставил камеры Xiaomi Dafang (камеры не понимали русский, но это PTZ, FullHD, да еще и стоили всего 2 тысячи рублей каждая). Камеры принесли на дачу постоянный интернет (мобильный), роутер. А также облако Xiaomi. Итого, 2 облака – Xiaomi + eWeLink. Надо было собирать в единую панель управления. Первым был установлен HomeAssistant, даже игрался с камерами (хотел на датчик движения у камер прикрутить и сохранять в системе). Но дальше скриншотов, и то не всегда, дело не пошло. С SonOff вообще не смог подружить. Решив, что логика для розеток все-таки важнее, начал играться с MajorDomo, который имел для этих устройств коннектор, а также более-менее понятный интерфейс настроек (субъективно, да, php+html, объектно-ориентированная модель).
Первый тревожный звоночек пришел от Роскомнадзора – в попытке убить телеграмм (безуспешной) они прибили доступ ко многим облакам, в том числи и Xiaomi. В середине зимы было очень неприятно оказаться без видеонаблюдения за дачей, расположенной в 100 км от дома..
Итог – камеры перепрошиты на Dafang Hack (прошивка делающая локальный RTSP сервер потокового видео) и первая моя Raspberry c MotionEyeOS (локальный видео сервер), а также белый IP дома и VPN между домом и дачей (на роутерах Mikrotik). Локальный сервер держит архив на 500Гб (пара месяцев с двух камер), питается от аккумулятора (до 3 дней без света).
Для логики нужно не только управлять, но и контролировать, для этого купил SonOff POW R2 – это фактически, счетчик электроэнергии с выключателем на 16А (стоимость по 750 рублей). Это позволило при включении посудомоечной машины, бойлера для воды (суммарно 4 кВт) блокировать розетку с чайником. Сейчас это модно называется DemandResponse. А так же стало возможно контролировать работоспособность насосов водоснабжения и канализации (по графику дренаж включается и на графике мощности есть пики, по которым можно понять, много ли воды и вообще, не завис ли поплавок!) — дистанционная диагностика оборудования. Так же для управления низковольтными устройствами (включение дизельного отопителя, насоса аэрации воды для очистки, отключения зарядника от аккумулятора, когда нет напряжения в сети СНТ) был куплен клон SonOff G4 – четырехканального реле с радиопультом (еще 1100 рублей).
Второй «звоночек» пришел от eWeLink – с выходом в массы устройства контроля напряжения SonOff POW R2 поток через их сервер, видимо, стал превышать их возможности (ток, напряжение, мощность активная, мощность реактивная, мощность полная, коэффициент мощности и все это 5 раз в секунду с каждого такого устройства) и они решили, что датчики будут телеметрию слать один раз в минуту. То есть у вас уже минуту мощность за разумными рамками или напряжение просело до Америки (113 вольт реально было летом), а умный дом живет в розовых мечтах, что все хорошо.
Итог – модуль MojorDomo для локального режима SonOff и окончательный переход на MajorDomo на Orange Pi (стоила около 1000 рублей всего, пришлось осваивать Linux, а точнее – Armbian и по инструкциям ставить MajorDomo). Но недолго музыка играла… SonOff почувствовали что-то неладное и очередная прошивка на их сервере отрубила локальный режим, то есть только через облако, только раз в минуту..
Полная локализация
Так как умный дом к этому моменту управлял в том числе зарядкой аккумулятора и переключением на инвертор в случае аварии, зависеть от облака на «вражеских» серверах, а так же наличия связи с интернет показалось не очень разумной идеей.
Очередной шаг – перепрошивка всех устройств на Tasmota, отказ от протокола eWeLink и уход на MQTT. Это, кстати, открыло путь в полный лоукост – прошивка легко настраивается, а плата Wemos из Китая стоит всего 120 рублей, при этом на борту 12 линий для подключения периферии, АЦП, WiFi. Так число устройств в умном доме увеличилось раза в 3 – выключатели, датчики напряжения на АКБ, датчики температуры и влажности (кстати, оказалось, что лучший AM2301 – это AM2320! Программно совместим с AM2301, который еще называют DHT21, но при этом стабилен, не глючит и не зависает).
Тут Остапа понесло и в умном доме появились солнечные панели, 2 контроллера (один PWM, второй — MPPT), датчики тока от солнечных панелей в систему и на АКБ (просто по напряжению на клеммах степень заряда не измерить). От АКБ, кстати, на этот момент питаются 3 камеры, 2 микросервера, 2 роутера, общее потребление примерно 40Вт постоянно.
После примерно полугода, когда все было настроено и отлажено пришла беда – умерла карта памяти. Свежего бэкапа не оказалось – все ждал идеального состояния, не дождался. Изучил, какие карты бывают – узнал про MicroSD A2 – это карты с контроллером, как у SSD дисков — то есть много и часто писать/читать мелкие файлы им не страшно. Настроил, по памяти восстановил логику и оформление, сделал бэкап. Через месяца три началось неладное – зависания, тормоза при открытии графиков за месяц. Анализ (я почти стал спецом по Linux) показал, что база данных тупит из-за очень большого числа накопленных данных. Пришлось делать удаление старых данных, оставляя только по 2 отсчета за минуту для данных старше месяца. Помогло, но не сильно. Надежда была на плату с большим объемом памяти – Orange Pi One Plus (700 рублей), но не судьба. В итоге куплена Raspberry Pi4 c 2Гб памяти на борту, а для этой палаты есть оптимизированный образ MajorDomo – и о чудо, там все отлично – БД крутится полностью в памяти, раз в час сбрасывается на карту бэкап, в случае незапланированного падения, при загрузке восстанавливается состояние на начало часа.
Все это было отлично, управляется с компьютера, с телефона (экран на картинке – там 2 таких сцены, одна для управления и климата, вторая для телеметрии).
Но вот беда – чтобы включить свет надо все равно тянуться за телефоном и тыкать мелкие кнопки. А на даче еще и родители бывают, а для них много кнопок на экране – слишком сложно.
Появление голосового управления
И вот тут я задумался, что пора подключать голосовой помощник. Сначала думал про Google Assistant/Home, но увидав, что они творят со своим президентом, да еще к новому году отключили поддержку русского на колонках (оставив только на телефонах), решил, что вполне реально повторение с отключенными облаками Xiaomi и eWeLink. В итоге, Алиса от Яндекса. Каково же было мое удивление, когда увидел, что есть стандартный коннектор (навык Алисы) к MajorDomo! Яндекс станция мини отлично подошла по функциям и размеру, более того, нашел и обратный коннектор – из MajorDomo можно выдавать команды на устройства, подключенные к Алисе – пультам кондиционеров, телевизиров и даже роботу-пылесосу. И это не считая проговаривания статусов типа «внимание, работаем от аккумуляторов!». Соединение с Алисой можно сделать двумя способами – через платный сервис Connect (2 тысячи рублей в год, бонусом облачные бэкапы) или через Яндекс.Диалоги – для этого надо SSL сертификат на сайт, белый IP, и выставленный в интернет сайт с MajorDomo, то есть свет или отопление сможет отключить случайный прохожий. В общем, 2к в год – не большая цена за сохранение комфорта, да и SSL покупать не надо.
Естественно, управление через Яндекс – это чисто функция комфорта, основная логика реализована на локальном уровне.
Система «Умный дом» своими руками
Пару недель назад в нашем чате появилось вот такое сообщение:
А еще чуть позже — вот такое:
Автор сообщений — Женя, программист, руководитель отдела обучения и электронщик. В 5 лет он заметил, что если вырвать из магнитофона моторчик, подключить к нему лампочку и начать его крутить, то лампочка будет гореть. В шесть — что если у моторчика поменять полярность подключения, он будет крутиться в другую сторону. В 18 поступил на Измерительные инновационные технологии в Политех. А в 24 пришел работать в «Сибирикс».
Это к тому, что цель всей затеи — не Умный дом и метеостанция как таковые. Цель — почесать руки (потому что чешутся) и не дать им окислиться (потому что из золотого сплава). Так что все, кто недоумевает, зачем тратить время, когда можно просто купить такие девайсы — идите лесом-DNCом. А тем, кому интересна тема DIY-электроники (или DIY-электронщиков, что тоже не зазорно), можно скроллить дальше.
Мне кажется, что у любого человека должно быть какое-то хобби, помимо работы. Что-то делать своими руками. Это хорошая эмоциональная разгрузка (главное, чтобы не превращалось в рутину — на работе, пусть даже такой разнообразной и интересной, как программирование — рутина практически неизбежна, а в хобби — вполне себе да). Самое интересное — симбиоз, когда твоё хобби становится полезным и востребованным для дела.
— Владимир Завертайлов, руководитель Студии «Сибирикс»
Arduino
Первую версию Умного дома Женя сделал два с половиной года назад на arduino.
Arduino — небольшая плата с микроконтроллером, памятью и контактами, к которым можно подключать лампочки, моторы, датчики и вообще все, что работает от электричества. Пишешь программу на C++, загружаешь ее в память микроконтроллера arduino — и она управляет всеми подключенными устройствами. Так создаются классные гаджеты — система полива дачного участка, например, или робот, который приносит вам тапочки.
Первая тема, которую Женя сделал на arduino — это игрушка. Два сенсора, два участника. Каждый держит руку над своим сенсором. Когда игрушка пикнет, нужно резко убрать руку. Игрушка измеряет время реакции до 100-х секунд и говорит, кто тут чемпион. Рубились с женой. Удобно — кто проиграл, тот моет посуду).
Когда с arduino все стало понятно, Женя решил, конечно, делать Умный дом (электронщик же). Подключил к arduino охранную систему (датчик движения и датчик открытия двери) и термометр (датчик температуры и влажности DHT11) и остался недоволен. Связь между всеми устройствами была по радиоканалу на 433 МГц и оказалась нестабильной. Женя боролся с радиосигналами месяца 2, а потом решил не бороться, а переделать сервер умного дома на Raspberry Pi.
Raspberry Pi
Raspberry Pi — это уже полноценный компьютер. Да, одноплатный. Да, размером с кредитную карту. Да, сильно уступает по мощностям современным большим компьютерам. Но на нем может быть запущена операционная система Linux. Это значит, можно перейти с С++ на более высокие языки — java script, php. А это уже родные для Жени языки. Но главное — Raspberry Pi позволяет уйти от 433 радиосигнала и перейти ко всем известному и горячо любимому wi-fi, который работает стабильно.
Дизайн
Обычно ты или электронщик, или дизайнер. Женя, как мы помним, определился с этим еще в 5 лет, поэтому с дизайном были траблы. Но недолго. Потому что скоро он подошел к гендиректору «Сибирикс» и попросил помочь. Через месяц у него уже был отрисован интерфейс Умного дома нашим дизайнером.
Система
Систему Женя написал за 4 месяца. Работал примерно по 2,5 часа в день. Полтора часа до работы (специально вставал пораньше, потому что вечером — сын, домашние дела, игра в «Цивилизацию» с женой) и час во время обеда на работе.
Идея была, чтобы система неограниченно масштабировалась. Это сейчас он парень простой и ему в умном доме нужен только базовый функционал (метеостанция, охранная система, видеонаблюдение). Но если завтра ему надоест нажимать на кнопочки и выключатели и он захочет, чтобы освещение само следовало за ним, плита включалась по хлопку, а автоматические жалюзи на окнах закрывались при солнце, у него должна быть возможность прикрутить весь этот функционал.
Поэтому система организована таким образом: создаешь папку в Умном доме с модулем, описываешь его работу и она легко интегрируется в систему. Сейчас там 9 модулей. Есть модули физические (те, которые имеют физическое устройство), а есть логические (те, которые нужны для работы системы).
Функционал
Для метеостанции Женя взял 4 главных параметра, которые позволяют понять, умрешь ты или нет (температура, влажность, атмосферное давление, концентрация углекислого газа в воздухе). Создание метеостанции проспонсировал гендиректор студии на том условии, что Женя сделает еще одну такую в студию (уже сделал). У нас она по wi-fi подключается не к Умному дому, а к заббиксу, системе мониторинга серверов, которая мониторит разные параметры, от температуры жестких дисков до нагрузки на сеть, и выводит это все в виде красивых графиков. Теперь там есть еще и график температуры в офисе.
Датчик CO2 мы планировали подключить к нашему Zabbix, вывести на плазму и мониторить атмосферу. Первые же эксперименты показали, что приточку горе-винтеляционщики нам смонтировали так себе. Воспользовавшись электронным эндоскопом, мы выяснили, что приток шел через маленькую щелку в сайдинге здания (оно относительно новое). Ругаясь матерными словами, мы подогнали вышку и перемонтировали все по-человечески. Теперь утром датчик показывает CO2 в районе 500, к обеду поднимается до 800, что, в общем-то, нормально.
— Владимир Завертайлов, руководитель Студии «Сибирикс»
Когда на Женин дом установили камеры видеонаблюдения, которые можно отслеживать через приложение для телефона, оказалось, что они сделаны на очень популярном сервисе — макроскоп, и у них есть api-доступ. Женя подключил камеры видеонаблюдения в свой Умный дом. Забавно, что в Умном доме они работает лучше, чем в приложении. Приложение тупит дико. А в Умном доме камеры открываются влет.
Тот, кто последним уходит из дома, нажимает на кнопочку, и система встает на охрану. Когда кто-то приходит, датчик движения это понимает система начинает пикать, типа деактивируйте охрану или я сейчас заору. Чтобы деактивировать охрану, нужно приложить свой электронный ключ, система распознает его и успокоится.
Здесь отображаются все события, которые зарегистрировала система.
Здесь можно посмотреть параметры системы: график температур процессора, IP aдрес, нагрузку на процессор, батарейку.
Здесь содержатся реакции системы на какое-либо событие. Реакции задаются с компа.
Корпус
Корпус — это та вещь, которая разрабатывалась 5 часов, а печаталась 28 часов. Печаталась на стареньком домашнем 3d-принтере. Для справки — если печать длится порядка 4 часов, это уже считается долго. А тут — 28. На нижнюю часть корпуса ушло 16 часов. На верхнюю — 6. Это вечеринка на целый день — запускаешь 3d-принтер и он печатает, прерывать нельзя. Если свет, допустим, отключится на 98% печати, значит, ты 15 часов пластика просто выкидываешь. Такого, к счастью, не случилось. Случилось другое: из-за недочета в проектировании (слишком тонкие стенки в фигурном отверстии под динамик) крышку пришлось перепечатать. То есть, суммарно печать заняла примерно 28 часов. Ушла почти вся катушка пластика.
Голос
Система умеет говорить и понимает, что ты ей говоришь. Нажимаешь кнопочку, говоришь фразу, и она конвертирует ее в текст. Преобразование голоса в текст — дико сложная задача. Гугл умеет это делать, но за деньги. А первое правило DIY-проекта — никаких абонентских плат. Как оказалось, в последних версиях хрома есть встроенный инструмент «Распознавание голоса». Единственный нюанс в том, что соединение должно быть либо https, либо localhost. Умный дом — как раз такая система: клиент и сервер находятся на одной машине, так что удалось подключиться по localhost.
Реакция на команды
Второй сервис называется dialogflow. Фишка в том, что ты задаешь шаблон фразы, например: «Какая погода завтра?» и указываешь, что слово «завтра» — это переменная типа date. И теперь уже ты можешь задать любой вопрос: «Какая погода 20 сентября?», «Какая погода послезавтра?», «Какая погода через 3 дня?» и система понимает, что это тип данных — date, конвертирует его в программную дату и реагирует на нее. Вся эта тема — на нейросетях, и она обучаема. Если ты сказал «Какая будет погодка сегодня?» и система не поняла, она говорит «Я не поняла», и ты заходишь на сервер и прям руками обучаешь ее, что вот эта фраза означает «Какая погода?», и она запоминает. Обучение нейросети происходит по доступу: при регистрации на сервисе выдаются ключи доступа к api, доступ к личному кабинету агента, можно этого агента обучать и можно дать право кому-то на его использование.
В dialogflow есть еще одна классная тема — микродиалоги. Задаешь вопрос, например, «Как твои дела?» и задаешь паттерны ответов на него: «Пока не родила», «Все в шоколаде, даже дисплей», «У нас делишки, а дела у прокурора», «Ой, всё» — и система каждый раз будет рандомно выбирать из этих вариантов ответ на этот вопрос.
Получается, сервис передает в Умный дом сам триггер, который должен быть выполнен и возможную фразу для ответа, Дом ловит эту фразу и дальше задача наоборот: tts, то есть text to speech.
Это хорошо умеет делать Яндекс. Там можно выбрать не только голос (нескольких вариантов женских и мужских голосов), но и настроение (веселый, грустный, злой, нейтральный). У Яндекса очень простое и условно бесплатное api (с лимитом что-то около 10 тыс преобразований в день).
Таким образом получился цикл: произносишь фразу, система ее понимает, произносит что-то в ответ и совершает какое-то действие. Так, например, работает установка будильника голосом. Говоришь: «Поставь будильник на вторник на 7 часов». И во вторник в 7 тебя разбудит Умный дом.
Неплохо, если Умный дом может оповестить вас о пожаре или вскрытии двери, когда вас нет дома, правда? Есть такой модуль — называется sim800L. Это gps модем, который является полноценным телефоном. Он умеет звонить, отвечать на звонки, отправлять/получать смски, выходить в интернет с помощью gprs, определять местоположение с помощью сотовых вышек и т. д. Идея была такая: заказать этот модуль, вставить сим-карту в Умный дом, настроить какой-нибудь тариф, чтобы не было абонентской платы вообще, закинуть туда 500 руб и, пока они не истратятся (по 1 руб. за смс), а это, как минимум на год, забыть про все это.
Но оказалось, что в пике эта платка в момент поиска сетей потребляет 2 Ампера тока. У Умного дома есть модуль питания, туда заходит шнур, там аккумулятор и от аккумулятора выходит питание в систему. Батарейка может обеспечить максимум 3 Ампера выхода. То есть 3 Ампера постоянного потребления всей системой — край. И, если добавить этот gsm модуль к raspberry, она вырубится. Ей не хватит тока, и она просто потухнет. Единственное решение проблемы — это модуль отправки смсок делать отдельной коробочкой. Тогда туда можно обеспечить бесперебойное питание на 2 Ампера. И просто по Wi-Fi связать с Умным домом. То есть Умный дом говорит модулю: «Отправь вот такую смску», и модуль отправляет. Сейчас Жене нужно докупить пару железяк, и модуль будет готов.
- Raspberry Pi — 1500 руб.
- Дисплей — 2500 руб.
- Детали метеостанции — 1500 руб. (самая дорогая деталь — датчик CO2, 1100 руб.)
- Всякая мелочь, вроде микрофончика, колонок компьютерных, маленьких, настольных, самые дешевых, чтобы усилок оттуда достать — пусть будет 500 руб.
- Плата резервного питания — 1500 руб.
- Печать корпуса весом грамм 300 (2 руб. за грамм с учетом расхода пластика и электроэнергии) — 600 руб. Если печатать на заказ, выйдет дороже, возможно, около 1500 руб.
Немного лирики напоследок
Электронщики — это люди, которые зачарованно смотрят на трехзначное число на дисплее и говорят:
— Смотри, как круто!
Ты смотришь на то же самое число и неуверенно говоришь:
— Круто, да…
— А что ты видишь? — испытывают они тебя.
Ты делаешь попытку:
— 328?
И, конечно, не попадаешь. Потому что это не просто 328. Это офигенно работающая динамическая индикация.