Базовое управление в Node-RED: ноды Inject и Relay Out
Введение в Node-RED для управления актуаторами
В экосистеме аппаратной платформы HI, Node-RED выступает в роли центрального нервного центра — это визуальная среда программирования, которая позволяет инженерам и инсталляторам создавать логику автоматизации без написания традиционного кода. Вместо строк текста вы оперируете графическими блоками, которые называются узлами (nodes), и соединяете их между собой, создавая потоки (flows).
> 🔗 Связанный материал: Для полного понимания среды Node-RED, ее интерфейса и базовых принципов работы настоятельно рекомендуется изучить материалы курса «Основы платформы HI» (COURSE-02-M01).
Представьте, что вы строите водопроводную систему. У вас есть источники воды (датчики, кнопки), трубы (соединения) и краны или разбрызгиватели (исполнительные устройства). Node-RED работает по схожему принципу. Поток — это визуальное представление того, как сообщение (порция данных) "течет" от источника, преобразуется по пути и в конечном итоге вызывает действие в реальном мире.
Для управления исполнительными устройствами (актуаторами), которые мы подробно классифицировали в предыдущих уроках, эта концепция является ключевой. Поток может выглядеть так:
В этом уроке мы сосредоточимся на двух самых фундаментальных узлах для ручного управления оборудованием:
- Inject (Внедрение): Ваш виртуальный выключатель. Этот узел позволяет вручную инициировать поток, отправляя в него предопределенное сообщение. Он незаменим для тестирования, отладки и создания простых сценариев ручного управления.
- Relay Out (Выход на реле): Ваш мост в реальный мир. Этот узел является конечной точкой потока управления и напрямую связан с физическими клеммами реле на контроллере HI. Получив команду, он изменяет состояние реле, замыкая или размыкая силовую цепь.
Освоение этих двух узлов — это первый и самый важный шаг на пути к созданию любых, даже самых сложных, сценариев автоматизации. Это основа, на которой будут строиться все последующие уроки, посвященные таймаутам, блокировкам (интерлокам) и более продвинутым сценариям управления.
---
Нода Inject: ваш виртуальный выключатель
Узел Inject — это точка входа в поток, инициируемая вручную. В редакторе Node-RED он выглядит как кнопка, при нажатии на которую генерируется и отправляется на выход узла специальный объект сообщения, известный как `msg`. Этот узел является основным инструментом инженера для проверки логики и симуляции событий.
> 💡 Подсказка: Всегда давайте осмысленные имена вашим Inject-нодам. Например, 'Лампа стол: ВКЛ' и 'Лампа стол: ВЫКЛ'. Это значительно упрощает отладку и поддержку сложных потоков, особенно когда на одной вкладке десятки узлов.
Панель конфигурации узла Inject
Двойной клик по узлу открывает его панель настроек, где нас интересуют следующие ключевые поля:
Типы данных в Payload
Поле `payload` может содержать данные различных типов. Для управления исполнительными устройствами наиболее релевантны следующие:
| Тип данных | Пример в Node-RED | Описание и применение |
|--------------|-------------------|---------------------------------------------------------------------------------------------------------------------------|
| Boolean | `true` / `false` | Основной тип для управления реле. `true` соответствует команде "Включить" (замкнуть), `false` — "Выключить" (разомкнуть). |
| String | `"ON"` / `"OFF"` | Строковый (текстовый) тип. Часто используется при интеграции с системами, передающими команды в виде текста (например, MQTT). |
| Number | `1` / `0` | Числовой тип. Также может использоваться для управления, где `1` — включить, `0` — выключить. |
| Timestamp| `1678886400000` | Временная метка. Автоматически устанавливается по умолчанию. Полезна для отслеживания времени возникновения события. |
Для прямого управления узлом `Relay Out` мы будем использовать Boolean тип. Он является наиболее строгим и однозначным, исключая путаницу между, например, строкой `"false"` и логическим значением `false`.
Пример формирования msg.payload
Чтобы отправить команду на включение реле, в панели настроек узла `Inject` необходимо:
Соответственно, для отправки команды на выключение, нужно выбрать `boolean` и значение `false`.
Когда вы нажмете на кнопку такого узла, он сгенерирует и отправит дальше по потоку объект `msg`, который будет выглядеть примерно так:
Для команды "Включить":
{
"payload": true,
"topic": "",
"_msgid": "a1b2c3d4.e5f6g7"
}
Для команды "Выключить":
{
"payload": false,
"topic": "",
"_msgid": "h8i9j0k1.l2m3n4"
}
Ключевое свойство здесь — `payload`. Именно его значение и будет анализировать следующий узел в цепочке.
---
Нода Relay Out: связь с реальным миром
Если `Inject` — это виртуальная кнопка, то узел Relay Out — это физический исполнитель. Это специализированный узел, разработанный для платформы HI, который предоставляет прямой программный доступ к встроенным реле контроллера.
> ⚠️ Внимание: Крайне важно перепроверять номер выбранного реле в настройках узла. Ошибка в конфигурации может привести к управлению неверным устройством (например, включению насоса вместо лампы), что может быть небезопасно или привести к повреждению оборудования.
Процесс конфигурации узла
Настройка узла `Relay Out` предельно проста и нацелена на минимизацию ошибок:
После этой настройки узел готов к приему команд.
Требования к входящему сообщению
Узел `Relay Out` ожидает на своем входе сообщение `msg` со свойством `payload`, содержащим строгое логическое значение:
- `msg.payload` со значением `true` (boolean) приведет к замыканию контактов выбранного реле. Если к реле подключена лампа, она загорится.
- `msg.payload` со значением `false` (boolean) приведет к размыканию контактов. Лампа погаснет.
Любые другие значения в `msg.payload` (например, строка `"true"`, число `1` или пустой объект) будут проигнорированы или могут вызвать ошибку, в зависимости от версии прошивки. Поэтому использование узлов `Inject` с `boolean` типом является наилучшей практикой.
Эта прямая и предсказуемая связь между логическим состоянием `true`/`false` в программном потоке и физическим состоянием реле "замкнуто/разомкнуто" является фундаментом надежной системы автоматизации. Вы всегда точно знаете, что команда `true` означает "Включить", а `false` — "Выключить".
---
Практика: Создаем первый поток управления реле
Теперь объединим полученные знания и создадим первый, самый простой, но от этого не менее важный поток — ручное управление одним реле с помощью двух кнопок в интерфейсе Node-RED.
Пошаговое руководство
* Два узла `inject` (в разделе "common").
* Один узел `rpi gpio out` (в разделе "Raspberry Pi").
[inject]
[inject] [rpi gpio out]
* Дважды щелкните по верхнему узлу `inject`.
* В поле Payload выберите тип `boolean` и значение `true`.
* В поле Name введите "ВКЛ Реле 1".
* Нажмите Done.
* Дважды щелкните по нижнему узлу `inject`.
* В поле Payload выберите тип `boolean` и значение `false`.
* В поле Name введите "ВЫКЛ Реле 1".
* Нажмите Done.
* Дважды щелкните по узлу `rpi gpio out`.
* В поле Pin выберите `Relay 1` из выпадающего списка.
* В поле Name введите "Свет: Настольная лампа" (или название вашей реальной нагрузки).
* Нажмите Done.
// ASCII-схема потока
[ВКЛ Реле 1] -------+
|
+--> [Свет: Настольная лампа]
|
[ВЫКЛ Реле 1] -------+
Проверка работоспособности
Теперь ваш поток активен.
- Нажмите на кнопку слева от узла "ВКЛ Реле 1". Вы должны услышать тихий щелчок реле на контроллере, и на его корпусе загорится светодиодный индикатор, соответствующий Реле №1. Если к реле подключена нагрузка (например, лампа), она включится.
- Нажмите на кнопку слева от узла "ВЫКЛ Реле 1". Вы снова услышите щелчок, светодиодный индикатор погаснет, а нагрузка отключится.
Поздравляем, вы только что создали свою первую работающую схему автоматизации, напрямую связав виртуальную команду с действием в реальном мире!
---
Анализ и отладка с помощью ноды Debug
Даже в самом простом потоке что-то может пойти не так. Как убедиться, что из узла `Inject` выходит именно то сообщение, которое мы ожидаем? Для этого существует главный инструмент инженера-автоматизатора в Node-RED — узел Debug.
Этот узел, при подключении к выходу любого другого узла, "слушает" проходящие через него сообщения и выводит их полное содержимое на специальную боковую панель.
> 💡 Подсказка: Ноды Debug можно временно отключать и включать одним кликом по зеленой кнопке на самой ноде. Это позволяет избежать "зашумления" панели отладки при работе с большим количеством отладочных сообщений, не удаляя сам узел из потока.
Использование ноды Debug
Давайте модифицируем наш предыдущий поток для отладки.
// ASCII-схема потока с отладкой
+--> [debug]
|
[ВКЛ Реле 1] -------+
|
+--> [Свет: Настольная лампа]
|
[ВЫКЛ Реле 1] -------+
|
+--> [debug]
Примечание: Вы можете подключить выход одного узла к входам нескольких других.
С помощью узла `Debug` вы можете визуально подтвердить, что:
- Узлы `Inject` сконфигурированы правильно и генерируют полезную нагрузку нужного типа (`boolean`).
- Сообщение действительно отправляется по потоку при нажатии кнопки.
- На вход узла `Relay Out` приходит именно то значение, которое он ожидает (`true` или `false`).
Этот простой метод отладки позволяет локализовать до 90% всех проблем в логике потоков. Прежде чем винить оборудование, всегда проверяйте с помощью `Debug`, что ваши программные потоки работают так, как задумано.
Ключевые понятия урока
- Node-RED: Визуальная среда разработки для создания потоков автоматизации.
- Flow (поток): Последовательность соединенных узлов, определяющая логику работы.
- Node (узел/нода): Графический блок, выполняющий определенную функцию (например, отправка сообщения или управление реле).
- Inject node: Узел для ручной генерации и отправки сообщений в поток.
- Relay Out node: Специализированный узел для управления физическими реле на контроллере.
- msg.payload: Основное свойство объекта сообщения, содержащее полезную нагрузку (данные).
- Boolean (логический тип): Тип данных, имеющий два значения: `true` (истина) и `false` (ложь).
- Deploy (развертывание): Процесс сохранения и активации изменений, внесенных в потоки Node-RED.
- Debug node (узел отладки): Инструмент для отображения сообщений, проходящих через поток.
---
Что дальше
В этом уроке мы заложили фундамент, научившись создавать простейшие команды и отправлять их на физическое оборудование. Мы освоили ручное управление и отладку. В следующем уроке, `COURSE-05-M01-L06: Управление по событию: нода GPIO In`, мы сделаем следующий шаг: научимся принимать сигналы из реального мира (например, от настенного выключателя) и использовать их для автоматического запуска наших потоков управления.