Азы Node-Red: Subflow - зачем нужны и пример использования для управления умным светом

15 февраля 2020, 12:18

Вместо предисловия

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

Subflow (Подпоток) - что это?

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

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

Subflow - для чего и как устроено

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

Environment variable (переменные окружения)

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

В настройках субфлоу созданы следующие переменные окружения:

Toggle_Name - это имя глобальной переменной, значение которой сообщает субфлоу о включенном свете из HomKit или от беспроводного выключателя. Если свет был включен - то при наличии/отсутствии движения он не управляется от датчика движения.

Brightness - имя глобальной переменной Яркости, с которой будет включаться свет.

Color_Temp - имя глобальной переменной Температуры цвета, с которой будет включаться свет.

Dark_Name - имя глобальной переменной о времени суток, значение которой дает разрешение на включение в темное время суток. Можно присвоить это значение различными способами, у меня через Time Range Switch.

Delay - задержка на выключение после последнего события о наличии движения в миллисекундах. 

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

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

К вышесказанному

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

  • На вход постоянно подается статус true от датчика движения и если в течение заданного интервала delay (в миллисекундах) мы не получаем нового значения, то считаем это как отсутствие движения и выключаем свет.
  • При включенном свете вручную, значение глобальной переменной = true по заданному адресу Toggle_Name, управление от датчика движения блокируется и свет будет гореть, пока не выключить вручную.
  • Значение глобальное переменной = true по заданному адресу Dark, разрешает управление светом по датчику движения.

Существует 3 выхода данного субфлоу:

  • верхний - управление с типом данных Object Json,
  • средний - управление на вход HomKit ноды управления лампой,
  • нижний - статус движение для HomKit ноды сенсора.

Если данные датчика движения забираете через Деконз ноду, и светом управляете через Деконз, то настройки там должны быть такие, как на картинках ниже: 

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

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


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (madbob)
    (madbob) отредактировано 5 месяцев назад

    Отличная статья, спасибо

К списку статей

Скидки для сообщества

Ноотехника

+375 17 233-25-45
Промокод:
Sprut
Размер скидки:
10%
Действует у всех официальных представителей. Для применение необходимо указать в поле комментария или при звонке менеджеру.

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Тематические чаты

Похожие статьи

30 августа 2019, 07:28
Несколько нетривиальных способов использования датчика открытия окон/дверей от Xiaomi/Aqara.
02 июля 2020, 07:24
Я хочу поделиться своей разработкой: "умным открывателем пластикового окна". В статье вы найдете все необходимое, чтобы повторить проект и изготовить собственный привод для открывания окна с использованием штатной фурнитуры окна.
18 февраля 2020, 17:06
В данной статье описывается сборка слаботочного эл. щита на базе Wiren Board 6, а так же силового щита для небольшой квартиры.
01 октября 2019, 07:07
"У всякого в умном дому неведомо никому" (с) Народная мудрость
03 апреля 2019, 04:29
Разбираем простейшую задачу по электрическому подключению светодиодной ленты к источнику питания и управлению через Умный дом.
04 апреля 2019, 08:22
Личная жизнь мешает увлечению "умным домом"? Есть решение!
08 апреля 2020, 11:32
Голосовые уведомления через Xiaomi Gateway, Home Assistant и HomeKit. Пример реализации, кейсы применения.
09 января 2019, 17:34
Небольшая статья о том, зачем нужна малина, почему автоматизации в HomeKit это не очень хорошо и чем USB стик лучше отдельного шлюза.
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
06 сентября 2019, 17:03
Кладём на лопатки NodeRed и HomeAssistant с помощью iOS 13.1 и Siri Shortcuts.