У многих, кто интересуется домашней автоматизацией ("Умный дом"), на слуху известные открытые системы автоматизации, на которых можно построить управление: OpenHab, MajorDoMo, Home Assistant, Domoticz, HomeBridge. Но если немного расширить диапазон наблюдения, то можно обнаружить множество программных систем, которые могут предложить схожий функционал, а местами даже больший. Сегодня, расскажу об одной из них — ioBroker. Расскажу обзорно, без погружения в подробности реализации, т.к. каждый элемент потребует отдельной статьи (если потребуется — будет статья).
Что за зверь?
ioBroker — это система автоматизации, разработанная на платформе Node.js (также как и HomeBridge). Благодаря этому, ее можно развернуть и запустить практически на любой операционной системе или виртуальной машине: Windows, Mac, Linux, в контейнере Docker и даже на Android. Это позволяет масштабировать систему исходя из потребностей: поставить ее на “малину” для дома, квест-комнаты или на сервер для гостиницы.
Система ioBroker, как и большинство систем автоматизации, открытая и расширяемая. Новый функционал или устройства подключаются с помощью добавления “драйвера” или “адаптера” (так называемые плагины ioBroker), который можно установить из официального Store или из git-репозитория.
Большинство действий выполняется из web-интерфейса администрирования и позволяет изменить любые параметры системы (нет необходимости редактировать config-файлы в терминале):
- управление набором драйверов и их параметрами
- мониторинг и изменения объектов системы, состояний и их истории
- разработка сценариев поведения и обработчиков событий
- разработка визуальных Dashboard для управления и представления состояний
- и многое другое.
Пример, как выглядит интерфейс администрирования можно посмотреть тут http://iobroker.click
Как это работает внутри?
Подход ioBroker’а заключается в том, что каждое подключенное устройство или сервис, представляется в виде набора состояний, которые могут изменяться устройством или пользователем. Т.е. устройство раскладывается на элементы и дальнейшая работа происходит с ними и их значениями. Работа с устройствами заключается в подписке на изменение состояний и собственно изменение других состояний в зависимости от ситуации.
Так, например, обычную лампочку можно представить в виде одного состояния, которое будет обозначать включена она или нет. Но если лампочка диммируемая, то нужно еще одно состояние — уровень яркости. Для лампочки меняющей цвет — еще состояния оттенка (hue) и насыщенности (saturation). Для более сложных устройств количество наблюдаемых состояний растет.
Некоторые состояния имеют обратную связь и при их изменении со стороны ioBroker (например, пользователь поменял значение или при выполнении скрипта), значение отправляется обратно на устройство или сервис.
Таким образом, например, можно включить лампочку, вручную поменяв ее состояние в объектах, или переключить режим работы термостата.
Все состояния хранятся в древовидном реестре, который очень напоминает подход с протоколом MQTT, где данные соотносятся с топиками. Поэтому, соответствующий драйвер MQTT легко интегрируется с любыми mqtt-серверами (или брокерами). А также сам выступает в качестве MQTT-сервера/брокера для IOT-устройств, поддерживающих этот протокол.
Поддерживаемые устройства и сервисы
В ioBroker есть, активный по умолчанию, драйвер поиска устройств и автоматической установки драйверов для них. Поддерживаются не только устройства, которые стандартно распознаются, через UPnP, но и просто устройства, которые могут быть найдены по IP адресу или подключены к USB порту.
Благодаря открытой архитектуре в ioBroker постоянно появляются новые драйвера. Сейчас в официальном репозитории их насчитывается порядка 200 (http://download.iobroker.net/list.html), а список автоматически обнаруживаемых устройств постоянно пополняется (https://github.com/ioBroker/ioBroker.discovery#automatically-discovered).
При наличии дополнительного оборудования (различные USB-стики или шилды), можно использовать популярные протоколы: Z-Wave, Zigbee, BLE, KNX.
Можно интегрироваться с другими системами “Умного дома”, контроллерами и хабами: OpenHab, MiHome, HomeMatic, MegaD, Home assistant и другими.
Интерфейсы взаимодействия
Пользователь может взаимодействовать с ioBroker несколькими способами.
Vis-интерфейс
ioBroker обладает самыми гибкими возможностями настройки визуального интерфейса среди открытых систем автоматизации. Можно создать несколько страниц со сценами, на страницах расположить виджеты управления, отображения значений и изображения с камеры. Набор виджетов можно быть произвольный и устанавливаться дополнительными драйверами.
В сети доступен набор страниц визуализации некоторых пользователей, которые поделились ими с разработчиками https://iobroker.click/. Видно, что нет единого подхода к оформлению страницы управления “Умным домом” и каждый делает по своему усмотрению. Это с одной стороны хорошо, т.к. имеется простор для дизайна и нет ограничений. С другой стороны, это сложно неподготовленному пользователю.
Инста-видео зеркала с Vis-интерфейсом
Также, благодаря облачному сервису и Cloud-драйверу, можно получить доступ к визуальным интерфейсам ioBroker из глобальной сети без использования специальных средств (VPN, DynDNS и прочему).
Telegram-бот
После появления Telegram-ботов они оказались очень удобным способом взаимодействия с системами “Умного дома”. Бот принимает команды управления и может выводить любые данные, доступные в системе.
Благодаря драйверу text2command можно отправить текстовое сообщение боту и оно будет разобрано и выполнено. Например, текст “включи свет в детской” выполнит включение состояния, которое относится к “освещению” в комнате “детская”. И таких применений множество: шторы, музыка, отопление, охрана, замок и т.п. По функции очень напоминает Siri, но только текстовую.
Также, через Telegram реализуют канал уведомлений о ситуациях, происходящих в системе. Очень удобно.
iOS Homekit
Естественно, у ioBroker есть возможность интеграции в систему Apple HomeKit. Благодаря драйверу Yahka, в системе можно создавать аксессуары, соответствующие требованиям HomeKit и использовать их на iOS устройствах.
Для этого, в настройках драйвера Yahka необходимо создать виртуальные устройства и связать их характеристики с имеющимися в системе состояниями.
Так, например, создав виртуальное устройство “Лампа” и связав его с состоянием, относящимся к включению/выключению реальной лампы, можно сделать кнопку управления лампой в приложении Дом на iOS. А если подключить и другие дополнительные состояния, то можно управлять и диммируемой лампой.
Датчики, сенсоры, камеры, термостаты, вентиляторы… любые устройства можно отобразить в Homekit и управлять ими через приложение Дом или попросить сделать это Siri.
Нужно только, чтобы реальные устройства, которыми будет управлять Siri были заведены в систему и связать соответствующие состояния с виртуальными устройствами Homekit.
Голосовое управление
Коме Siri, управление голосом устройствами ioBroker возможно и через популярную на западе Amazon Alexa (жаль только не на русском языке). Для этого через облачный сервис ioBroker подключается специальный Alexa Skill и к вашему локальному серверу и выполняет команды от вашей Amazon Dot.
Если нет умной колонки, то выполнять команды по-русски можно через приложения Android Tasker и PAW. Через эти приложения можно преобразовать голосовую команду в текст и отправить в ioBroker, где уже упоминаемый драйвер text2command выполнит ее и сообщит о результате.
Дополнительно, интеграция через PAW драйвер, можно выполнять множество обратных команд на Android-устройстве: осуществлять звонки, писать SMS и воспроизводить голосом текст.
Генерацие голоса из текста выполняется специальным драйвером SayIt, поддерживающего популярные TTS-движки от Google, Яндекс, Amazon. А вывод получившейся речи можно осуществить через колонки, Chromecast или Sonos.
Также, голосовые команды можно принимать через созданную страницу в Vis-драйвере (в браузере Google Chrome) и принимать там ответные голосовые сообщения от ioBroker.
Сценарии
Одна из самых важных частей автоматизации — сценарии. Это логические блоки управления, которые определяют зависимости, поведение и взаимодействие между устройствами и их состояниями.
“Включить свет при обнаружении движения”, “Добавить температуру отопительного контура, при приближении хозяев к загородному дому”, “Отправить в телеграм список состояний датчиков при получении команды”.
Всё это реализуется сценариями.
Для реализации сценариев могут использоваться либо визуальный язык Blockly, либо Javascript, либо TypeScript, либо очень популярный NodeRed.
Основная задача скриптов — описание реакции на происходящие в системе события. Для этого, в скриптах описываются обработчики изменений состояний. Например, при изменении состояния click, относящегося к беспроводной кнопке, изменить набор состояний, относящихся к модулям sonoff, включающих освещение. А при двойном нажатии — отключать свет.
Но более сложное поведение потребует знания Javascript, т.к. множество примеров выполнено именно на нём. Для реализации нужного функционала можно подключить любой npm-пакет и использовать его в скриптах.
И да, сценарии могут выполняться по расписанию.
Сообщество
Большинство пользователей ioBroker находятся в Европе, в Германии и это отражается на специфике сообщества, материалов, уроков, примеров и документации.
Но в последние два года, началось активное развитие русскоязычного сообщества.
Появился соответствующий раздел на форуме, документация, телеграм-чат.
Заключение (личный опыт)
Признаюсь, это единственная система автоматизации, в которую я глубоко погрузился (хотя смотрел на Hass и MajorDoMo). Это стало моё хобби. ioBroker мне интересен своей архитектурой, возможностями и сообществом. На нем сейчас автоматизирую квартиру и дачу.
Большинство из приведенных выше возможностей мне удалось попробовать на себе. Я разобрался и реализовал как простые варианты, так и более хитрые. Разработал пару драйверов для себя и ими стали пользоваться другие пользователи ioBroker.
Я не стану хаять другие системы и не скажу, что это идеальная система. Я хочу обратить внимание на неё и дать её попробовать другим. Да, порог вхождения в написание скриптов требует базовые знания системы, но это везде так (только языки разные). Да, будут сложности с настройкой некоторых драйверов, но всё решаемо. Если кто-то уже через это проходил, значит и у вас получится.
Зачастую, приемы интеграции с устройствами и примеры кода, могут легко быть адаптированы из одной системы автоматизации в другую. А общие рекомендации подходят всем и каждый увлекающийся автоматизацией сталкивается с ними.
И в нашем сообществе это понимают и делятся знаниями независимо от того какую систему автоматизации используют.
Автор: Илья Киров