[Разработка на Raspberry Pi, 3D-принтеры, Умный дом, DIY или Сделай сам] Умный дом как хобби

Автор Сообщение
news_bot ®

Стаж: 6 лет 4 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
20-Авг-2020 14:35

Когда-то в блоге мы рассказывали, как наш руководитель отдела обучения и замечательный программист Евгений создал марсианские часы и заодно выиграл в конкурсе. А потом — как он же сконструировал систему «Умный дом» своими руками. Так вот, сегодня снова поговорим о 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 есть плагины для быстрой настройки, но с ними непросто. Поэтому чаще конфигурация такой системы делается вручную (приходится писать код): проще укусить себя за локоть. А если уж нужно писать код, так лучше свой собственный.
Всё заново: система «умного дома» своими руками
В новой, написанной ручками, системе есть три узла:
  • Вещи — осязаемые элементы системы: датчики, сенсоры и вообще всё, что можно взять и потрогать руками.
  • Сервисы — виртуальные модули, пока их три: видео-камеры, прогноз погоды и данные самой системы.
  • Центр управления с двумя основными компонентами: 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, о котором мы уже говорили выше. К нему подключены три узла:
  • датчик температуры и влажности BME280;
  • сенсор CO2 — MH-Z19;
  • 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 — сейчас выполнить нельзя (скажем, нельзя включить тревогу, если помещение не поставлено на охрану); 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. Ну и вдобавок моё устройство не будет таким красивым, как у них.
— Евгений, разработчик

Как система выглядит для пользователя
Физические устройства:



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










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

Похожие новости: Теги для поиска: #_razrabotka_na_raspberry_pi (Разработка на Raspberry Pi), #_3dprintery (3D-принтеры), #_umnyj_dom (Умный дом), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_umnyj_dom (умный дом), #_raspberry_pi, #_soft (софт), #_3d_printery (3d принтеры), #_dyi, #_razrabotka_na_raspberry_pi (
Разработка на Raspberry Pi
)
, #_3dprintery (
3D-принтеры
)
, #_umnyj_dom (
Умный дом
)
, #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 04-Июл 20:12
Часовой пояс: UTC + 5