Статья

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

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

Решил я привести в более упорядоченный вид все мои автоматизации в доме, и первым шагом решил разместить управление светом по комнатам. Одно флоу - она комната. В процессе реализации моей задачи я понял, что очень много повторяющихся элементов в моих автоматизациях для управления светом, причем задачи - плюс/минус одинаковые. Зная о наличии в 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 ноды сенсора.

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

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

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

1

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



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