Обзор интерфейса Node-RED
Знакомство с Node-RED: Что это и зачем?
В основе логики автоматизации нашей платформы лежит Node-RED — мощный инструмент визуального программирования, разработанный IBM. Представьте его как центральную нервную систему вашего умного дома или офиса, которая связывает все датчики, исполнительные устройства и сервисы в единый, осмысленный организм.
> 📋 Ключевые понятия:
> * Node-RED: Среда визуальной разработки для потокового программирования. Она позволяет соединять аппаратные устройства, API и онлайн-сервисы в единые логические цепочки.
> * Визуальное программирование: Вместо написания строк кода вы создаете программы, соединяя на экране графические блоки (узлы).
> * Потоковое программирование: Модель, в которой программа рассматривается как поток данных, проходящих через сеть операторов (узлов).
В контексте нашей экосистемы Node-RED выполняет критически важную роль: он является главным инструментом для инженера-инсталлятора и интегратора. Именно здесь вы будете создавать сценарии автоматизации любой сложности: от простого включения света по датчику движения до комплексных алгоритмов управления климатом, безопасностью и энергопотреблением.
Для лучшего понимания представьте конструктор LEGO. У вас есть множество различных кубиков — это узлы (nodes). Каждый кубик выполняет одну простую функцию: один — это кнопка, другой — лампочка, третий — таймер. Когда вы соединяете эти кубики вместе, вы создаете поток (flow) — логическую цепочку, которая представляет собой готовую модель или сценарий. А то, что передается между кубиками, заставляя их работать — это сообщения (messages).
- Узлы (Nodes): Это функциональные блоки в левой части экрана (палитре). Каждый узел отвечает за определенное действие: прочитать данные с датчика, отправить команду на реле, проверить условие, выполнить математическую операцию или отправить уведомление.
- Потоки (Flows): Это рабочее пространство в центре экрана, где вы размещаете и соединяете узлы. Один поток может отвечать за управление освещением в гостиной, другой — за систему антипротечек, третий — за климат-контроль.
- Сообщения (Messages): Это объекты с данными, которые передаются от одного узла к другому по "проводам", которыми вы их соединяете. Сообщение — это кровь системы автоматизации, переносящая информацию и команды.
Вся мощь нашей платформы, включая ее входы, выходы, поддержку протоколов Modbus, MQTT и других, становится доступной для вас именно через узлы в среде Node-RED. Это позволяет абстрагироваться от сложностей низкоуровневого программирования и сосредоточиться на главной задаче — создании надежной и эффективной логики автоматизации для объекта.
---
Анатомия интерфейса: Палитра, Рабочее пространство, Боковая панель
После того как вы вошли в веб-интерфейс контроллера и перешли в раздел Node-RED, как было описано в уроке [COURSE-01-M01-L03: Подключение и первый вход], перед вами откроется основной экран разработки. Он логически разделен на три ключевые области, с которыми вы будете работать постоянно.
| Область | Расположение | Назначение |
| :--- | :--- | :--- |
| Палитра (Palette) | Левая колонка | Библиотека всех доступных функциональных блоков (узлов). |
| Рабочее пространство (Workspace) | Центральная область | Холст для создания и редактирования потоков (flows). |
| Боковая панель (Sidebar) | Правая колонка | Информационные панели: отладка, справка, конфигурация. |
Давайте рассмотрим каждую область подробнее.
Палитра узлов
Это ваш ящик с инструментами. Все доступные узлы сгруппированы по категориям для удобства навигации:
- input: Узлы, инициирующие поток (например, `inject` для ручного запуска, `mqtt in` для получения сообщения от MQTT-брокера).
- output: Узлы, завершающие поток или выполняющие действие во внешнем мире (например, `debug` для вывода информации, `mqtt out` для отправки команды).
- function: Узлы для обработки данных и логики (`function` для написания JavaScript-кода, `switch` для маршрутизации сообщений, `change` для их модификации).
- storage: Узлы для работы с файлами или контекстом.
- Наша платформа: Специализированные узлы для работы с аппаратными возможностями контроллера — входами, выходами, Modbus-устройствами и т.д. Эти узлы являются ключевым элементом для взаимодействия с физическим миром.
> 💡 Подсказка: Используйте поле поиска в верхней части палитры, чтобы мгновенно находить нужные узлы. Например, введите 'mqtt' для фильтрации всех узлов, связанных с протоколом MQTT, или 'inject', чтобы быстро найти узел для ручного запуска. Это значительно ускоряет работу.
Рабочее пространство
Это ваш основной холст, где происходит вся магия. Здесь вы будете:
В верхней части рабочего пространства находятся вкладки. Каждая вкладка — это отдельный поток (flow). Рекомендуется использовать разные вкладки для разных функциональных зон объекта (например, "Освещение", "Климат", "Безопасность") или для разных помещений ("Гостиная", "Кухня", "Гараж"). Это делает проект структурированным и легко поддерживаемым.
Боковая панель
Эта панель предоставляет контекстную информацию и инструменты. У нее есть несколько вкладок:
- Information (`i`): Когда вы выбираете узел в рабочем пространстве, здесь отображается краткая справка по нему: описание, детали настройки, информация о входящих и исходящих сообщениях. Это ваш первый помощник при изучении нового узла.
- Debug (иконка жука): Самая важная вкладка для начинающего. Сюда узел `debug` выводит полученные им сообщения. Вы можете видеть всю структуру сообщения, его полезную нагрузку (payload) и другие свойства. Это основной инструмент для отладки и понимания того, что происходит внутри вашего потока.
- Configuration Nodes (иконка шестеренки со стрелкой): Здесь находится список "скрытых" узлов конфигурации. Это узлы, которые хранят общие настройки для других узлов. Типичный пример — узел `mqtt-broker`. Вы настраиваете его один раз (адрес сервера, порт, логин/пароль), а затем множество узлов `mqtt in` и `mqtt out` просто ссылаются на эту конфигурацию. Это избавляет от необходимости вводить одни и те же данные многократно.
- Context Data: Панель для просмотра данных, хранящихся в контексте потока, глобальном контексте или контексте узла. (Это более продвинутая тема, которую мы рассмотрим позже).
Понимание того, как эти три области работают вместе — ключ к эффективной разработке в Node-RED. Вы находите инструмент в палитре, используете его в рабочем пространстве и проверяете результат его работы в боковой панели отладки.
---
Узлы и Сообщения: Основы потокового программирования
Чтобы создавать автоматизацию, необходимо понять два фундаментальных элемента: узел и сообщение.
Что такое 'узел' (Node)?
Узел — это базовый строительный блок в Node-RED. Технически, это предопределенный фрагмент кода (обычно JavaScript), обернутый в удобный графический интерфейс. У каждого узла есть:- Входной порт (или несколько): Маленький серый квадрат на левой стороне. Через него узел получает сообщения.
- Выходной порт (или несколько): Маленький серый квадрат на правой стороне. Через него узел отправляет обработанные или новые сообщения дальше по потоку.
- Окно настроек: Вызывается двойным кликом по узлу. Здесь вы задаете специфические параметры его работы. Например, для узла `delay` вы указываете время задержки, а для узла `mqtt out` — MQTT-топик для публикации.
- Статус: Под узлом может отображаться текстовая или иконографическая информация о его текущем состоянии (например, "connected", количество полученных сообщений, время последнего срабатывания).
Концепция 'сообщения' (Message)
Если узлы — это органы системы, то сообщения (messages) — это нервные импульсы и гормоны. Сообщение — это не просто значение, а полноценный объект JavaScript, который путешествует по "проводам" между узлами.
Стандартный объект сообщения, который вы будете видеть чаще всего, обозначается как `msg`. У него есть множество свойств, но самое главное из них — `msg.payload`.
> 📋 Ключевые понятия:
> * `msg`: Объект JavaScript, являющийся единицей данных в Node-RED.
> * `msg.payload` (полезная нагрузка): Основное свойство объекта `msg`, предназначенное для переноса главных данных. Большинство узлов по умолчанию работают именно с `msg.payload`.
> * `msg.topic`: Второе по важности свойство. Часто используется для хранения мета-информации, например, MQTT-топика, из которого пришло сообщение, или для маршрутизации внутри потока.
Давайте посмотрим на пример объекта `msg`, который может быть сгенерирован узлом `mqtt in`, подписанным на топик от датчика температуры:
{
"_msgid": "a1b2c3d4.5e4d3c",
"topic": "/devices/wb-msw-v3_25/controls/Temperature",
"payload": 23.5,
"qos": 0,
"retain": false
}
В этом примере:
- `_msgid` — это уникальный идентификатор сообщения, который генерирует Node-RED для отслеживания.
- `topic` — это MQTT-топик, источник данных.
- `payload` — это само значение температуры, полезная нагрузка.
- `qos` и `retain` — это специфические флаги MQTT-протокола.
Жизненный цикл сообщения
Понимание жизненного цикла сообщения является фундаментальным:
- Прочитать данные из `msg.payload` или `msg.topic`.
- Изменить `msg.payload` (например, узел `change` может преобразовать `true` в `1`).
- Добавить новые свойства к объекту `msg` (например, `msg.hysteresis_value = 0.5`).
- Не делать ничего с сообщением и просто передать его дальше (как есть).
- Создать совершенно новое сообщение.
- Заблокировать сообщение и не передавать его дальше (например, узел `filter` или `switch`).
Этот цикл повторяется, пока сообщение не достигнет конца потока (например, узла `debug` или `mqtt out`, который отправит команду на исполнительное устройство). Ваша задача как инженера — выстраивать цепочки узлов так, чтобы этот жизненный цикл приводил к желаемому результату автоматизации.
---
Практика: Создаем первый поток «Hello, World!»
Теория важна, но ничто не заменит практику. Давайте создадим наш первый, самый простой поток, чтобы увидеть все описанные концепции в действии. Этот поток по нажатию кнопки будет отправлять текстовое сообщение и выводить его в окно отладки.
Пошаговая инструкция
(Палитра) (Рабочее пространство)
[ inject ]─────────► [ inject ] [ debug ]
[ debug ]
[ comment ]
...
(Рабочее пространство)
[ inject ]───────────[ debug ]
Это означает, что любое сообщение, сгенерированное узлом `inject`, будет отправлено на вход узла `debug`.
- В поле `Payload` по умолчанию стоит `timestamp` (временная метка). Нам это не нужно. Кликните на выпадающий список и выберите тип `string` (строка), обозначается как `"abc"`.
- В появившемся текстовом поле введите `Привет, мир!`.
- Можно также задать `Topic`, например, `test/greeting`. Это не обязательно, но полезно для практики.
- Нажмите кнопку Done.
- Убедитесь, что в поле `Output` выбрано `msg.payload`. Это означает, что узел будет выводить только значение полезной нагрузки. Для более детальной отладки можно выбрать `complete msg object`, чтобы видеть все сообщение целиком. Давайте пока оставим `msg.payload`.
- Убедитесь, что галочка "Output to" `debug window` активна (зеленая кнопка справа от узла).
- Нажмите Done.
> ⚠️ Внимание: Не забывайте нажимать красную кнопку Deploy (Развернуть) в правом верхнем углу интерфейса после каждого изменения. Без этого ваши новые потоки или правки не будут активированы на сервере. Node-RED имеет две сущности: редактор, в котором вы работаете в браузере, и движок (runtime), который исполняет потоки на контроллере. Кнопка `Deploy` синхронизирует редактор с движком.
Нажмите `Deploy`. Если все сделано правильно, кнопка станет серой, и над ней появится уведомление "Successfully deployed".
- Перейдите на вкладку Debug (с иконкой жука) на боковой панели справа. Пока она пуста.
- Нажмите на квадратную кнопку слева от узла `inject` на вашем рабочем пространстве. Этот клик инициирует отправку сообщения.
- Мгновенно на вкладке Debug вы увидите появившуюся строку: `Привет, мир!`.
Поздравляем! Вы только что создали, развернули и протестировали свой первый поток в Node-RED. Вы увидели, как узел `inject` создал сообщение с `payload`, равным "Привет, мир!", передал его по "проводу" узлу `debug`, который, в свою очередь, отобразил этот `payload` в окне отладки.
---
Управление потоками и палитрой
По мере роста сложности ваших проектов, вам потребуются инструменты для управления потоками и расширения функциональности Node-RED путем добавления новых узлов.
Управление вкладками потоков
Рабочее пространство с вкладками позволяет эффективно структурировать проект.
- Создание: Нажмите на `+` в строке вкладок, чтобы создать новый пустой поток.
- Переименование: Дважды кликните на название вкладки (например, `Flow 1`), чтобы открыть диалог редактирования. Здесь можно задать потоку осмысленное имя ("Освещение: 1 этаж") и добавить описание. Хорошо документированные потоки — залог легкой поддержки в будущем.
- Отключение/Включение: В том же диалоге редактирования потока есть кнопка-переключатель `Status`. Вы можете временно отключить весь поток, не удаляя его. Это крайне полезно при отладке, когда нужно изолировать часть логики.
- Удаление: В диалоге редактирования потока есть кнопка `Delete`. Используйте с осторожностью.
Import / Export: Обмен потоками
Одной из самых мощных функций Node-RED является возможность импортировать и экспортировать потоки. Любой поток или даже отдельная группа узлов может быть представлена в виде текста формата JSON.
Экспорт:Вот пример JSON-представления нашего потока «Hello, World!»:
[
{
"id": "c1a2b3c4.d5e6f7",
"type": "inject",
"z": "f8e9d0c1.b2a3b4",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "test/greeting",
"payload": "Привет, мир!",
"payloadType": "str",
"x": 150,
"y": 100,
"wires": [
[
"g9h8i7j6.k5l4m3"
]
]
},
{
"id": "g9h8i7j6.k5l4m3",
"type": "debug",
"z": "f8e9d0c1.b2a3b4",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 400,
"y": 100,
"wires": []
}
]
Этот код можно сохранить в текстовый файл как резервную копию или отправить коллеге.
Импорт:Manage Palette: Установка новых узлов
Стандартный набор узлов очень мощный, но иногда для специфических задач (работа с определенным оборудованием или веб-сервисом) требуются дополнительные узлы. Они устанавливаются через менеджер палитры.
- `Nodes`: Показывает все уже установленные в вашей системе модули (коллекции узлов). Здесь вы можете временно отключать или удалять их.
- `Install`: Позволяет искать и устанавливать новые модули из официальной библиотеки Node-RED, которая насчитывает тысячи дополнений.
После короткой установки новые узлы из этого модуля появятся в вашей палитре, готовые к использованию.
> 🔗 Связанный материал: Более подробно об установке специфичных для оборудования узлов, например, для работы с протоколами Modbus, DALI или беспроводными устройствами Zigbee, мы поговорим в соответствующих курсах: `COURSE-03: Протоколы и интеграции` и `COURSE-04: Беспроводные технологии`.
---
Итоги и следующие шаги
В этом уроке мы совершили первое погружение в сердце нашей платформы автоматизации — среду Node-RED. Вы познакомились с ее интерфейсом, базовыми концепциями и даже создали свой первый работающий поток.
Давайте закрепим ключевые моменты:- Интерфейс Node-RED состоит из трех основных частей: Палитры с узлами, Рабочего пространства для создания потоков и Боковой панели для отладки и получения информации.
- Фундаментальная концепция работы — это потоки (flows), состоящие из соединенных узлов (nodes), которые обмениваются сообщениями (msg).
- Главным носителем данных в сообщении является свойство `msg.payload` (полезная нагрузка).
- Отладка потоков производится с помощью узла `debug` и соответствующей панели, куда выводятся результаты.
- Любые изменения в потоках должны быть применены с помощью кнопки Deploy, чтобы они начали исполняться на контроллере.
Вы сделали важный первый шаг. Умение навигировать по интерфейсу, создавать, соединять и отлаживать простейшие цепочки узлов — это основа, на которой будут строиться все ваши дальнейшие навыки.
Что дальше?В следующем уроке мы перейдем от "Hello, World!" к более практическим задачам. Мы детально разберем базовый набор узлов для построения логики (`switch`, `change`, `trigger`) и создадим первый осмысленный сценарий автоматизации, который уже можно будет применить на реальном объекте. Мы научимся управлять сообщениями, изменять их "на лету" и направлять по разным веткам в зависимости от условий.