Node-RED — это мощная система визуального программирования, встроенная в RealIoT. Изначально разработана командой IBM в 2013 году. Node-RED является бесплатным ПО с открытым кодом, распространяется под лицензией Apache License 2.0. С помощью Node-RED вы можете создавать сложные сценарии автоматизации, соединяя готовые блоки (узлы) в цепочки действий — просто перетаскивая элементы мышью.
Доступ к Node-RED
Node-RED встроен в систему RealIoT и запускается автоматически вместе с сервером.
Перейдите в режим редактирования и нажмите кнопку "Сценарии" внизу страницы.
На открывшейся странице справа вверху нажмите кнопку "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 выход
Пример 1: Включить освещение при движении
Из левой панели "realiot" → перетащите "realiot state" на рабочую область.
Дважды кликните на узел. Откроется окно настроек. Заполните поля:
- Name:
Датчик движения коридор(отображаемое имя) - Workspace:
Третий этаж НИЛ АП⭐ (обязательно! - из рабочего поля) - Device SN:
0x54ef441000c02a28⭐ (серийный номер датчика или его имя) - State field: выберите
occupancyиз спадающего меню "Выбрать параметр" - ifState:
true(срабатывать при обнаружении движения) - ☑ Only on change (игнорировать повторы)
- Перетащите из левой панели узал "debug" и соедините его с выходом узла датчика движения.
Нажмите красную кнопку "Deploy" вверху окна Node-RED. Вытажите правую паель отладки Node-RED и нажмите на ней значок в виде жучка (debugging). Если теперь датчик обнаружит движение, то в поле "debugging" появится отладочное сообщение со значением переменной "occupancy", равным true:
Перетащите "realiot call" на рабочую область. Этот узел будет отправлять данные актуатору (в нашем случае - zigbee реле).
Дважды кликните и настройте:
- Name:
Включить свет коридор - Workspace:
Третий этаж НИЛ АП⭐ - Device SN:
0x54ef4410009b3f93⭐ - Command:
on
После того как вы введене серийный номер устройства Device SN, появится заполненное спадающее меню "Выбрыть параметр". В нем можно выбрать параметр из списка параметров данного актуатора, как показано на следующем рисунке. Нажмите [Done]
Наведите курсор на правый край узла "realiot state" → появится маленький кружок → кликните и протяните линию к узлу "realiot call".
В правом верхнем углу нажмите красную кнопку [Deploy].
Пример 2: Автовыключение света через 5 минут
Дополним предыдущий сценарий автовыключением:
Шаг 1: Из категории "function" → перетащите узел "delay"
Шаг 2: Дважды кликните на delay и настройте: For: 1 minutes
Шаг 3: Добавьте еще один "realiot call" с командой off
Шаг 4: Соедините узлы:
└──→ [⏱️ Задержка 5 мин] ──→ [🟢 Выключить свет]
Шаг 5: Нажмите [Deploy]
Пример 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: Контроль температуры
Шаг 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: Соедините узлы:
├─ 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
Работа с Zigbee устройствами
Для управления отдельными каналами используйте поле "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
- Выделите все узлы (Ctrl+A)
- Меню → Export → Clipboard
- Скопируйте JSON
- Сохраните в файл для резервной копии
- Меню → Import → Clipboard
- Вставьте JSON
- Нажмите [Import]
- Разместите импортированные узлы на рабочей области
Важные моменты
- ⭐ 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 сценарии подходят для:
- ✅ Простых правил "если-то"
- ✅ Быстрой настройки без знания программирования
- ✅ Типовых задач автоматизации
✅ Визуальное программирование освоено!
Node-RED открывает неограниченные возможности для автоматизации.
Экспериментируйте, создавайте сложные сценарии и делитесь ими с сообществом!