ГлавнаяАкадемияМонтаж и пусконаладка контроллера → Проверка входов в Node-RED

Проверка входов в Node-RED

Урок 4 · Монтаж и пусконаладка контроллера · 15 мин · theory

Введение: от «железа» к «софту»

На предыдущих уроках этого модуля мы подробно рассмотрели физический аспект подключения различных устройств к универсальным входам контроллера HI: от простых выключателей до сложных аналоговых датчиков. Мы meticulously следовали стандартам схем подключения, использовали правильную цветовую кодировку и обеспечивали надежность каждого контакта. Однако корректный монтаж — это лишь половина дела. Физически подключенное устройство остается «немым» для системы до тех пор, пока мы не научимся «слышать» его сигналы на программном уровне.

Этот урок — мост между миром физических проводов и миром программной логики. Наша основная задача — убедиться, что каждый сигнал, приходящий на клеммы контроллера, корректно считывается, оцифровывается и становится доступным для дальнейшей обработки. Мы переходим от мультиметра и отвертки к нашему главному инструменту пусконаладки и диагностики — среде Node-RED.

Node-RED позволяет в реальном времени визуализировать данные, поступающие со всех входов. Это дает нам возможность мгновенно проверить результат нашей монтажной работы: Цель этого урока — научиться создавать простые диагностические потоки в Node-RED, которые позволят вам видеть и проверять состояние каждого подключенного входа. Освоив этот навык, вы сможете с абсолютной уверенностью переходить от этапа монтажа к этапу программирования логики, зная, что «органы чувств» вашей системы автоматизации функционируют безупречно. Это ключевой этап любого Smoke Test, подтверждающий, что «железо» готово к работе с «софтом».

---

Узел `hi-input`: чтение данных с входов

Для взаимодействия с физическими входами контроллера в среде Node-RED существует два основных подхода. Первый, и наиболее предпочтительный для инсталляторов, — использование специализированных узлов из палитры `node-red-contrib-hi`. Второй, более универсальный, — работа с системными MQTT-топиками.

Специализированный узел `hi-input`

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

Ключевые особенности узла `hi-input`:
  • Простота конфигурации: Вам не нужно знать детали системной архитектуры. Достаточно выбрать номер входа из выпадающего списка и указать тип подключенного к нему сигнала.
  • Автоматическое определение типа данных: Узел самостоятельно преобразует сырой сигнал в понятный формат: `boolean` для дискретных входов, `number` для аналоговых и температурных.
  • Встроенная обработка: Узел берет на себя базовый опрос оборудования, минимизируя необходимость в ручном управлении.
  • Конфигурация узла:

    При двойном клике на узел `hi-input` открывается окно его свойств, где необходимо настроить следующие параметры:

    * `Discrete (Dry Contact)` — для кнопок, выключателей, герконов.

    * `1-Wire Sensor` — для датчиков температуры DS18B20. Потребуется указать уникальный адрес датчика на шине.

    * `Analog 0-10V` — для датчиков с аналоговым выходом 0-10В.

    Альтернативный метод: узел `mqtt in`

    Под капотом архитектуры контроллера HI лежит MQTT-брокер, который служит центральной шиной обмена сообщениями между всеми системными сервисами. Драйверы, отвечающие за работу с физическими входами, публикуют их состояния в строго определенные MQTT-топики. Это позволяет получить доступ к данным с любого входа, просто подписавшись на нужный топик.

    Стандартная структура MQTT-топика для состояния входа выглядит так:

    `hi//inputs///state`

    Где:

    Примеры топиков:

    > 💡 Подсказка: Используйте wildcard `+` в MQTT-подписке, чтобы сразу отлаживать все входы одного типа. Например, подписка на топик `hi/SN-ABCDEF123456/inputs/discrete/+/state` в узле `mqtt in` позволит вам получать сообщения от всех дискретных входов одновременно. Это невероятно удобно на этапе пусконаладки для быстрой проверки целой группы устройств.

    | Критерий | Узел `hi-input` | Узел `mqtt in` |

    | :--- | :--- | :--- |

    | Простота | Высокая (графический интерфейс) | Средняя (нужно знать структуру топиков) |

    | Гибкость | Средняя | Высокая (можно использовать wildcards `+` и `#`) |

    | Наглядность | Высокая (узел четко привязан к входу) | Низкая (один узел может получать данные из разных источников) |

    | Рекомендация | Для инсталляторов и типовых задач | Для интеграторов и сложных сценариев отладки |

    Для целей этого курса мы будем использовать преимущественно узел `hi-input` как более простой и наглядный инструмент.

    ---

    Практика: проверка дискретных входов

    Это первая и самая простая проверка. Мы создадим поток, который будет выводить в панель отладки состояние дискретного входа, к которому, как мы рассмотрели в уроке [COURSE-03-M05-L02], подключен выключатель или датчик движения.

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

  • Откройте редактор Node-RED на вашем контроллере.
  • Перетащите на рабочее поле узел `hi-input` из левой палитры (секция "HI Platform").
  • Дважды кликните по узлу, чтобы открыть его настройки:
  • * Name: Введите "Проверка выключателя Гостиная".

    * Input: Выберите из списка номер входа, к которому вы физически подключили выключатель (например, `UI-1`).

    * Signal Type: Установите `Discrete (Dry Contact)`.

    * Нажмите Done.

  • Теперь перетащите на рабочее поле узел `debug` (из секции "common").
  • Соедините выход узла `hi-input` со входом узла `debug`. Ваша схема должна выглядеть так:
  •     [hi-input: "Проверка выключателя Гостиная"] -> [debug]

  • Нажмите красную кнопку Deploy в правом верхнем углу, чтобы развернуть поток на контроллере.
  • Откройте панель отладки, кликнув на иконку жука (Debug messages) в правой боковой панели.
  • Анализ результата

    Теперь сымитируйте событие. Нажмите на подключенный выключатель или помашите рукой перед датчиком движения.

    В панели отладки вы увидите новое сообщение. Изначально оно может быть свернуто. Кликните на него, чтобы развернуть и увидеть полную структуру объекта `msg`. Нас интересует свойство `msg.payload`.

    При замыкании "сухого контакта" (нажатии кнопки):

    Вы увидите сообщение, в котором `payload` будет иметь булево значение `true`.

    {
    

    "payload": true,

    "topic": "hi/SN-ABCDEF123456/inputs/discrete/1/state",

    "_msgid": "a1b2c3d4.e5f678"

    }

    При размыкании "сухого контакта" (отпускании кнопки):

    Появится новое сообщение со значением `payload`, равным `false`.

    {
    

    "payload": false,

    "topic": "hi/SN-ABCDEF123456/inputs/discrete/1/state",

    "_msgid": "f9e8d7c6.b5a432"

    }

    > ℹ️ Информация: Обратите внимание, что узел `hi-input` также формирует `msg.topic`, соответствующий системному MQTT-топику для данного входа. Это полезно для дальнейшей маршрутизации и логирования.

    Если вы видите, что `msg.payload` изменяется с `false` на `true` и обратно в точном соответствии с вашими действиями, тест пройден успешно. Это означает, что кабель проложен правильно, контакты надежны, а вход контроллера сконфигурирован корректно. Если состояние не меняется, вернитесь к этапу физической проверки соединений.

    ---

    Практика: проверка датчиков температуры (1-Wire)

    Теперь проверим работу датчиков температуры, подключенных к шине 1-Wire, как было описано в уроке [COURSE-03-M05-L03]. Процесс схож с проверкой дискретного входа, но есть свои нюансы.

    Инструкция по созданию потока:

  • Создайте новый поток, используя ту же комбинацию узлов: `[hi-input]` -> `[debug]`.
  • Настройте узел `hi-input`:
  • * Name: "Температура в спальне".

    * Input: Выберите номер входа, к которому подключена шина 1-Wire (например, `UI-5`).

    * Signal Type: Установите `1-Wire Sensor`.

    * Address: Это самое важное поле. Система автоматически сканирует шину. Вы должны увидеть выпадающий список с уникальными 64-битными адресами всех найденных на шине датчиков (например, `28-01234567abcd`). Выберите адрес того датчика, который вы хотите опрашивать.

    * Polling Interval: Установите интервал опроса, например, `10` секунд. Не стоит ставить слишком маленькое значение, чтобы не перегружать шину.

    * Нажмите Done.

  • Соедините узлы и нажмите Deploy.
  • Анализ результата в панели отладки

    Каждые 10 секунд в панели отладки будет появляться новое сообщение. В отличие от дискретного входа, здесь `msg.payload` будет содержать числовое значение — измеренную температуру в градусах Цельсия.

    {
    

    "payload": 24.5,

    "topic": "hi/SN-ABCDEF123456/inputs/1wire/5_28-01234567abcd/state",

    "_msgid": "1a2b3c4d.5e6f78"

    }

    Чтобы убедиться, что датчик работает корректно, проведите простой эксперимент: сожмите его корпус в руке на 20-30 секунд. Вы должны увидеть, как значение в `msg.payload` плавно увеличивается, отражая температуру вашего тела.

    > ⚠️ Внимание: Если узел для датчика 1-Wire постоянно выдает значение `85.0` °C, это стандартный код ошибки при инициализации. Датчик DS18B20 возвращает это значение сразу после подачи питания, до того как он выполнил первое успешное измерение. Если вы видите `85.0` постоянно, это означает, что контроллер видит датчик на шине, но не может получить от него корректные данные о температуре. Наиболее частые причины:

    > * Плохой контакт на линии данных (DQ).

    > * Нестабильное питание (если используется "паразитная" схема).

    > * Слишком длинная или некачественная шина, вызывающая искажение сигнала.

    > Проверьте правильность подключения линии данных (DQ), питания (Vdd) и земли (GND) в соответствии со стандартом схемы.

    Если вы видите адекватное значение температуры, которое реагирует на внешнее воздействие, тест пройден успешно.

    ---

    Практика: проверка аналоговых входов (0-10В)

    Последний практический блок посвящен проверке аналоговых входов, настроенных на прием сигнала 0-10В, как мы это делали в уроке [COURSE-03-M05-L04]. Этот тип входов используется для датчиков с плавно изменяющимся выходным сигналом, например, датчиков освещенности, влажности или давления.

    Создание потока для аналогового входа

  • Снова используем связку `[hi-input]` -> `[debug]`.
  • Настройте узел `hi-input`:
  • * Name: "Датчик освещенности Офис".

    * Input: Выберите номер входа, сконфигурированного для работы с сигналом 0-10В (например, `UI-17`).

    * Signal Type: Установите `Analog 0-10V`.

    * Polling Interval: Установите интервал, например, `5` секунд.

    * Нажмите Done.

  • Разверните поток.
  • Анализ сырых данных

    В панели отладки вы начнете получать сообщения. `msg.payload` может содержать либо уже преобразованное значение в вольтах, либо "сырое" значение от АЦП (аналого-цифрового преобразователя). На контроллере HI это обычно целое число в диапазоне от 0 до 4095, где 0 соответствует 0В, а 4095 — 10В.

    Пример `msg.payload` с сырыми данными:

    {
    

    "payload": 1850,

    "topic": "hi/SN-ABCDEF123456/inputs/analog/17/state",

    "_msgid": "a1b9c8d7.e6f543"

    }

    Работать с такими значениями неудобно. Нам нужно преобразовать их в понятные единицы, например, в проценты (0-100%). Для этого в Node-RED есть стандартный узел `range`.

    Масштабирование значений с помощью узла `range`

  • Добавьте в ваш поток узел `range` (из секции "function"), разместив его между `hi-input` и `debug`.
  •     [hi-input] -> [range] -> [debug]

  • Откройте настройки узла `range`:
  • * Action: `Map`

    * Input range: установите `0` и `4095`.

    * Output range: установите `0` и `100`.

    * Action: выберите `Scale and limit to target range`.

    * Нажмите Done и разверните поток.

    Теперь в панели отладки вы будете видеть тот же сигнал, но уже отмасштабированный в проценты. Например, сырое значение `1850` превратится примерно в `45.17`.

    Пример `msg.payload` после узла `range`:

    {
    

    "payload": 45.17704517704518,

    "topic": "hi/SN-ABCDEF123456/inputs/analog/17/state",

    "_msgid": "a1b9c8d7.e6f543"

    }

    Проведите тест: если у вас датчик освещенности, закройте его рукой. Значение в `msg.payload` должно упасть практически до нуля. Затем посветите на него фонариком — значение должно стремиться к 100. Если это происходит, тест аналогового входа пройден успешно.

    ---

    Итоги и следующие шаги

    В этом уроке мы сделали важнейший шаг — соединили физический мир устройств с программной средой Node-RED. Мы научились считывать, визуализировать и верифицировать сигналы от трех основных типов входов: дискретных, температурных (1-Wire) и аналоговых (0-10В).

    Ключевая формула отладки, которую вы должны запомнить и использовать на каждом объекте, предельно проста:

    `Узел чтения входа (`hi-input` или `mqtt in`) + Узел отладки (`debug`)`

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

    Мы также убедились в важности понимания структуры сообщения `msg` и, в частности, его полезной нагрузки `msg.payload`. Теперь вы знаете, какой тип данных ожидать от каждого входа:

    Успешное завершение проверок, описанных в этом уроке, означает, что этап пусконаладки аппаратной части можно считать завершенным. Контроллер корректно «видит» и «ощущает» окружающий мир. Теперь мы готовы перейти к самому интересному — использованию этих данных для создания интеллектуальных сценариев автоматизации.

    > 🔗 Связанный материал: Данные, полученные в этом уроке, являются основой для создания логики управления. Подробное изучение того, как использовать эти `true`/`false` и числовые значения для управления реле, светом и климатом, мы начнем в следующем курсе. Смотрите модуль COURSE-04-M01: Основы автоматизации в Node-RED.

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