ГлавнаяАкадемияИсполнительные устройства: интерлоки, таймауты → Базовое управление в Node-RED: ноды Inject и Relay Out

Базовое управление в Node-RED: ноды Inject и Relay Out

Урок 4 · Исполнительные устройства: интерлоки, таймауты · 30 мин · theory

Введение в Node-RED для управления актуаторами

В экосистеме аппаратной платформы HI, Node-RED выступает в роли центрального нервного центра — это визуальная среда программирования, которая позволяет инженерам и инсталляторам создавать логику автоматизации без написания традиционного кода. Вместо строк текста вы оперируете графическими блоками, которые называются узлами (nodes), и соединяете их между собой, создавая потоки (flows).

> 🔗 Связанный материал: Для полного понимания среды Node-RED, ее интерфейса и базовых принципов работы настоятельно рекомендуется изучить материалы курса «Основы платформы HI» (COURSE-02-M01).

Представьте, что вы строите водопроводную систему. У вас есть источники воды (датчики, кнопки), трубы (соединения) и краны или разбрызгиватели (исполнительные устройства). Node-RED работает по схожему принципу. Поток — это визуальное представление того, как сообщение (порция данных) "течет" от источника, преобразуется по пути и в конечном итоге вызывает действие в реальном мире.

Для управления исполнительными устройствами (актуаторами), которые мы подробно классифицировали в предыдущих уроках, эта концепция является ключевой. Поток может выглядеть так:

  • Источник события: Нажатие на кнопку на сенсорной панели.
  • Передача данных: Сообщение об этом событии отправляется в Node-RED.
  • Логическая обработка: Поток анализирует сообщение и принимает решение. Например, "если это кнопка от лампы в гостиной, то нужно включить свет".
  • Исполнение команды: Поток отправляет команду на конкретное реле, которое замыкает электрическую цепь и зажигает лампу.
  • В этом уроке мы сосредоточимся на двух самых фундаментальных узлах для ручного управления оборудованием:

    Освоение этих двух узлов — это первый и самый важный шаг на пути к созданию любых, даже самых сложных, сценариев автоматизации. Это основа, на которой будут строиться все последующие уроки, посвященные таймаутам, блокировкам (интерлокам) и более продвинутым сценариям управления.

    ---

    Нода Inject: ваш виртуальный выключатель

    Узел Inject — это точка входа в поток, инициируемая вручную. В редакторе Node-RED он выглядит как кнопка, при нажатии на которую генерируется и отправляется на выход узла специальный объект сообщения, известный как `msg`. Этот узел является основным инструментом инженера для проверки логики и симуляции событий.

    > 💡 Подсказка: Всегда давайте осмысленные имена вашим Inject-нодам. Например, 'Лампа стол: ВКЛ' и 'Лампа стол: ВЫКЛ'. Это значительно упрощает отладку и поддержку сложных потоков, особенно когда на одной вкладке десятки узлов.

    Панель конфигурации узла Inject

    Двойной клик по узлу открывает его панель настроек, где нас интересуют следующие ключевые поля:

  • Payload (Полезная нагрузка): Это основное содержимое сообщения (`msg.payload`). Именно здесь мы определяем, какое значение будет отправлено в поток. Для управления реле критически важно использовать логический (boolean) тип данных.
  • Topic (Тема): Дополнительное свойство сообщения (`msg.topic`), которое используется для маршрутизации и фильтрации. На данном этапе мы можем оставить его пустым, но в более сложных сценариях, как было рассмотрено в стандартах MQTT, оно играет ключевую роль.
  • Repeat (Повтор): Эта опция позволяет автоматически отправлять сообщение через заданный интервал, в определенное время или по расписанию (cron). Это полезно для создания периодических задач, но для ручного управления мы будем использовать опцию `none`.
  • Типы данных в 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` необходимо:

  • В поле `Payload` из выпадающего списка выбрать тип `boolean`.
  • В появившемся поле рядом выбрать значение `true`.
  • Соответственно, для отправки команды на выключение, нужно выбрать `boolean` и значение `false`.

    Когда вы нажмете на кнопку такого узла, он сгенерирует и отправит дальше по потоку объект `msg`, который будет выглядеть примерно так:

    Для команды "Включить":

    {
    

    "payload": true,

    "topic": "",

    "_msgid": "a1b2c3d4.e5f6g7"

    }

    Для команды "Выключить":

    {
    

    "payload": false,

    "topic": "",

    "_msgid": "h8i9j0k1.l2m3n4"

    }

    Ключевое свойство здесь — `payload`. Именно его значение и будет анализировать следующий узел в цепочке.

    ---

    Нода Relay Out: связь с реальным миром

    Если `Inject` — это виртуальная кнопка, то узел Relay Out — это физический исполнитель. Это специализированный узел, разработанный для платформы HI, который предоставляет прямой программный доступ к встроенным реле контроллера.

    > ⚠️ Внимание: Крайне важно перепроверять номер выбранного реле в настройках узла. Ошибка в конфигурации может привести к управлению неверным устройством (например, включению насоса вместо лампы), что может быть небезопасно или привести к повреждению оборудования.

    Процесс конфигурации узла

    Настройка узла `Relay Out` предельно проста и нацелена на минимизацию ошибок:

  • Перетащите узел `rpi gpio out` на холст. Изначально он является универсальным узлом вывода.
  • Дважды кликните по нему, чтобы открыть панель настроек.
  • Pin (Контакт): В этом поле находится выпадающий список. Вместо абстрактных номеров GPIO, в прошивке контроллера HI они названы в соответствии с маркировкой на корпусе: `Relay 1`, `Relay 2`, ... `Relay 22`.
  • Выберите необходимое реле, например, `Relay 1`.
  • Type (Тип): Убедитесь, что выбран тип `Digital Output` (Цифровой выход).
  • Initialise pin state? (Инициализировать состояние контакта?): Эта опция позволяет задать состояние реле при старте или развертывании потока. Рекомендуется установить его в `state of input` (состояние на входе) или в безопасное состояние `logic level 0` (выключено).
  • Name (Имя): Задайте осмысленное имя узлу, соответствующее подключенной нагрузке, например, "Реле: Свет в кабинете".
  • После этой настройки узел готов к приему команд.

    Требования к входящему сообщению

    Узел `Relay Out` ожидает на своем входе сообщение `msg` со свойством `payload`, содержащим строгое логическое значение:

    Любые другие значения в `msg.payload` (например, строка `"true"`, число `1` или пустой объект) будут проигнорированы или могут вызвать ошибку, в зависимости от версии прошивки. Поэтому использование узлов `Inject` с `boolean` типом является наилучшей практикой.

    Эта прямая и предсказуемая связь между логическим состоянием `true`/`false` в программном потоке и физическим состоянием реле "замкнуто/разомкнуто" является фундаментом надежной системы автоматизации. Вы всегда точно знаете, что команда `true` означает "Включить", а `false` — "Выключить".

    ---

    Практика: Создаем первый поток управления реле

    Теперь объединим полученные знания и создадим первый, самый простой, но от этого не менее важный поток — ручное управление одним реле с помощью двух кнопок в интерфейсе Node-RED.

    Пошаговое руководство

  • Откройте редактор Node-RED в вашем веб-браузере, перейдя по адресу контроллера.
  • Найдите узлы в палитре слева. Нам понадобятся:
  • * Два узла `inject` (в разделе "common").

    * Один узел `rpi gpio out` (в разделе "Raspberry Pi").

  • Перетащите узлы на холст. Расположите два `inject` слева и `rpi gpio out` справа.
  •     [inject]

    [inject] [rpi gpio out]

  • Настройте первый узел Inject (ВКЛЮЧЕНИЕ):
  • * Дважды щелкните по верхнему узлу `inject`.

    * В поле Payload выберите тип `boolean` и значение `true`.

    * В поле Name введите "ВКЛ Реле 1".

    * Нажмите Done.

  • Настройте второй узел Inject (ВЫКЛЮЧЕНИЕ):
  • * Дважды щелкните по нижнему узлу `inject`.

    * В поле Payload выберите тип `boolean` и значение `false`.

    * В поле Name введите "ВЫКЛ Реле 1".

    * Нажмите Done.

  • Настройте узел Relay Out:
  • * Дважды щелкните по узлу `rpi gpio out`.

    * В поле Pin выберите `Relay 1` из выпадающего списка.

    * В поле Name введите "Свет: Настольная лампа" (или название вашей реальной нагрузки).

    * Нажмите Done.

  • Соедините узлы. Кликните на серый кружок (выход) на узле "ВКЛ Реле 1" и, не отпуская кнопку мыши, протяните линию до серого кружка (входа) на узле "Свет: Настольная лампа". Вы увидите соединительную линию.
  • Повторите соединение для узла "ВЫКЛ Реле 1", подключив его к тому же входу узла `Relay Out`. Ваш поток должен выглядеть так:
  •     // ASCII-схема потока

    [ВКЛ Реле 1] -------+

    |

    +--> [Свет: Настольная лампа]

    |

    [ВЫКЛ Реле 1] -------+

  • Разверните поток. Найдите большую красную кнопку Deploy в правом верхнем углу редактора и нажмите ее. После успешного развертывания над узлами появятся синие квадратики, а кнопка Deploy станет серой.
  • Проверка работоспособности

    Теперь ваш поток активен.

    Поздравляем, вы только что создали свою первую работающую схему автоматизации, напрямую связав виртуальную команду с действием в реальном мире!

    ---

    Анализ и отладка с помощью ноды Debug

    Даже в самом простом потоке что-то может пойти не так. Как убедиться, что из узла `Inject` выходит именно то сообщение, которое мы ожидаем? Для этого существует главный инструмент инженера-автоматизатора в Node-RED — узел Debug.

    Этот узел, при подключении к выходу любого другого узла, "слушает" проходящие через него сообщения и выводит их полное содержимое на специальную боковую панель.

    > 💡 Подсказка: Ноды Debug можно временно отключать и включать одним кликом по зеленой кнопке на самой ноде. Это позволяет избежать "зашумления" панели отладки при работе с большим количеством отладочных сообщений, не удаляя сам узел из потока.

    Использование ноды Debug

    Давайте модифицируем наш предыдущий поток для отладки.

  • Найдите узел `debug` в палитре (раздел "common") и перетащите его на холст.
  • Подключите его к выходам узлов `Inject`. Точно так же, как вы подключали `Relay Out`, проведите линии от выходов "ВКЛ Реле 1" и "ВЫКЛ Реле 1" ко входу узла `debug`.
  •     // ASCII-схема потока с отладкой

    +--> [debug]

    |

    [ВКЛ Реле 1] -------+

    |

    +--> [Свет: Настольная лампа]

    |

    [ВЫКЛ Реле 1] -------+

    |

    +--> [debug]

    Примечание: Вы можете подключить выход одного узла к входам нескольких других.

  • Настройте узел `debug`. Дважды кликните по нему. Убедитесь, что в поле Output выбрано `msg.payload`. Это значит, что на панель будет выводиться только полезная нагрузка. Для более детального анализа можно выбрать `complete msg object`, чтобы увидеть все свойства сообщения. Оставим `msg.payload`.
  • Откройте панель отладки. В правой части редактора найдите иконку с изображением жука и нажмите на нее. Откроется Debug sidebar.
  • Разверните поток, нажав кнопку Deploy.
  • Проведите тест. Теперь, когда вы нажимаете на кнопку узла "ВКЛ Реле 1", на панели отладки мгновенно появляется новая запись: `true` (синего цвета, что указывает на тип boolean). При нажатии на "ВЫКЛ Реле 1" — появляется запись `false`.
  • С помощью узла `Debug` вы можете визуально подтвердить, что:

    Этот простой метод отладки позволяет локализовать до 90% всех проблем в логике потоков. Прежде чем винить оборудование, всегда проверяйте с помощью `Debug`, что ваши программные потоки работают так, как задумано.

    Ключевые понятия урока

    ---

    Что дальше

    В этом уроке мы заложили фундамент, научившись создавать простейшие команды и отправлять их на физическое оборудование. Мы освоили ручное управление и отладку. В следующем уроке, `COURSE-05-M01-L06: Управление по событию: нода GPIO In`, мы сделаем следующий шаг: научимся принимать сигналы из реального мира (например, от настенного выключателя) и использовать их для автоматического запуска наших потоков управления.