Умные идеи для дома своими руками

Умный дом как хобби

Когда-то в блоге мы рассказывали, как наш руководитель отдела обучения и замечательный программист Евгений создал марсианские часы и заодно выиграл в конкурсе. А потом — как он же сконструировал систему «Умный дом» своими руками. Так вот, сегодня снова поговорим о DIY-электронике и принципиально новой системе контроля за домом, которую Евгений создал с нуля взамен предыдущей.

Я занимаюсь всем, что связано с электроникой и программированием электронных устройств, с университета. Это моя профессия — я учился на приборостроителя. И получилось так, что работаю я разработчиком, а моё хобби связано с профессией.

Идея «умного дома» не давала покоя инженерам ещё в 50-е: тогда появился первый дом с кнопками, где все бытовые задачи решались нажатием конкретной кнопки. В 1966 году с помощью единой системы уже можно было настраивать климат в помещении и включать/выключать приборы.

Полноценные «умные дома» появились на западе в 70-е с изобретением передачи сигнала по электросети и беспроводного управления на радиочастоте 433 МГц. Но для управления системой нужен был специальный пульт: с его помощью можно было включать и выключать приборы, менять яркость света и информировать о текущем состоянии бытовой техники. Одна беда — работали такие пульты по закрытым протоколам. Но когда появился Интернет и Wi-Fi, в сфере умных домов всё изменилось.

С чего всё началось

Эпопея с Умным домой началась у Евгения давно — ещё 5 лет назад, когда он впервые узнал про Arduino (аппаратно-программную платформу для создания каких угодно устройств). Эта тема так его заинтересовала, что спустя пару месяцев он заказал собственный набор Arduino и начал с ним «ковыряться», изучать возможности и документацию. А уже спустя 4 месяца сделал первое устройство — сенсорную игру на реакцию. Но после этого, по собственному признанию Евгения, его посетил творческий кризис: у него была база для проектирования и даже время, а вот идеи, что сотворить, не было.

В 2016-м он заинтересовался темой умных домов и понял, что на базе Arduino сделать подобную систему для своей квартиры вполне реально. Первая версия умного дома состояла из метеостанции (с датчиками температуры и влажности) и охранной системы (с датчиком открытия/закрытия двери и инфракрасным датчиком движения), и выглядела так:

Следить за температурой и влажностью и контролировать происходящее в помещении — классно, но вскоре стало ясно, что эти устройства не такие уж «умные»: ведь централизованной системы управления всем этим не было. Поэтому-то и зародилась идея сделать новую, усовершенствованную, версию системы, которую по праву можно было бы назвать «умным домом». Её Евгений выпустил в 2019-м.

Новая система была построена на микрокомпьютере, и у неё был клёвый сенсорный экран (интерфейс которого, кстати, нарисовал один из дизайнеров Сибирикс). Она умела разговаривать, распознавать речь и понимать данные с внешних датчиков, которые к ней можно было подключить. С внешними устройствами система общалась по Wi-Fi с помощью JSON (напомним, это текстовый формат обмена данными).

Восстание машин

Естественно, все комплектующие для системы заказывались из Китая, поскольку в России найти что-то подобное за адекватные деньги проблематично. В какой-то момент дисплей, как всё китайское (простите за штамп), начал глючить: стал неадекватно реагировать на нажатия и жить своей жизнью.

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

Третья версия системы построена на самописной системе центрального управления. Но зачем, спросите вы, ведь есть же готовые решения?! Ага, есть такие.

Первая — MajorDomo, придуманная разработчиком из Белоруссии. Сама по себе штука прикольная и очень популярная, к ней есть множество плагинов и модулей, к ней даже можно подключить датчики от супер-брендовых производителей. Но есть нюанс — она построена на языке PHP с использованием MySQL (свободной реляционной системы управления базами данных). Евгений пробовал её в деле, но на сервере дважды терялась база данных, потому что MySQL при запуске сервера почему-то не стартовал.

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

Второе распространённое готовое решение — система Home Assistant, написанная на Python и отлично работающая на Unix-машинах (оборудовании с переносимой операционкой). Можно просто записать образ программы управления на флешку, вставить её в свою систему — и всё заработает. Да, для Home Assistant есть плагины для быстрой настройки, но с ними непросто. Поэтому чаще конфигурация такой системы делается вручную (приходится писать код): проще укусить себя за локоть. А если уж нужно писать код, так лучше свой собственный.

Всё заново: система «умного дома» своими руками

В новой, написанной ручками, системе есть три узла:

  1. Вещи — осязаемые элементы системы: датчики, сенсоры и вообще всё, что можно взять и потрогать руками.
  2. Сервисы — виртуальные модули, пока их три: видео-камеры, прогноз погоды и данные самой системы.
  3. Центр управления с двумя основными компонентами: MQTT-брокером и сервером на Node.JS.

Сердце системы — микрокомпьютер версии Raspberry PI 3b+. Стоит он 2−3 тысячи рублей, а взамен вы получаете полноценный компьютер размером с пачку сигарет. Единственный нюанс: его файловая система базируется на карте памяти формата MicroSD, а постоянные записи данных быстро выводят её из строя. Из-за этого приходится заботиться о минимизации записываемых данных или подключать HDD-носитель вместо MicroSD. Но принцип в обоих случаях одинаковый: нужно скачать образ Raspbian, установить его на карту памяти и вставить в микрокомпьютер — и вуаля, у вас готов полноценный Linux-компьютер, на котором можно делать всё что угодно. В нашем случае — сервер умного дома.

Второй незаменимый компонент системы — модуль NodeMCU V3, который базируется на микросхеме ESP8266, которую можно программировать в среде Arduino. Напомним, Arduino — это отладочная плата с микроконтроллером, стабилизацией питания, подключением к USB для перепрошивки и выходами для управления чем угодно. Программируется на языке C++.

Arduino всем хорош, но модуль из коробки умеет общаться только с компьютером и только через USB-порт, а для системы умного дома это серьёзный минус. Зато модуль NodeMCU V3, который Евгений использовал для своей системы, имеет «на борту» Wi-Fi — а значит, не нужно заморачиваться с дополнительными периферийными устройствами, и данные легко передавать.

В системе также есть несколько датчиков:

  • BME280
    Один из самых крутых погодных сенсоров, отвечает за данные температуры, влажности и давления. Стоит порядка 200 рублей, а взамен предоставляет пользователю полноценную метеостанцию.
  • PIR-сенсор, или датчик движения
    Работает он хитро: сканирует инфракрасное излучение помещения, и если в два момента времени температура сканированного участка изменилась, значит, какой-то тепловой объект попал в поле зрения датчика. Если вас бесит, что он постоянно реагирует на кошку, можно снизить порог чувствительности устройства.
  • RC522
    Датчик, считывающий электронный ключ. От этой маленькой штучки зависит, например, пройдёте вы дальше пропускного пункта или на вас налетит группа быстрого реагирования :)

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

  • SIM800L
    Пожалуй, самая интересная вещь в системе. Это GSM/GPRS-модем. Иными словами, телефон размером с половинку спичечной коробки. В него устанавливается мини-SIM-карта, и за счёт этого система может звонить, принимать звонки, отправлять SMS-сообщения и даже гуглить в интернетах. Так что, если хотите замутить себе хенд-мейд мобилку, то на базе этой штуки у вас точно получится. Не смартфон, конечно, но звонить будет.
  • MH-Z19
    Инфракрасный датчик концентрации углекислого газа, самый дорогой в системе. Зачем он нужен, спросите вы? Если в помещении много CO2 (высокая концентрация, говоря научным языком), человек начинает зевать и становится вялым. Если очень много — может заболеть голова, а если слишком много — можно и сознание потерять со всеми вытекающими. Так что контроль этого параметра — необходимый элемент любой метеостанции.

    У такого датчика есть 2 окошка, под которыми спрятаны 2 капсулы: в одной — азот, в другой — проба воздуха в помещении. Также внутри есть источник инфракрасного излучения (попросту — лампа): когда инфракрасное излучение проходит через газ в капсулах, оно начинает преломляться за счёт молекул газа, и длина волны меняется. Сенсор, который установлен на входе датчика, сравнивает эталонные значения длины волны с текущими и делает вывод о концентрации CO2 в помещении.

    Чтобы система работала как одно целое, центральный узел и периферийные устройства должны как-то между собой общаться, причём общаться максимально стабильно. Изначально Евгений сделал JSON-обмен: элементы обменивались данными по http-запросу. Способ стабильный, но проблема в том, что так никто не делает. Поэтому в текущей системе за обмен данными отвечает протокол MQTT, заточенный специально под обмен информацией между узлами системы. Его создали в 2016-м и сейчас активно используют на больших серьёзных заводах, где требуется автоматизация производства.

    У протокола есть центральная часть — Broker, который отвечает за приём и отправку сообщений всем элементам системы. Элементы же делятся на две группы: Publisher (публикуют данные в Broker) и Subscriber (получают эти данные). Причём, Subscriber может заранее подписаться на какой-то топик (скажем, данные о температуре), которого в системе пока нет. Как только топик появится, данные сразу придут.

    Конфигурация системы

    Физические модули: метеостанция

    В сердце системы — NodeMCU, о котором мы уже говорили выше. К нему подключены три узла:

    1. датчик температуры и влажности BME280;
    2. сенсор CO2 — MH-Z19;
    3. OLED-дисплей, который выводит данные датчиков пользователю.

    Данные между устройствами и сервером передаются по интерфейсу I2С или UART — это интерфейсы для общения. В нашем случае, между микроконтроллерами.

    Физические модули: охрана

    Изначально модуль планировался без узла Arduino, но контроллер NodeMCU просто не успевал отслеживать все изменения в системе и передавать их на большой тачскрин-дисплей. Также в модуль охраны включены датчик движения и сканер RFID ключа-карты. На Arduino-модуль приходится обработка всех параметров с тачскрина. Фактически контроллер запрашивает у Arduino данные с датчиков и отправляет их на дисплей через интерфейс UART.

    Физические модули: GSM

    Этот модуль не имеет корпуса из-за пандемии.

    Все платы Евгений заказывает на китайском заводе — просто потому что так дешевле. Сотрудничает с ними давно, качество плат устраивает. Но когда он в очередной раз заказал у них плату для охранной системы, с пересылкой в Барнаул начались проблемы: пандемия, границы закрыты, все дела. Деньги вернуть могут только за доставку, а за сами платы нет — ведь они их уже изготовили. Всего 2 $, конечно, но всё равно как-то жалко. Правдами и неправдами выяснилось, что в Новосибирск доставка возможна — и через друзей Евгений получил-таки свои заветные железки. Правда, при стоимости плат в 150 рублей доставка вышла в 1000 :)

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

    Сервисы внутри системы

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

    • Openweather — отвечает за прогноз погоды на текущую дату и на неделю, а также график температур в ближайшие дни.
    • Macroscope — отвечает за видеонаблюдение (в доме, где живет Евгений, Управляющая компания установила 18 камер, и за счёт крутого API ко всем 18 не составило труда подключиться).
    • Сервис в самой системе — позволяет получить текущее состояние всей системы: дата и время, продолжительность непрерывной работы для отслеживания сбоев, состояние батареи питания, а также функционал перезагрузки и выключения сервера.

    Центр управления

    Примерная структурная схема того, как устроена система:

    В сердце системы — сервер на фреймворке Vue.js, который отлично подходит для создания пользовательского интерфейса, с использованием фреймворка Nuxt.js, который позволяет создавать приложения на Vue.js. Дополнительно к фреймворкам используется модуль mongoDB (это документоориентированная система управления базами данных с открытым исходным кодом).

    Вещи (физические датчики) публикуют данные в MQTT-брокер, а оттуда они попадают на сервер, где происходит их валидация, обработка, проверка и преобразование. После эти данные попадают в модуль Public, который отвечает за публикацию всех собранных данных для внешних подключений. А уже оттуда данные переходят в Socket IO — библиотеку Java Script, за счёт которой обеспечивается двусторонняя связь между веб-клиентами и серверами в режиме реального времени. На выходе данные получает клиент (например, в браузере). Сервисы работают схожим образом, но передача данных для них обходится без MQTT — информация передаётся сразу через Public и Socket IO «наружу».

    Важная часть системы — модули скриптов и автоматизаций. Скрипты, или, по-другому, сценарии позволяют делать что-либо в системе при помощи нажатия кнопок. Можно добавить группу действий (открыть окна, включить вентиляцию, включить или выключить что-либо), и скрипт выполнит их в заданной последовательности.

    Когда задаётся сценарий, нужно выбрать целевую точку: либо отправить команду в узел «вещи», либо в «сервис», либо отправить http-запрос для webhook — функционал для уведомления сторонних сервисов. И конечно, каждой из них можно дать название сценария и прикрепить к ней иконку.

    Запуск набора сценариев по конкретному событию происходит за счёт автоматизации. Например, если вы открыли дверь, система должна включить свет. Чтобы задать автоматизацию, сначала указывается событие запуска: дата, параметр или автоматизация. Например, 3-го числа каждого месяца, если идёт дождь, нужно напоминать взять с собой зонт :) Внутри автоматизации можно указывать и другие автоматизации. Например, у вас есть два сценария: для будней и для выходных дней. Так вот, вторая автоматизация проверит, какой сегодня день, и только потом запустится автоматический сценарий выходного или рабочего дня. Такая механика даёт неограниченную вложенность автоматизаций, чтобы создавать максимально сложные сценарии, комбинируя типы событий «и» с «или».

    Когда событие и его параметры указаны, система выбирает подходящий сценарий. Запуск проверки сценариев происходит лишь тогда, когда какой-либо параметр в системе изменился.

    Ключевые характеристики системы

    • Софт реализован на Nuxt. js (с использованием Vue. js и MongoDB).
    • Автономная работа сервера — в районе 5 часов (если отключится внешнее питание, система проработает примерно столько за счёт батареи).
    • Запуск приложения происходит через утилиту PM2 process manager (рабочий диспетчер процессов для приложений Node. js) — работает максимально просто: устанавливается в систему, вы пишете команду «старт», и всё работает. Может одновременно запустить столько процессов, сколько есть ядер в системе. Например, если ядра 4, можно запускать параллельно 4 сервера, разделяя между ними трафик на случай, если какой-то из них «упадёт».
    • Подключение происходит по Wi-Fi, причём каждый узел системы способен самостоятельно восстанавливать подключение, если оно отвалится.
    • Каждый элемент системы может работать как отдельное устройство — это было принципиальное условие на старте.
    • Разработка этой версии заняла полгода — Евгений инженерил в свободное время: за час до работы и в обеденный перерыв по будням.

    Как происходит обмен данными

    Есть два основных канала, которые по факту являются топиками в MQTT:

    1. Канал данных — по нему все элементы системы шлют данные на сервер. Данные делятся на типы: строка, справочник (набор предопределённых данных вроде «вкл» и «выкл» для охранной или метеосистемы), число, да/нет.
    2. Канал управления — по нему сервер отдаёт команду какому-либо устройству. Данные также передаются, делясь на типы: либо кнопка, либо строка. В ответ на команду устройство, сервис или вещь возвращает результат выполнения — статус-код: 1 — всё хорошо; 2 — сейчас выполнить нельзя (скажем, нельзя включить тревогу, если помещение не поставлено на охрану); 3 — всё плохо.

    Почему ничего не получилось с Google Assistant

    Google Assistant — тот самый сервис, который отвечает за запросы «окей, Гугл. ». Аналог Siri от Apple. И конечно, у него есть своё API и среда для подключения умных устройств в экосистему Google Assistant, чтобы можно было сказать «окей, Гугл, включи охранную систему» или «окей, Гугл, какая погода сегодня?». Запрос пройдёт через сервера Гугла, вернётся к вам на устройство, и оно выдаст результат.

    Я подумал «круто!», готовое нативное приложение для телефона на Android и как раз годится для системы «умный дом». Начал подключать. Если кто-то видел документацию сервисов Гугла, те меня поймут: я офигел их читать. Во-первых, на английском. Во-вторых, многобукаф и написано очень мудрёно.

    Я подписан на ютуб-канал одного разработчика, которому удалось подключиться к экосистеме Google Assistant. После своих неудачных попыток я решил написать ему — он ответил и даже помог мне с подключением. Но в первый же день я разочаровался: приложение Google Home — сырое, а его русская версия и подавно. Но самое главное — система заточена под управление брендовыми устройствами: например, умной рисоваркой, которой можно управлять через Wi-Fi. Или умной колонкой Google Station, с помощью которой реально можно управлять хоть всем домом, но которая по-русски не понимает. Мои же устройства кастомные, и под них в экосистеме Google Assistant ничего нет. Так что всё было зря.

    Пробовал Евгений и яндексовскую Алису — она лучше из-за адекватного русского языка, но и её конфигурация ущербная. В итоге он понял, что с готовыми решениями просто не судьба :)

    Сколько стоило создание системы

    Самое дорогое — микрокомпьютер Raspberry PI 3b+ и вообще весь блок центрального управления. Он вышел по стоимости чуть больше 4 тысяч рублей. А общий бюджет проекта составил 9 540 рублей без учёта расходов на пластик для печати корпусов и мелких деталек, которые уже были в арсенале у Евгения.

    Планы

    Сейчас в планах создание мобильного приложения с красивым интерфейсом, чтобы «умный дом» был всегда в кармане и чтобы вместо SMS приходили push-уведомления. Также Евгений планирует добавить управление светом и входным замком.

    Сейчас на рынке полно светодиодных люстр с пультом дистанционного управления, в которые можно встроить устройство-контроллер и включить его в систему «умного дома».

    Среди замков на рынке есть интересное решение — замки Sherlock, управляемые через Wi-Fi со смартфона. Евгений хочет собрать нечто подобное, только чтобы со стороны подъезда вместо электронного дисплея было гнездо для RFID метки. Но самое главное — замок должен сигнализировать о том, что он не закрыт (признайтесь, у вас не раз было такое, что вы проспали всю ночь с открытой дверью, правда?).

    Также в планах реализовать функцию «разбудить по сети». Это когда при нажатии специальной кнопки роутер отправляет команду по mac-адресу устройства — например, телевизора, — и велит ему включиться. За счёт этого функционала можно настроить сценарии. Скажем, сценарий «хочу работать»: включить компьютер, выключить телевизор, закрыть шторы, выгнать из комнаты всех домашних :)

    Но самая крутая штука, которую Евгений хочет воплотить, — это подключение ZigBee-устройств. ZigBee — это стандарт общения между гаджетами или попросту протокол передачи данных. Грубо, — аналог подключения по Wi-Fi. Основное преимущество такой технологии — низкое потребление энергии. Но из-за маломощности и дальность работы тоже меньше, чем у Wi-Fi (хотя в свежих версиях этот недостаток, вроде бы, пофиксили).

    Организовать сеть ZigBee можно тремя вариантами конфигураций:

    Координатор — устройство, которое собирает и отправляет данные всем остальным устройствам сети. Если сеть длинная (большая квартира, толстые стены), в ход вступают роутеры — они получают сигнал от координатора, усиливают его и транслируют на конечные устройства. Они могут прятаться в обычных бытовых предметах: настольных лампах или увлажнителях. Фишка в том, что вся ZigBee-система выбирает тип подключения сама, исходя из условий в каждом конкретном случае: координатор пытается через роутеры найти все возможные устройства, чтобы создать сеть.

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

    Да, я не скрываю, что думал о коммерческой составляющей. Даже когда-то в самом начале, пока у меня была только сырая версия метеостанции, я рассказал о ней в чатике своего дома. И один из соседей даже интересовался.

    Но я понимаю, что мне никогда не переплюнуть Xiaomi, IKEA или Aqara банально по цене: даже если я найду китайцев, которые сделают партию по оптовым ценам с готовыми платами, это всё равно получится дороже, чем устройство от того же Xiaomi. Ну и вдобавок моё устройство не будет таким красивым, как у них.

    Как система выглядит для пользователя

    Что пользователь видит в браузере:

    Ну вот, теперь вы всё или практически всё знаете о системе «умных домов» и даже сможете поддержать разговор с инженером-электронщиком. А пока — стэй тюнед, как говорится: впереди много интересного!

    Источник

  • Adblock
    detector