Статья

Азы Node Red. Сигнализация (контроллер сцен) - зачем нужна и пример работы в HomeKit и Node Red

В качестве предисловия

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

Так вот, одно из интересных возможностей этого устройства - это система сигнализации. При установке плагина для HomeKit появилась возможность управлять состояниями сигнализации через программу "Дом" и использовать автопереключение по геолокации. При переходе на Node Red мне захотелось получить эту опцию обратно, так как я отказался от использования Хаба от компании Xiaomi в качестве устройства управления умным домом из-за его работы через китайские облака, невозможности написать сложные автоматизации,привязки к Wi-Fi и непонятных отказов.

Зачем нужна сигнализация?

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

В программе "Дом" устройство сигнализации представлено переключателем на 4 возможных сцены, которые вы можете увидеть на фото слева.

При срабатывании тревоги, выводится оповещение и на иконке сигнализации вы увидите сообщение - тревога сигнализации.

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

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

Мой вывод, китовая функция сигнализации - это контроллер сцен с получением сигнала тревоги, где ваши автоматизации могут сформировать этот сигнал и сделать это устройство сигнализацией.

Как завести в Homekit

Для того чтобы добавить сигнализацию в Homekit необходимо установить плагин node-red-contrib-alarm. Выглядеть все это будет как на картинке снизу. Ничего сложного, в параметрах входной и выходной ноды задаем формат HomeKit и определяем название панели в одной из нод, а во второй выбираем тоже имя.

Работа в HomeKit и Node Red одновременно

Получить контроллер сцен только в HomeKit недостаточно интересно, так как большинство автоматизаций мы создаем в Node Red и поэтому, есть необходимость задавать и получать статус сигнализации непосредственно из Node Red. Флоу с демонстрацией возможностей данного контроллера сцен со множеством комментариев, непосредственно во флоу, Вы найдете по ссылке. Для начинающих советую прочитать предыдущие статьи про глобальные переменные и функции в Node Red, где я старался разъяснить как это работает и для чего нужно. Все эти навыке использованы во флоу сигнализации.

Пояснения по работе примера по ссылке

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

Плагин node-red-contrib-alarm имеет входную ноду State Changed и выходную Change State. Работает это так: надо отправить запрос на выходную ноду о смене режима и во входной ноде мы получим текущее состояние. Почему я выбрал 2 набора нод по смене режима? Мне так просто было удобно, хотелось работать с цифровыми значениями, а не в формате HomeKit. Одна пара работает в формате HomeKit, а другая работает с цифровыми значениями. Выбор формата происходит внутри нод State Changed и Change State. Для работы флоу я добавил две глобальные переменные: SecuritySet и SecurityStatus. Первая задает режим сигнализации, а вторая показывает текущий статус. Это очень удобно, так как я могу использовать статус сигнализации или менять режим в любом флоу проекта. В правой части картинки показана принудительное задание глобальной переменной при старте Node Red, а смена режимов (используется только для тестирования работы флоу).

В самом верху картинки расположена связка для работы сигнализации с HomeKit, а также введен дополнительный переключатель с интеграцией в HomeKit. Суть этого переключателя - переключение между двух режимов "Дома" и "Не дома". Это сделано для активации этих режимов по сценариям HomeKit c геолокацией, так как напрямую Apple требует подтверждения включения режимов сигнализации. Функция SecuritySystem нужна для преобразования статуса цифровых значений в HomeKit формат (обратная связь если сигнализация меняет статус не в HomeKit). Чуть ниже, смена режимов сигнализации от кнопки Xiaomi (круглая), которая может отдавать 6 состояний, если ее подключить через китовый выход плагина Deconz. При желании, можно организовать определенную последовательность нажатий типа пин-код (3-5-2 для примера), чтобы сделать отключение более безопасным, но это уже другая тема. Еще чуть ниже идет последовательность нод для отправки значения смены режима сигнализации из глобальной переменной, опрос изменения каждую секунду. Если где-то в проекте вы поменяли режим сигнализации, то через секунду он активируется. Теперь посмотрим на картинку снизу.

Вверху находится селектор сообщений статуса сигнализации, которые я отправляю в Телеграмм и на озвучку голосом через TTS, а также я передаю статус сигнализации в глобальную переменную, которую я потом буду использовать в качестве фильтра сообщений. Чуть ниже разместилась нода Alarm, где можно настроить задержку срабатывания выхода (у меня настроена на 15 секунд) и которая отправляет сообщение в Телеграмм, но можно прицепить и какую-нибудь сирену. Еще ниже размещен набор нод для работы со статусами открытия/закрытия входной двери, где я подключил симулятор смены статуса для тестов. Как это работает: при открытии входной двери и при условии, что состояние сигнализации Away ("Не дома") - активируется нода DoorOpened (название режима активации выбирается внутри ноды) и поступает сообщение тревоги. Нода Alarm активирует выход с задержкой 15 секунд и отправляет сообщение в Телеграмм. Сброс тревоги в HomeKit и ноды Alarm можно сделать при смене режима сигнализации. В этом же наборе нод происходит отправка сообщений по статусам открытия/закрытия двери, при условии выбора режима "Не дома". Это реализуется с помощью ноды AND (Плагин node-red-contrib-bool-gate), где в качестве условия использована глобальная переменная статуса сигнализации. Если дверь не закрыта в течении 30 секунд, то тоже происходит отправка сообщения, но в данном примере независимо от режима сигнализации.

Выводы

Сигнализация - по сути контроллер сцен и его наличие в управлении умного дома необходимо. Режимы которые использованы - это исторически сложившееся решение управления домом. Мне не хватает лишь одного "В отъезде" (длительный период отсутствия). Я дополню этот режим за счет дополнительного переключателя в HomeKit.

Все вопросы, пожелания оставляйте в комментариях к статье и я рад буду ответить.


В названии HomKit => HomeKit ?

Node Red => https://nodered.org/">Node-RED

https://nodered.org/">

Облажался немного.

Добрый день, Евгений!

Возможно ли в хомките через Security оповещать о типе инцидента или произвольный текст?  Просто не хотелось бы плодить кучу лишних кнопок, у меня несколько типов датчиков и хотелось бы получать по какому произошла проблема.

Хомкит будет давать сообщение о режиме, который активируется и сообщение что произошло срабатывании. Других возможностей в ките нет. Но НР может это все реализовать и слать в Телеграмм для примера или еще куда -нибудь.

Спасибо.

Обновленная версия флоу пока без Security Switch (добавлю позднее если получится) по ссылке https://sprut.ai/paste/CgeyZ8PT">

https://sprut.ai/pastes/CgeyZ8PT">https://sprut.ai/pastes/CgeyZ8PT

Удалил эту ссылку и обновил флоу по ссылке в статье.

Я правильно понимаю, что отслеживается только 1 действие...открытие двери и всё ? окна/датчики движения - не используете ?:)


Вернуться назад
Вернуться назад