Домашняя автоматизация с ioBroker

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

В данной статье хочу осветить автоматизацию дома и как с помощью Open Source проекта освещать (и не только) свое уютное жилище. Ах да, чуть не забыл сказать, что вся автоматизация происходит на JavaScript!
0664db32458e46c88ac054cf6c76fd4a
Для всех любителей JS прошу под кат

Для начала, немного сухой теории и демагогии на тему умного дома.
Каждый понимает под этим термином что то своё. Кто-то включает свет в ванной с помощью датчика движения и считает дом уже умным, а для кого-то и дом из IronMan (J.A. R.V.I. S.) не достаточно умён, потому что этот дом в конце концов разнесли в пух и прах, а значит он не смог себя защитить от каких-то людишек на вертолётах.
Но шутки в сторону — все эти люди правы. Просто уровень «разума» дома тоже разный, как IQ у людей. Есть маленькие «дети», которые умеют включать лампочку, а есть, закончившие университет, «академики» и способные не только включать свет, но и выключать его :)

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

Список можно продолжить, но я хотел бы остановится на наиболее используемых направлениях. Для каждой области автоматизации существует своя система устройств, каждая со своими протоколами, приложениями и способами управления. На данный момент не существует ни одного производителя способного предоставить устройства в каждой из областей автоматизации. Но есть некоторые, которые продвинулись особенно далеко: Samsung, Google, Apple.
Каждый из производителей при этом, обязательно изобретает свой велосипед протоколов взаимодействия и никто не хочет уступать другому. Хотя протокол взаимодействия от google Weave кажется наиболее продуманным.

Существуют также попытки создать протокол независимо от производителя. В этом направлении дальше всех продвинулись IBM с MQTT. Но, к сожалению, там отсутствует стандартизированный канал о получении описания об устройствах, таких как единицы измерения, расположение/комната, функциональная группа (жалюзи или свет) и прочая мета информация.

А что понимаю под умным домом я или как было сказано выше, какой уровень автоматизации устраивает меня?
Я много экспериментировал и пришел к выводу, что все эти управления с телефона, управление голосом или построение графиков температуры — это всего лишь игрушки.

Настоящий умный дом должен быть незаметным. Должно быть лишь заметно, когда умный дом перестает работать.

Умный дом должен наблюдать через датчики за людьми и подстраивать среду обитания под них (нет, конечно он не должен отсылать эту информацию гуглу). Регулировать температуру, при этом экономя тепло на обогрев; включать, при входе человека в комнату, подсветку не ослепляя его или прикрывать жалюзи на окнах, если включен телевизор и окно бросает блики на изображении. Сценариев — бесконечное множество. Особенно интеллигентные дома должны сами распознавать последовательности и зависимости событий и предлагать новые правила автоматизации.

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

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

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

Потом идёт бездетная молодая семья с умеренной любовью к техническим средствам. Важно что бы каждый из них не разлучался с сотовым телефоном.

Самым сложным случаем является семья с детьми (чем большее, тем сложнее). Дети просто не поддаются автоматизации. «Ну и что папа, что я забыл (а) телефон. Он мне во дворе не нужен.». И все скрипты распознавания нахождения людей в помещении и основанные на них правила включения сигнализации, оказываются бесполезными. (Мой случай)

Но давайте вернёмся всё же к тому как сделать всё это у себя дома и сделать своё место обитания комфортнее.

Что такое ioBroker?
Это интеграционная платформа для интернета вещей и служит центральным сервером для:

  • умного дома
  • автоматизации зданий
  • assisted living


*Кстати буду благодарен за перевод последнего термина.

ioBroker это система способная соединить весь салат протоколов и устройств между собой.

Какая-то строительная фирма решила строить умное жильё в Гамбурге и они собрали все возможные устройства в одной квартире и предлагают для управления всем этим зоопарком восемь приложений для телефона (кстати только apple). Здесь мне надо, наверное, написать: ты можешь себе представить, восемь приложений, Карл!
С ioBroker это было бы не нужно.

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

Отличие ioBroker от других систем автоматизации это модуль web визуализации в браузере — vis. На его разработку была затрачена половина времени необходимого для разработки всего ioBroker.
3787721c19fb40a6bc374ee56323a000
67388c074c2f4268b27971f74e6eec1b

Также преимущество ioBroker заключается в огромном количестве доступных npm пакетов — 286000.
1aebb07f8fc1488b80095c6063b1e042
*Информация взята с http://www.modulecounts.com/.

Конечно качество пакетов не всегда на высоте, но как правило для одной и той же проблемы существует несколько разных пакетов и количество в данном случае перерастает в качество. Нужно лишь выбрать нужный пакет. Таким образом подключение новых протоколов лишь дело техники.
Я таким образом реализовал подключение OPC UA, Sonos, MQTT, Telegram, Pushover, Homematic, Z-Wave, Simatic и ещё большого количества других систем.
56a92835633849aaa518e7524aab1e01
Большой упор сделан на возможность удобной настройки и конфигурации и это съедает львиную долю времени в отличие от FHEM и, например, OpenHAB, где настройки происходят посредством конфигурационных файлов.

Open Source Альтернативы.
e8d8e9e4d5c34f8d9911e8e2866e65f8
— OpenHAB — популярная Java платформа автоматизации. На данный момент насчитывается до 160 драйверов или модулей.
ed5a4ea1b334458ab4f2fa34f5b3f98c
— FHEM — распространенная в Германии, система автоматизации на Perl с огромным количеством драйверов — 340. Вот только настройка системы оставляет желать лучшего и отсутствие стандартизированной мета-модели затрудняет расширение системы.
042eeb9e66e742abad9865580d7bede0
— MajorDomo — довольно зрелая платформа автоматизации на PHP. Можно найти множество статей об этой системе здесь на geektimes.
ed2be4907f064acd8f3840b3f8c08cf2
— Domoticz — система написанная на C/C++ с очень достойным графическим интерфейсом. Но за счет того, что на C/C++ трудно писать быстро, то с ограниченным набором драйверов/модулей.

Вообще много интересных систем автоматизации дома можно найти здесь. В основном разделение систем происходит по языкам программирования (Java, C/C++, Python, Javascript, PHP, …) и по железу (Vera, Raspberry PI, Synology, Mediola, …). Все они заслуживают право на существование хотя некоторые могут больше, а некоторые меньше.

На данный момент уровень технической подкованности людей, внедряющих систему автоматизации, довольно высок и они не падают в обморок от слов: линукс, консоль, apt-get. Но когда на форуме появился вопрос: «я установил систему, но не могу сменить папку home на папку ioBroker. Помогите!». Это был звоночек, что начинают подтягиваться не информатики и что систему могут использовать простые пользователи компьютеров.

Все интерфейсы настроек переведены на 3 языка, за исключением специфичных для германии драйверов. Ну зачем русскоговорящему пользователю драйвер поставляющий данные о ценах на бензин в Германии или предупреждения о непогоде от немецкой службы погоды?…
Также без перевода остались драйвера для сугубо русскоговорящего рынка, например драйвер автосигнализации starline.

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

Для написания интерфейса, сервиса и скриптов используется JavaScript. Один из широко распространённых и популярных языков программирования. Сейчас большую популярность набирает Python, но на питоне графическую оболочку для браузера не напишешь. (Да, я знаю о существовании py2js, но ещё не видел ничего достойного созданного этим)

Немного об Open Source проектах.
Как человек, участвующий в open source проекте, могу сказать: раньше я думал, что open source проекты пишутся тысячами людей со всего мира и что им легко написать всё, что угодно. Сейчас могу сказать, что за каждым open source стоит один (иногда в особо крупных проектах — группа людей) и что активны из сообщества лишь один процент пользователей. Просто у больших проектов количество пользователей миллионы и один процент от миллиона это десять тысяч людей. А вот у проектов поменьше это десятки или единицы индивидуумов. Также могу сказать, что один заинтересованный пользователь может сделать больше, чем десять незаинтересованных программистов и важно просто набрать массу пользователей и вероятность появления человека, способного внести весомую лепту становится больше.

Возможности
Я могу сказать, что возможности… безграничны. Помножите количество npm пакетов на количество железа и получится миллион возможностей включить лампочку:
— через telegram
— голосом
— rest API
— web визуализация
— android приложение
— интерфейс для телефонов и планшетов (mobile)
— 340 драйверов из FHEM
— MQTT

Да и ещё проект активно развивается и растёт на 3х языках.

Для заинтересовавшихся — google в помощь. И впредь — я попытаюсь описать не как работает вселенная, а как происходит сообщение между modbus устройством и атомной электростанцией.

© Geektimes