ГлавнаяАкадемияВведение в протоколы автоматизации → Практика: Управление тестовой лампой в Node-RED

Практика: Управление тестовой лампой в Node-RED

Урок 6 · Введение в протоколы автоматизации · 30 мин · theory

Подготовка рабочего места и техника безопасности

> ⚠️ Внимание: Работы с напряжением ~230В смертельно опасны. Всегда отключайте вводной автомат и лично проверяйте отсутствие напряжения на всех задействованных клеммах и проводах перед началом монтажа. Не полагайтесь на то, что кто-то другой отключил питание.

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

Обзор схемы подключения

Прежде чем приступить к работе, рассмотрим, как именно наша тестовая лампа будет подключена к контроллеру. Как мы помним из урока Типы контактов реле: NO, NC, COM, реле по своей сути является управляемым выключателем. Мы будем использовать его для разрыва фазного провода, идущего к лампе.

Второй контакт лампы подключается напрямую к нейтральной (N) шине. Таким образом, реле контроллера физически ставится в разрыв цепи питания лампы, управляя подачей фазы.

Принципиальная схема подключения:
//========= Схема подключения тестовой лампы =========

[Автоматический выключатель] [Контроллер: Релейный выход] <Тестовая лампа 230V>

(в щите) (например, K1)

ФАЗА (L) -----------------------------------> COM

NO ---------------------------> Контакт 1 (Лампа)

НЕЙТРАЛЬ (N) -------------------------------------------------------------> Контакт 2 (Лампа)

Протокол безопасности

Соблюдение техники безопасности — это не формальность, а необходимое условие сохранения вашего здоровья и жизни. Перед началом любых монтажных работ с напряжением 230В необходимо выполнить следующую последовательность действий в обязательном порядке:

  • Полное обесточивание: Отключите вводной автоматический выключатель, питающий ваш стенд или шкаф автоматизации. Если вы работаете в действующем щите, отключите автомат той группы, с которой будете работать. Повесьте на рычаг автомата табличку "Не включать! Работают люди".
  • Проверка отсутствия напряжения: Возьмите мультиметр, переключите его в режим измерения переменного напряжения (ACV, V~). Используя щупы, убедитесь в отсутствии напряжения между всеми парами проводников, с которыми вы будете работать: L и N, L и PE, N и PE. Убедитесь, что прибор показывает 0 Вольт. Проверьте работоспособность самого мультиметра, замерив напряжение в заведомо рабочей розетке до и после проведения работ.
  • Использование средств защиты: Даже на обесточенной линии рекомендуется работать в диэлектрических перчатках. Это защитит вас в случае ошибочной подачи напряжения.
  • Визуальный осмотр: Перед подачей питания еще раз визуально проверьте правильность и надежность всех собранных соединений. Убедитесь, что нет коротких оголенных участков проводов, которые могут коснуться друг друга или корпуса щита.
  • Только после выполнения всех этих шагов можно быть уверенным в безопасности предстоящих работ.

    ---

    Адресация в автоматизации: MQTT-топики реле

    Если представить систему автоматизации как живой организм, то протокол MQTT (Message Queuing Telemetry Transport) будет его нервной системой. Каждое устройство, каждый датчик, каждое реле и его свойство имеют в этой системе свой уникальный адрес, который называется топик (topic). Контроллер HI (и родственные ему платформы, такие как Wirenboard) активно использует MQTT для внутреннего и внешнего взаимодействия.

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

    Структура MQTT-топиков контроллера

    Контроллер публикует все подключенные устройства и их параметры в четко структурированном дереве топиков. Рассмотрим на примере релейного модуля `wb-mr6c` с адресом `34`:

    Состояние (State): `/devices/wb-mr6c_34/controls/K1` — основной топик элемента управления. Его значение автоматически изменяется самим контроллером, когда состояние реле меняется фактически*.

    Разница между топиком команды и топиком состояния

    Ключевое отличие, которое необходимо понять — это направление потока данных.

    | Параметр | Топик команды (`.../on`) | Топик состояния (`...`) |

    | -------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------- |

    | Назначение | Задать желаемое состояние (управление) | Сообщить о фактическом состоянии (мониторинг) |

    | Направление | Публикация в топик (Write). Мы отправляем сообщение в него. | Подписка на топик (Read). Мы получаем сообщения из него. |

    | Формат сообщения | `1` (включить), `0` (выключить) | `1` (включено), `0` (выключено) |

    | Пример использования | Node-RED отправляет `1` в `.../K1/on` для включения света. | Node-RED подписывается на `.../K1` и получает `1`, когда свет включился. |

    Такое разделение позволяет системе знать реальное положение дел. Например, если реле было включено не из Node-RED, а с помощью физического выключателя, подключенного к входу контроллера, топик состояния `/devices/wb-mr6c_34/controls/K1` все равно изменит свое значение на `1`, и все подписанные на него системы (включая наш интерфейс) немедленно обновят свой статус.

    Данные, которые передаются в топике, называются payload (полезная нагрузка). В нашем случае, для управления реле, `msg.payload` будет содержать строковое значение `"1"` или `"0"`.

    ---

    Практика: Создание первого потока управления в Node-RED

    Теперь перейдем к самому интересному — созданию программной логики. Мы создадим простейший поток (flow), который позволит нам вручную включать и выключать нашу тестовую лампу.

    > 💡 Подсказка: Всегда подключайте узел `debug` к выходам узлов, поведение которых вы хотите проверить. Настройте `debug` на отображение полного объекта `msg`, чтобы видеть не только `payload`, но и другие параметры, например, `topic`. Это — ваш главный инструмент отладки.

    Необходимые узлы

    Для нашей первой задачи понадобятся всего два базовых узла из левой палитры Node-RED:

    Пошаговая инструкция

  • Создание кнопок "ВКЛ" и "ВЫКЛ":
  • * Перетащите два узла `inject` на рабочее поле.

    * Дважды кликните по первому. В поле `Payload` установите тип `string` (строка) и введите значение `1`. В поле `Name` напишите "Включить лампу". Нажмите "Done".

    * Дважды кликните по второму узлу `inject`. Аналогично установите `Payload` в `string` со значением `0`. В поле `Name` напишите "Выключить лампу". Нажмите "Done".

  • Настройка отправителя MQTT:
  • * Перетащите узел `mqtt out` на рабочее поле.

    * Дважды кликните по нему. В поле `Server` выберите (или настройте, если это первый раз) подключение к вашему MQTT-брокеру. Обычно это `localhost:1883` или IP-адрес контроллера.

    * В поле `Topic` введите полный путь к топику команды нашего реле. Для нашего примера это: `/devices/wb-mr6c_34/controls/K1/on`.

    * В поле `Name` можно задать осмысленное имя, например, "Управление лампой на кухне". Нажмите "Done".

  • Сборка потока:
  • * Соедините выход каждого из узлов `inject` со входом узла `mqtt out`. Теперь при нажатии на любой из `inject`, его `msg.payload` (`1` или `0`) будет отправлен в `mqtt out`, который, в свою очередь, опубликует это значение в заданный топик.

    Визуально ваш поток должен выглядеть так:
     [inject: "Включить лампу" (payload: "1")] --+
    

    |--> [mqtt out: "/devices/.../K1/on"]

    [inject: "Выключить лампу" (payload: "0")] --+

  • Развертывание и тестирование:
  • * Нажмите красную кнопку `Deploy` в правом верхнем углу редактора. Это сохранит и активирует ваши изменения.

    * Теперь физически подайте питание на ваш стенд.

    * Нажмите на кнопку слева от узла "Включить лампу". Если все сделано правильно, вы должны услышать щелчок реле, и ваша тестовая лампа загорится!

    * Нажмите на кнопку узла "Выключить лампу". Лампа должна погаснуть.

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

    ---

    Обратная связь: получение актуального состояния реле

    Наш текущий поток отлично справляется с отправкой команд, но он "слеп". Он не знает, действительно ли включилась лампа. Возможно, сработал автомат защиты, лампа перегорела или команда по какой-то причине не дошла. Чтобы построить надежную систему, нам необходима обратная связь. Мы должны не только отправлять команды, но и слушать (подписываться на) сообщения о реальном состоянии устройства.

    Для этого нам понадобится новый узел:

    Принцип работы обратной связи

    Когда контроллер физически меняет состояние реле (неважно, по нашей команде из Node-RED или по какой-то другой причине), он немедленно публикует новое состояние (`1` или `0`) в топик состояния. В нашем примере это `/devices/wb-mr6c_34/controls/K1`.

    Узел `mqtt in`, подписанный на этот топик, мгновенно получает это сообщение от MQTT-брокера и передает его дальше в наш поток. Это позволяет нам реагировать на фактические изменения, а не на наши предположения.

    Практическая проверка

    Давайте увидим это в действии.

  • Добавление слушателя MQTT:
  • * Перетащите узел `mqtt in` на рабочее поле.

    * Дважды кликните по нему. Укажите тот же сервер MQTT, что и в `mqtt out`.

    * В поле `Topic` введите полный путь к топику состояния: `/devices/wb-mr6c_34/controls/K1`.

    * Установите `Output` в `a parsed JSON object`, если предполагаете, что могут приходить сложные данные. Для нашего случая `auto-detect` или `a string` также подойдет.

    * В поле `Name` напишите "Состояние лампы". Нажмите "Done".

  • Настройка отладки:
  • * Перетащите узел `debug` на поле.

    * Соедините выход узла `mqtt in` ("Состояние лампы") со входом узла `debug`.

  • Развертывание и наблюдение:
  • * Нажмите `Deploy`.

    * Откройте панель отладки (справа, иконка с жуком).

    * Теперь снова воспользуйтесь кнопками `inject` из предыдущего шага, чтобы включить и выключить лампу.

    Каждый раз, когда лампа меняет свое состояние, вы будете видеть в панели отладки новое сообщение. Если вы включили лампу, придет сообщение с `payload: "1"`. Если выключили — `payload: "0"`. Это и есть обратная связь в действии. Вы видите не то, что вы отправили, а то, что реально произошло на контроллере.

    ---

    Пример: Создание пользовательского интерфейса (Dashboard)

    Командная строка и узлы `inject` хороши для отладки, но конечному пользователю нужен простой и понятный интерфейс. Для этого в Node-RED существует замечательное дополнение — `node-red-dashboard`. Оно позволяет за считанные минуты создавать интерактивные панели управления, доступные через веб-браузер.

    Мы создадим простой переключатель (тумблер), который будет и управлять лампой, и показывать ее актуальное состояние.

    Необходимый узел

    Создание двусторонней связи

    Самая важная особенность узлов из `node-red-dashboard` — их двусторонняя природа.

    Эта механика позволяет нам создать идеальный замкнутый контур управления и обратной связи.

    Пошаговая инструкция

  • Добавление переключателя:
  • * Перетащите узел `ui_switch` (из секции `dashboard` в палитре) на рабочее поле.

    * Дважды кликните по нему.

    * Group: Настройте группу и вкладку, где будет отображаться элемент. Например, `[Default] Home`.

    * On Payload: Установите `string` и значение `1`. Это то, что узел будет отправлять при включении.

    * Off Payload: Установите `string` и значение `0`. Это то, что узел будет отправлять при выключении.

    * Pass through `msg` if payload matches state: Уберите эту галочку, чтобы избежать зацикливания команд.

    * Indicator: Можно выбрать, чтобы индикатор (`1`/ `0`) отображался рядом с переключателем.

    * Label: Напишите "Свет на кухне". Нажмите "Done".

  • Сборка полного потока:
  • * Теперь у нас есть все компоненты:

    * `ui_switch`: наш пользовательский интерфейс.

    * `mqtt out`: отправщик команд.

    * `mqtt in`: получатель состояния.

    * Цепь управления (вперед): Соедините выход узла `ui_switch` со входом узла `mqtt out` (`/devices/.../K1/on`).

    * Цепь обратной связи (назад): Соедините выход узла `mqtt in` (`/devices/.../K1`) со входом узла `ui_switch`.

    Итоговая схема потока:
                                    +--------------------------------------+
    

    | |

    (Отправка команды) v |

    [ui_switch] --------> [mqtt out: ".../on"] ---> (MQTT Брокер) ---+ | (Отображение состояния)

    | |

    v |

    (Получение состояния) <--------------------- [mqtt in: "..."] <--+ |

    |

    |

    // Физический мир |

    (MQTT Брокер) ---> [Драйвер контроллера] -> [Реле K1] -> <Лампа> --------+ (Изменение состояния)

  • Развертывание и использование:
  • * Нажмите `Deploy`.

    * Откройте интерфейс дашборда. Обычно он доступен по адресу `http://:1880/ui`.

    * Вы увидите ваш переключатель. Попробуйте нажать на него. Лампа должна включиться, а сам переключатель останется в положении "Вкл". Нажмите еще раз — лампа погаснет.

    * Для проверки обратной связи: используйте узел `inject` из шага 3, чтобы включить лампу. Вы увидите, как переключатель в дашборде сам перейдет в положение "Вкл", отражая реальное состояние дел.

    ---

    Итоги и дальнейшие шаги

    > 🔗 Связанный материал: В следующем уроке, `COURSE-06-M02-L01`, мы рассмотрим, как управлять не только дискретными, но и аналоговыми сигналами на примере диммирования светодиодной ленты.

    В рамках этого урока мы проделали огромную практическую работу:

  • Рассмотрели и реализовали безопасное физическое подключение нагрузки ~230В к реле контроллера.
  • Изучили фундаментальную концепцию адресации в системах автоматизации на базе MQTT, разделив топики команд и состояний.
  • Создали первый рабочий поток в Node-RED для отправки команд включения и выключения.
  • Реализовали контур обратной связи, позволяющий системе знать актуальное состояние оборудования.
  • Построили простой, но полнофункциональный пользовательский интерфейс с двусторонней связью.
  • Вы закрепили такие ключевые понятия, как MQTT-топик, payload, обратная связь и освоили базовые узлы Node-RED, которые являются строительными блоками для подавляющего большинства проектов автоматизации.

    Ограничения текущей схемы

    Несмотря на работоспособность, наша схема имеет некоторые ограничения, которые важно понимать:

    Все эти вопросы станут темами наших следующих, более продвинутых уроков. Вы заложили прочный фундамент, на котором мы будем строить сложные и интеллектуальные системы автоматизации.