🔴

Node-RED

Визуальное программирование сценариев автоматизации
Профессиональный инструмент автоматизации
Node-RED — это мощная система визуального программирования, встроенная в RealIoT. Изначально разработана командой IBM в 2013 году. Node-RED является бесплатным ПО с открытым кодом, распространяется под лицензией Apache License 2.0. С помощью Node-RED вы можете создавать сложные сценарии автоматизации, соединяя готовые блоки (узлы) в цепочки действий — просто перетаскивая элементы мышью.

Доступ к Node-RED

1 Откройте редактор

Node-RED встроен в систему RealIoT и запускается автоматически вместе с сервером.

Перейдите в режим редактирования и нажмите кнопку "Сценарии" внизу страницы.

На открывшейся странице справа вверху нажмите кнопку "Node-RED":

Как открыть Node-RED
Если появится форма входа, то надо ввести точно такой логин и пароль, как для входа в систему RealIoT. Откроется редактор Node-RED с визуальным интерфейсом для создания сценариев.

Интерфейс Node-RED

После открытия вы увидите три основные области:

Как открыть Node-RED

1. Левая панель (Palette) — библиотека доступных узлов (nodes):

  • 📦 common — базовые узлы
  • 📦 function — логика и обработка
  • 📦 network — сетевые операции
  • 📦 sequence — работа с массивами
  • 📦 parser — парсинг данных
  • 📦 storage — хранение данных
  • 📦 realiot ⭐ — специальные узлы для RealIoT

2. Центральная область (Flow Editor) — рабочее пространство для создания сценариев

3. Правая панель — информация и настройки узлов

Специальные узлы RealIoT

В категории "realiot" доступны 4 кастомных узла, созданных специально для RealIoT:

🔵 realiot state (realiot-state-changed)

Назначение: Триггер — мониторинг изменения состояния устройств

Иконка: синяя с символом ⭕

Входы/Выходы: 0 входов → 1 выход (триггерный узел)

🟢 realiot call (realiot-call-service)

Назначение: Действие — отправка команд устройствам (вкл/выкл/переключить)

Иконка: зеленая с символом ▶️

Входы/Выходы: 1 вход → 1 выход

🟡 realiot get state (realiot-current-state)

Назначение: Чтение текущего состояния одного устройства

Иконка: оранжевая с символом ❓

Входы/Выходы: 1 вход → 1 выход

🟠 realiot get multiple (realiot-get-multiple)

Назначение: Чтение состояния нескольких устройств одновременно

Иконка: оранжевая с символом 📋

Входы/Выходы: 1 вход → 1 выход

Перед тем как выполнять примеры ниже, нужно создать рабочее поле и разместить на нем все датчики и исполнительные уcтройства, которые будут использоваться в Node-RED.

Пример 1: Включить освещение при движении

1 Перетащите узел-триггер

Из левой панели "realiot" → перетащите "realiot state" на рабочую область.

2 Настройте триггер

Дважды кликните на узел. Откроется окно настроек. Заполните поля:

  • Name: Датчик движения коридор (отображаемое имя)
  • Workspace: Третий этаж НИЛ АП ⭐ (обязательно! - из рабочего поля)
  • Device SN: 0x54ef441000c02a28 ⭐ (серийный номер датчика или его имя)
  • State field: выберите occupancy из спадающего меню "Выбрать параметр"
  • ifState: true (срабатывать при обнаружении движения)
  • ☑ Only on change (игнорировать повторы)
  • Перетащите из левой панели узал "debug" и соедините его с выходом узла датчика движения.

Нажмите красную кнопку "Deploy" вверху окна Node-RED. Вытажите правую паель отладки Node-RED и нажмите на ней значок в виде жучка (debugging). Если теперь датчик обнаружит движение, то в поле "debugging" появится отладочное сообщение со значением переменной "occupancy", равным true:

Как открыть Node-RED
3 Добавьте узел действия

Перетащите "realiot call" на рабочую область. Этот узел будет отправлять данные актуатору (в нашем случае - zigbee реле).

Дважды кликните и настройте:

  • Name: Включить свет коридор
  • Workspace: Третий этаж НИЛ АП
  • Device SN: 0x54ef4410009b3f93
  • Command: on

После того как вы введене серийный номер устройства Device SN, появится заполненное спадающее меню "Выбрыть параметр". В нем можно выбрать параметр из списка параметров данного актуатора, как показано на следующем рисунке. Нажмите [Done]

Как открыть Node-RED
4 Соедините узлы

Наведите курсор на правый край узла "realiot state" → появится маленький кружок → кликните и протяните линию к узлу "realiot call".

[🔵 Датчик движения] ──→ [🟢 Включить свет]
5 Разверните (Deploy)

В правом верхнем углу нажмите красную кнопку [Deploy].

Сценарий запущен! Теперь при обнаружении движения будет включаться свет.

Пример 2: Автовыключение света через 5 минут

Дополним предыдущий сценарий автовыключением:

Шаг 1: Из категории "function" → перетащите узел "delay"

Шаг 2: Дважды кликните на delay и настройте: For: 1 minutes

Шаг 3: Добавьте еще один "realiot call" с командой off

Шаг 4: Соедините узлы:

[🔵 Датчик движения] ──→ [🟢 Включить свет]
                        └──→ [⏱️ Задержка 5 мин] ──→ [🟢 Выключить свет]

Шаг 5: Нажмите [Deploy]

Теперь свет включится при движении и выключится через 1 минуту.

Пример 3: Переключение света кнопкой Zigbee

Шаг 1: Создайте триггер кнопки — "realiot state":

  • Name: Кнопка спальня
  • Workspace: Home
  • Device SN: button_bedroom_001
  • State field: action
  • ifState: single (одинарное нажатие)
  • ☑ Only on change

Шаг 2: Создайте действие — "realiot call":

  • Name: Переключить свет спальня
  • Workspace: Home
  • Device SN: light_bedroom
  • Command: toggle (переключение)

Шаг 3: Соедините и нажмите [Deploy]

[🔵 Кнопка спальня] ──→ [🟢 Переключить свет]

Пример 4: Контроль температуры

Включить обогреватель при температуре < 18°C

Шаг 1: Триггер по таймеру — узел "inject" из категории "common":

  • Repeat: interval
  • every 10 minutes (проверять каждые 10 минут)

Шаг 2: Читаем температуру — "realiot get state":

  • Name: Температура комната
  • Workspace: Home
  • Device SN: temp_sensor_room
  • State field: temperature

Шаг 3: Условный оператор — узел "switch" из категории "function":

  • Property: msg.payload
  • 1: < 18 (если меньше 18)
  • 2: >= 18 (если 18 или больше)

Шаг 4: Два действия — "realiot call":

Узел 1 (Включить):

  • Name: Включить обогреватель
  • Device SN: heater_room
  • Command: on

Узел 2 (Выключить):

  • Name: Выключить обогреватель
  • Device SN: heater_room
  • Command: off

Шаг 5: Соедините узлы:

[⏰ Inject каждые 10 мин] ──→ [🟡 Температура] ──→ [⚙️ Switch]
                                                        ├─ 1 ──→ [🟢 Вкл обогреватель]
                                                        └─ 2 ──→ [🟢 Выкл обогреватель]

Пример 5: Уведомление в Telegram

Задача: Отправить сообщение в Telegram при обнаружении протечки.

Шаг 1: Триггер датчика — "realiot state":

  • Name: Датчик протечки ванная
  • Workspace: Home
  • Device SN: leak_sensor_bathroom
  • State field: water_leak
  • ifState: true
  • ☑ Only on change

Шаг 2: Формируем сообщение — узел "function":

msg.payload = { chat_id: "123456789", text: "🚨 ВНИМАНИЕ! Обнаружена протечка в ванной!\n" + "Время: " + new Date().toLocaleString() }; return msg;

Шаг 3: Отправка — узел "http request" из категории "network":

  • Method: POST
  • URL: https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage
  • Return: a parsed JSON object
[🔵 Датчик протечки] ──→ [⚙️ Function] ──→ [📤 HTTP Telegram]

Работа с Zigbee устройствами

Multi-channel реле

Для управления отдельными каналами используйте поле "Channel/field":

  • Device SN: relay_4ch_kitchen
  • Command: on
  • Channel/field:
    • state_l1 ← канал 1
    • state_l2 ← канал 2
    • state_l3 ← канал 3
    • state_l4 ← канал 4
Кнопки с разными действиями

В поле State field выберите action, затем в ifState укажите тип нажатия:

  • single — одинарное нажатие
  • double — двойное нажатие
  • hold — удержание
  • single_left — левая кнопка
  • single_right — правая кнопка
  • hold_left — удержание левой
  • hold_right — удержание правой

Полезные стандартные узлы

Из категории "function":

  • switch — условный оператор (if-else)
  • change — изменение значений msg
  • function — произвольный JavaScript код
  • template — формирование текста по шаблону
  • delay — задержка выполнения

Из категории "common":

  • inject — таймер/триггер по расписанию
  • debug — отладка и просмотр данных
  • comment — комментарии в flow

Из категории "sequence":

  • split — разделение массивов
  • join — объединение данных
  • sort — сортировка

Сохранение и экспорт

Сохранение сценариев

После любых изменений нажмите [Deploy] в правом верхнем углу.

Сценарии автоматически сохраняются в файл /opt/realiot-web/node-red-data/flows.json
Экспорт flow
  1. Выделите все узлы (Ctrl+A)
  2. Меню → ExportClipboard
  3. Скопируйте JSON
  4. Сохраните в файл для резервной копии
Импорт flow
  1. Меню → ImportClipboard
  2. Вставьте JSON
  3. Нажмите [Import]
  4. Разместите импортированные узлы на рабочей области

Важные моменты

Обязательные поля в узлах RealIoT:
  • Workspace — должен совпадать с именем рабочего поля
  • Device SN — серийный номер устройства, указанный в "Свойствах" устройства на рабочем поле
  • Без корректного заполнения этих полей узел не будет работать!
Типичные ошибки:
  • ❌ Неправильное имя Workspace (с опечаткой)
  • ❌ Неправильный Device SN (не совпадает с Device SN на рабочем поле)
  • ❌ Забыли нажать [Deploy] после изменений
  • ❌ Не выбран параметр в State field
Советы для эффективной работы:
  • 💡 Именуйте узлы понятно — это упростит понимание сценария
  • 💡 Используйте комментарии (узел "comment") для пояснений
  • 💡 Группируйте сложные flow на разные вкладки (tabs)
  • 💡 Тестируйте по частям — используйте debug после каждого узла
  • 💡 Не забывайте Deploy — изменения применяются только после нажатия кнопки
  • 💡 Делайте экспорт важных flow для резервного копирования

Преимущества Node-RED перед If-Else

Node-RED подходит для:

  • ✅ Сложной логики с множественными условиями
  • ✅ Обработки данных (математические операции, фильтрация)
  • ✅ Интеграции с внешними API и сервисами
  • ✅ Работы с массивами данных от нескольких устройств
  • ✅ Создания пользовательских функций на JavaScript
  • ✅ Визуализации сложных сценариев

If-Else сценарии подходят для:

  • ✅ Простых правил "если-то"
  • ✅ Быстрой настройки без знания программирования
  • ✅ Типовых задач автоматизации
Вы можете использовать оба метода одновременно! Простые сценарии создавайте через If-Else, а сложные — через Node-RED.

✅ Визуальное программирование освоено!

Node-RED открывает неограниченные возможности для автоматизации.
Экспериментируйте, создавайте сложные сценарии и делитесь ими с сообществом!

×
← Назад к справке