ГлавнаяАкадемияОсновы умного дома → Обзор интерфейса Node-RED

Обзор интерфейса Node-RED

Урок 3 · Основы умного дома · 30 мин · theory

Знакомство с Node-RED: Что это и зачем?

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

> 📋 Ключевые понятия:

> * Node-RED: Среда визуальной разработки для потокового программирования. Она позволяет соединять аппаратные устройства, API и онлайн-сервисы в единые логические цепочки.

> * Визуальное программирование: Вместо написания строк кода вы создаете программы, соединяя на экране графические блоки (узлы).

> * Потоковое программирование: Модель, в которой программа рассматривается как поток данных, проходящих через сеть операторов (узлов).

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

Для лучшего понимания представьте конструктор LEGO. У вас есть множество различных кубиков — это узлы (nodes). Каждый кубик выполняет одну простую функцию: один — это кнопка, другой — лампочка, третий — таймер. Когда вы соединяете эти кубики вместе, вы создаете поток (flow) — логическую цепочку, которая представляет собой готовую модель или сценарий. А то, что передается между кубиками, заставляя их работать — это сообщения (messages).

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

---

Анатомия интерфейса: Палитра, Рабочее пространство, Боковая панель

После того как вы вошли в веб-интерфейс контроллера и перешли в раздел Node-RED, как было описано в уроке [COURSE-01-M01-L03: Подключение и первый вход], перед вами откроется основной экран разработки. Он логически разделен на три ключевые области, с которыми вы будете работать постоянно.

| Область | Расположение | Назначение |

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

| Палитра (Palette) | Левая колонка | Библиотека всех доступных функциональных блоков (узлов). |

| Рабочее пространство (Workspace) | Центральная область | Холст для создания и редактирования потоков (flows). |

| Боковая панель (Sidebar) | Правая колонка | Информационные панели: отладка, справка, конфигурация. |

Давайте рассмотрим каждую область подробнее.

Палитра узлов

Это ваш ящик с инструментами. Все доступные узлы сгруппированы по категориям для удобства навигации:

> 💡 Подсказка: Используйте поле поиска в верхней части палитры, чтобы мгновенно находить нужные узлы. Например, введите 'mqtt' для фильтрации всех узлов, связанных с протоколом MQTT, или 'inject', чтобы быстро найти узел для ручного запуска. Это значительно ускоряет работу.

Рабочее пространство

Это ваш основной холст, где происходит вся магия. Здесь вы будете:

  • Перетаскивать узлы из палитры.
  • Соединять их между собой, кликая на выходной порт одного узла и протягивая "провод" к входному порту другого.
  • Настраивать узлы, дважды кликая по ним для открытия диалога конфигурации.
  • Организовывать логику в виде наглядных блок-схем.
  • В верхней части рабочего пространства находятся вкладки. Каждая вкладка — это отдельный поток (flow). Рекомендуется использовать разные вкладки для разных функциональных зон объекта (например, "Освещение", "Климат", "Безопасность") или для разных помещений ("Гостиная", "Кухня", "Гараж"). Это делает проект структурированным и легко поддерживаемым.

    Боковая панель

    Эта панель предоставляет контекстную информацию и инструменты. У нее есть несколько вкладок:

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

    ---

    Узлы и Сообщения: Основы потокового программирования

    Чтобы создавать автоматизацию, необходимо понять два фундаментальных элемента: узел и сообщение.

    Что такое 'узел' (Node)?

    Узел — это базовый строительный блок в Node-RED. Технически, это предопределенный фрагмент кода (обычно JavaScript), обернутый в удобный графический интерфейс. У каждого узла есть:

    Концепция 'сообщения' (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

    }

    В этом примере:

    Жизненный цикл сообщения

    Понимание жизненного цикла сообщения является фундаментальным:

  • Создание: Сообщение рождается в начальном узле (например, `inject` по клику, `mqtt in` при получении данных, или аппаратный узел нашего контроллера при срабатывании "сухого контакта").
  • Передача: Узел-создатель отправляет `msg` из своего выходного порта по всем соединенным "проводам".
  • Обработка: Следующий узел в цепочке получает `msg` на свой входной порт. Внутри узла выполняется его логика. Он может:
  • - Прочитать данные из `msg.payload` или `msg.topic`.

    - Изменить `msg.payload` (например, узел `change` может преобразовать `true` в `1`).

    - Добавить новые свойства к объекту `msg` (например, `msg.hysteresis_value = 0.5`).

    - Не делать ничего с сообщением и просто передать его дальше (как есть).

    - Создать совершенно новое сообщение.

    - Заблокировать сообщение и не передавать его дальше (например, узел `filter` или `switch`).

  • Продолжение: Узел отправляет (или не отправляет) измененное или исходное сообщение дальше по потоку к следующему узлу.
  • Этот цикл повторяется, пока сообщение не достигнет конца потока (например, узла `debug` или `mqtt out`, который отправит команду на исполнительное устройство). Ваша задача как инженера — выстраивать цепочки узлов так, чтобы этот жизненный цикл приводил к желаемому результату автоматизации.

    ---

    Практика: Создаем первый поток «Hello, World!»

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

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

  • Выберите узлы. Найдите в палитре слева узел `inject` (в категории `input`) и перетащите его на рабочее пространство. Затем найдите узел `debug` (в категории `output`) и также перетащите его на холст. Разместите `inject` слева, а `debug` — справа.
  •     (Палитра)                       (Рабочее пространство)

    [ inject ]─────────► [ inject ] [ debug ]

    [ debug ]

    [ comment ]

    ...

  • Соедините узлы. Наведите курсор на серый порт на правой стороне узла `inject`. Курсор изменится. Нажмите левую кнопку мыши и, не отпуская ее, протяните линию ("провод") к серому порту на левой стороне узла `debug`. Отпустите кнопку мыши. Между узлами появится серая соединительная линия.
  •     (Рабочее пространство)

    [ inject ]───────────[ debug ]

    Это означает, что любое сообщение, сгенерированное узлом `inject`, будет отправлено на вход узла `debug`.

  • Настройте узел `inject`. Дважды кликните по узлу `inject`, чтобы открыть его диалог настроек.
  • - В поле `Payload` по умолчанию стоит `timestamp` (временная метка). Нам это не нужно. Кликните на выпадающий список и выберите тип `string` (строка), обозначается как `"abc"`.

    - В появившемся текстовом поле введите `Привет, мир!`.

    - Можно также задать `Topic`, например, `test/greeting`. Это не обязательно, но полезно для практики.

    - Нажмите кнопку Done.

  • Настройте узел `debug`. Дважды кликните по узлу `debug`.
  • - Убедитесь, что в поле `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 путем добавления новых узлов.

    Управление вкладками потоков

    Рабочее пространство с вкладками позволяет эффективно структурировать проект.

    Import / Export: Обмен потоками

    Одной из самых мощных функций Node-RED является возможность импортировать и экспортировать потоки. Любой поток или даже отдельная группа узлов может быть представлена в виде текста формата JSON.

    Экспорт:
  • Откройте меню-"гамбургер" в правом верхнем углу.
  • Выберите `Export`.
  • Во вкладке `Clipboard` вы можете экспортировать либо `Current Flow` (активную вкладку), либо `All Flows` (все вкладки проекта).
  • Скопируйте сгенерированный 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": []

    }

    ]

    Этот код можно сохранить в текстовый файл как резервную копию или отправить коллеге.

    Импорт:
  • Скопируйте JSON-код потока (например, из нашей будущей Библиотеки сценариев).
  • Откройте меню `Import`.
  • Вставьте код в текстовое поле и нажмите `Import`. Узлы появятся на вашем рабочем пространстве.
  • Manage Palette: Установка новых узлов

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

  • Откройте меню-"гамбургер" и выберите `Manage palette`.
  • Откроется окно с двумя вкладками:
  • - `Nodes`: Показывает все уже установленные в вашей системе модули (коллекции узлов). Здесь вы можете временно отключать или удалять их.

    - `Install`: Позволяет искать и устанавливать новые модули из официальной библиотеки Node-RED, которая насчитывает тысячи дополнений.

  • Перейдите на вкладку `Install`. В поле поиска введите название модуля или ключевое слово (например, `telegram` для работы с ботом Telegram или `sun` для вычисления положения солнца).
  • В результатах поиска найдите нужный модуль (обычно они имеют префикс `node-red-contrib-` или `node-red-node-`) и нажмите `install`.
  • После короткой установки новые узлы из этого модуля появятся в вашей палитре, готовые к использованию.

    > 🔗 Связанный материал: Более подробно об установке специфичных для оборудования узлов, например, для работы с протоколами Modbus, DALI или беспроводными устройствами Zigbee, мы поговорим в соответствующих курсах: `COURSE-03: Протоколы и интеграции` и `COURSE-04: Беспроводные технологии`.

    ---

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

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

    Давайте закрепим ключевые моменты:

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

    Что дальше?

    В следующем уроке мы перейдем от "Hello, World!" к более практическим задачам. Мы детально разберем базовый набор узлов для построения логики (`switch`, `change`, `trigger`) и создадим первый осмысленный сценарий автоматизации, который уже можно будет применить на реальном объекте. Мы научимся управлять сообщениями, изменять их "на лету" и направлять по разным веткам в зависимости от условий.