Открытая система управления “умным домом” MajorDoMo

в 14:09, , рубрики: arduino, diy или сделай сам, php, автоматизация, Программирование, умный дом, метки: , , ,

В этой статье я расскажу об одном проекте, которым занимаюсь уже довольно продолжительное время и который с некоторых пор доступен широкой публике. Речь идёт о системе управления “умным домом” MajorDoMo (Major Domestic Module), являющейся центральным блоком комплекса программно-аппаратных решений, которые я, в силу своих скромных возможностей, внедряю в своём домашнем хозяйстве.

image

Но обо всём по порядку…

Ограничения использования

Проект не является продуктом в каком-либо виде. Статус проекта – разработка и исследование. Проект не совсем прост в понимании и предназначен для энтузиастов в области домашней автоматизации. Глубокое внедрение и настройка проекта под собственные нужды потребует навыки программирования и хотя бы базового понимания объектно-ориентированного подхода в разработке. Нижеописанные возможности могут быть реализованы не в полной мере либо недостаточно тщательно протестированы. Не допускается использование системы в тех случаях, когда от надёжности функционирования элементов системы может зависеть жизнь либо здоровье людей.

Но не будем о мрачном :)

Концепция

В основу проекта заложено несколько фундаментальных принципов, которые определяют направление развития.

Принцип первый (“концептуальный”): умный дом – это не только (и не столько) “железо”.

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

Принцип второй (“приземлённый”): взаимодействие элементов системы строим на HTTP-протоколе.

Во-первых, наличие сети дома не является чем-то “из ряда вон” – Ethernet/Wi-Fi прост в развёртывании, гибок в настройке, и, во многих случаях, оно уже есть в наличии. Во-вторых, HTTP-доступ встраивается во всё большее количество устройств – от специфичных контроллеров до сетевых камер, не говоря уже о наличии HTTP-API протоколов во многих приложениях и сервисах. Кстати, этот принцип не исключает интеграцию зоопарка специфичных протоколов и устройств, но только через вспомогательные программные либо аппаратные контроллеры. В рамках этого принципа стоит сказать о внутреннем мире системы – она работает на базе веб-сервера и интерфейсом пользователя является веб-сайт, так что получить доступ к управлению можно с любого устройства, имеющего веб-браузер.

Принцип третий (“гибкость в интеграции”): глубина интеграции системы определяется потребностями пользователя (ну и степенью доверия к системе).

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

Принцип четвёртый (“лёгкость на подъём”): систему должно быть легко установить, чтобы посмотреть и что-то попробовать.

Установка на Windows-компьютер не сложнее установки любого другого приложения. Для Linux-системы не сложнее поднятия сайта на локальном веб-сервере. Не нужно вообще никакого “железа” — можно пользоваться инфо-приложениями и программировать реакцию на данные из интернета.

Но отвлечёмся от теории и перейдём к практике :)

Возможности

Ниже я перечислю возможности, которые были реализованы с помощью MajorDoMo. На сайте проекта собирается описание различных вариантов использования — я считаю, что это даёт самое наглядное представление о системе.

Итак…

  • Утром (не раньше 6 и не позже 11) при обнаружении первого движения в любой из комнат (кроме спальни), система рассказывает о текущем состоянии (температура на улице, время рассвета/заката) и включает музыку (случайную папку из добавленных в “избранное”)
  • При открытии гаражных либо въездных ворот система об этом сообщает. Так же напоминает, если они не закрыты (каждые 15 минут, но легко отключается если нужно)
  • Постоянно контролируется температура в контуре отопления — при выходе из номинального диапазона, идёт уведомление голосом и на скайп (к примеру: “Температура котла 65 градусов цельсия. Внимание — выше нормы и продолжает расти!”)
  • Система знает какая температура на улице и в комнатах дома
  • Система может принимать команды через внутренний чат, через skype, со смартфона (включая голосовое управление)
  • Интерфейс системы доступен на любом устройстве в домашней сети, а так же через интернет (закрыто паролем). Сам интерфейс оптимизирован для мобильных устройств (используется jQueryMobile).
  • В интерфейсе системы есть доступ к изображению с IP-камер и система может реагировать на обнаруженное камерами движение
  • Система управляет отдельными элементами внешнего освещения, включая его через полчаса после заката и выключая за час до рассвета
  • Ведётся контроль доступности устройств, подключенных к домашней сети – по ним можно выявить неполадки, либо определить присутствие кого-то из домашних (по автоматически подключенным к Wi-Fi гаджетам)
  • Система периодически сканирует bluetooth-диапазон на наличие новых либо опознанных ранее устройств (по MAC-адресу) в радиусе действия – по этим меткам так же определяется присутствие людей
  • Смартфон автоматически передаёт системе GPS-координаты и система ведёт историю перемещений пользователя, реагируя на вход/выход из определённых локаций (знает когда я подъезжаю к дому и в будущем сможет открывать въездные ворота, а при подъезде к магазину может напоминать о том, что список покупок не пустой)
  • Через интерфейс системы можно управлять проигрыванием медиа-контента с локального сервера на любом из домашних компьютеров (управление VLC-плеером, а также XBMC медиа-центром)
  • В системы есть приложение для ведения учёта продуктов и составление списка покупок

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

Железо и софт

В качестве головного устройства используется обычный PC под управлением MS Windows, однако система может быть установлена и на Linux-компьютер – потребуется некоторая адаптация, но в целом почти всё работает одинаково на обоих системах прямо “из коробки”. В качестве платформы используется веб-сервер Apache, база данных MySQL и, уже упомянутый, PHP. Большая часть функционала исполняется через веб-сервер, но дополнительно запускается так называемый скрипт основного цикла – от отвечает за запуск задач по таймерам.

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

Первоначально базовым аппаратным модулем для общения с внешним миром являлся контроллер Arduino с Ethernet shield-ом на “борту” и подключенными к нему датчиками. Контроллер подключен к домашней сети и его задача инициировать HTTP-запросы к центральной системе при изменениях значений датчиков. Другой вариант прошивки контроллера позволял использовать его как устройство управление реле через встроенный web-сервер. Таких контроллеров может быть сколько угодно. Позже был сделан программный адаптер, позволяющий использовать Arduino без ethernet, а подключенный напрямую к компьютеру по USB. Принципиальный схемы контроллера и исходный код прошивок так же доступен на сайте проекта.

Кроме Arduino в систему была встроена поддержка контроллера 1-wire сети. В данном случае система умеет общаться с сетью через модуль OWFS, который сам по себе кросс-платформенный и отвечает за взаимодействие непосредственно с “железом”.

Из дополнительной периферии можно отметить Bluetooth-адаптер, задача которого в сканировании MAC-адресов имеющихся в эфире устройств.

Про Ethernet-сеть, WiFi и настройку доступа из-вне я здесь останавливаться не буду – это отдельная тема и по ней можно найти много информации.

В общем-то и всё. Дальнейшее развитие поддержки “железных” протоколов будет осуществляться по мере необходимости :)

Планы

Планов море! :) Во-первых, с увеличением числа людей, пробующих систему у себя, всплывают ошибки и пожелания – что, в общем, хорошо. По возможности эти запросы будут закрываться.

Далее, будет доведена до ума мульти-язычность интерфейса – это уже заложено, но пока интерфейс смешанный: что-то на русском, что-то на английском, а что-то вовсе под интересными псевдонимами типа “SCRIPT_DESCRIPTION”.

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

Есть некоторые заделы по развитию системы в сторону реакции на шаблоны поведения пользователей, когда будут автоматически выделяться последовательности событий и предлагаться их автоматизировать (если система “видит”, что утром, выходя из спальни, я прохожу через коридор и включаю свет в ванной, и это повторяется NN раз, то почему бы не предложить эту последовательность использовать – например, включая свет автоматически, либо использовать эту последовательность для дополнительного действия – включения кофеварки). Но это ещё только предмет изысканий.

Вместо заключения

Статья вышла скорее обзорной, нежели технической. Пожалуй, она таковой и задумывалась.

Сайт проекта: smartliving.ru/

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

Распространяется система под MIT-лицензией, т.е. практически без каких-либо ограничений (включая коммерческое использование), но с обязательным указанием авторства.

Исходный код системы так же полностью открыт и доступен в Google-code: code.google.com/p/majordomo-sl/

Пользуясь случаем, приглашаю заинтересованных к совместной работе над проектом – задач полно, всем хватит :)

Автор: Jey

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js