ГлавнаяАкадемияОсновы умного дома → Практика: Создание первого Flow 'Hello, World'

Практика: Создание первого Flow 'Hello, World'

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

Введение: Цель нашего первого Flow

Добро пожаловать в первую практическую работу в нашей академии! Сегодня мы создадим с нуля свой первый, самый базовый, но от этого не менее важный сценарий автоматизации. В программировании и разработке существует давняя традиция: при освоении новой системы первой программой всегда становится "Hello, World!". Её задача — не выполнить сложную бизнес-логику, а проверить, что вся среда разработки функционирует корректно.

Наша цель — создать в интерфейсе Node-RED простейший поток (Flow), который по ручному запуску сгенерирует сообщение (Message) с текстом "Hello, World!" и выведет его в панель отладки.

> 🔗 Связанный материал: Мы подробно разобрали теоретические основы в предыдущем уроке. Если вам нужно освежить знания, вернитесь к уроку «Ключевые понятия: Node, Message, Flow».

Выполнение этой задачи подтвердит, что:

  • Вы умеете входить в интерфейс контроллера.
  • Вы понимаете, как добавлять узлы (Nodes) на рабочее пространство.
  • Вы можете соединять узлы между собой для создания потока данных.
  • Вы освоили ключевой процесс развертывания (Deploy), без которого изменения не вступают в силу.
  • Вы знаете, как использовать панель отладки для просмотра результатов работы вашего сценария.
  • По сути, наш сегодняшний Flow будет состоять всего из двух узлов, соединенных одной связью. Первый узел будет инициировать процесс, а второй — отображать результат. Это простое действие является тем самым «атомом», из которого в дальнейшем будут строиться все сложные системы автоматизации на объектах, будь то умный дом или небольшой промышленный цех.

    ---

    Необходимые узлы (Nodes): Inject и Debug

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

    Узел `Inject` (Инициировать)

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

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

    > * Инициатор потока: `Inject` почти всегда является первым узлом в тестовых или демонстрационных потоках.

    > * Генератор данных: Он не просто запускает поток, но и формирует начальный объект `msg`, помещая в его свойство `msg.payload` указанные вами данные.

    > * Планировщик: `Inject` может работать как простейший CRON, запуская поток через заданные интервалы времени (каждую секунду, раз в час, в определенное время суток).

    При двойном клике на узел открывается окно его настроек. Рассмотрим ключевые параметры:

    | Параметр | Назначение | Пример для нашего урока |

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

    | Payload | "Полезная нагрузка". Это основное содержимое, которое узел поместит в `msg.payload`. Может быть строкой, числом, JSON-объектом и др. | `string`: "Hello, World" |

    | Topic | "Тема сообщения". Это свойство `msg.topic`, которое используется для маршрутизации и фильтрации сообщений, как мы увидим в будущих уроках. | Оставим пустым |

    | Repeat | Настройка для автоматического запуска. Позволяет запускать поток по интервалу, в определенное время или дни недели. | `none` (нет повторений) |

    | Name | Имя узла, которое отображается в редакторе. Всегда давайте узлам осмысленные имена для повышения читаемости схемы. | "Запустить тест" |

    Узел `Debug` (Отладка)

    Если `Inject` — это кнопка «Старт», то `Debug` — это наш «монитор» или «индикаторная панель». Его единственная задача — перехватить проходящее через него сообщение `msg` и вывести его содержимое на боковую панель отладки. Это бесценный инструмент для понимания того, какие данные циркулируют в вашей системе на любом этапе.

    > 💡 Подсказка: Панель Debug — ваш главный инструмент при разработке и отладке. Не стесняйтесь «обвешивать» ими свой Flow, чтобы отслеживать состояние объекта `msg` на каждом этапе, особенно до и после узлов, преобразующих данные.

    Основные настройки узла `Debug`:

    Output (Вывод): Определяет, что именно* будет показано в панели отладки.

    * `msg.payload`: Вариант по умолчанию. Показывает только полезную нагрузку сообщения. Идеально для быстрой проверки основного значения.

    * `complete msg object`: Показывает весь объект `msg` целиком, включая `payload`, `topic`, внутренний идентификатор `_msgid` и любые другие свойства, которые могли быть добавлены предыдущими узлами. Этот режим критически важен для комплексной отладки.

    To (Назначение): Определяет, куда* будет направлен вывод.

    * `debug window`: Стандартный вариант, выводит сообщение на боковую панель в интерфейсе Node-RED.

    * `system console`: Выводит сообщение в системную консоль, где был запущен Node-RED. Полезно для отладки на уровне операционной системы контроллера.

    Для нашей первой задачи мы оставим настройки по умолчанию, чтобы увидеть в панели отладки только `msg.payload`.

    ---

    Пошаговая сборка Flow 'Hello, World'

    Теперь, когда мы знакомы с нашими инструментами, перейдем к практике. Мы соберем наш поток шаг за шагом прямо в веб-интерфейсе контроллера.

    Шаг 1: Добавление узлов на рабочее пространство

  • Обратите внимание на палитру узлов в левой части экрана. Она сгруппирована по категориям (common, function, network и т.д.).
  • Найдите узел `Inject` в секции `common`. Он обычно самый первый в списке и имеет иконку в виде кнопки, направленной вправо.
  • Зажмите левую кнопку мыши на узле `Inject` и, не отпуская, перетащите его на центральное рабочее пространство (на вкладку "Flow 1"). Отпустите кнопку мыши. Узел `Inject` теперь является частью вашего потока.
  • Аналогично найдите узел `Debug` в той же секции `common`. Он имеет иконку в виде жука.
  • Перетащите узел `Debug` на рабочее пространство и разместите его правее узла `Inject` на некотором расстоянии.
  • > ℹ️ Информация: Старайтесь располагать узлы аккуратно и логично, слева направо в порядке выполнения. Это значительно повышает читаемость схем. Для сложных потоков используйте группировку и комментарии, но для нашего простого случая достаточно ровного расположения.

    Шаг 2: Соединение узлов

    Теперь нам нужно создать связь (wire), по которой сообщение `msg` потечет от `Inject` к `Debug`.

  • Наведите курсор мыши на узел `Inject`. Вы увидите маленький серый квадрат на его правой стороне. Это выходной порт.
  • Наведите курсор на этот порт. Он подсветится оранжевым контуром.
  • Зажмите левую кнопку мыши. Теперь вы можете «тянуть» линию связи.
  • Не отпуская кнопку, дотяните эту линию до входного порта узла `Debug` (серого квадрата на его левой стороне).
  • Когда входной порт `Debug` также подсветится оранжевым, отпустите кнопку мыши.
  • Результат: Между узлами появится серая линия. Это и есть наш поток! Вы только что визуально запрограммировали передачу данных от одного компонента к другому.

    На данном этапе ваш экран должен выглядеть примерно так:

    (Изображение для иллюстрации: два узла, соединенные линией)

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

    ---

    Настройка узлов и развертывание (Deploy)

    Сборка схемы — это только полдела. Теперь нам нужно сконфигурировать узлы и, что самое важное, "загрузить" наш новый сценарий в память контроллера, чтобы он начал выполняться. Этот процесс называется развертыванием (Deploy).

    > ⚠️ Внимание: Любые изменения в потоках — добавление узла, изменение его настроек, создание новой связи — вступают в силу только после нажатия кнопки 'Deploy'. Если ваш Flow не работает, как ожидалось, первое, что нужно проверить — не забыли ли вы развернуть изменения. Маленький синий кружок над измененным узлом как раз сигнализирует о наличии несохраненных правок.

    Шаг 1: Конфигурация узла `Inject`

  • Дважды щелкните левой кнопкой мыши по узлу `Inject` на вашем рабочем пространстве. Откроется окно его настроек.
  • Найдите поле Payload. В выпадающем списке справа от него выберите тип данных `string` (строка). Иконка изменится на `A-Z`.
  • В текстовое поле введите нашу тестовую фразу: `Hello, World`.
  • Далее найдите поле Name и введите осмысленное имя, например, "Запуск 'Hello, World'". Это имя будет отображаться под узлом в редакторе.
  • Остальные поля (Topic, Repeat) оставьте без изменений.
  • Нажмите оранжевую кнопку Done, чтобы сохранить настройки и закрыть окно.
  • Шаг 2: Конфигурация узла `Debug`

  • Дважды щелкните по узлу `Debug`.
  • Убедитесь, что в поле Output выбрано значение `msg.payload`. Это означает, что в панель отладки будет выводиться только полезная нагрузка сообщения.
  • Для наглядности можно изменить поле Name на "Вывод в консоль".
  • Нажмите кнопку Done.
  • Шаг 3: Развертывание (Deploy)

    Теперь, когда оба узла настроены и у них появились синие точки (индикаторы изменений), пришло время развернуть наш Flow.

  • Найдите большую оранжевую кнопку Deploy в правом верхнем углу интерфейса.
  • Нажмите на неё.
  • Через мгновение вы увидите всплывающее уведомление "Successfully deployed". Синие точки над узлами исчезнут. Это означает, что ваш сценарий успешно загружен на контроллер и готов к работе.
  • С этого момента наш поток является "живым". Он будет выполняться на контроллере HI даже после того, как вы закроете браузер.

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

    {
    

    "payload": "Hello, World",

    "topic": "",

    "_msgid": "90d3463.1c9b3b8"

    }

    Мы готовы к главному — тестированию.

    ---

    Тестирование и анализ результата

    Наш Flow собран, настроен и развернут. Пришло время проверить его в действии и убедиться, что мы получили ожидаемый результат.

    Шаг 1: Запуск потока

  • Вернитесь к рабочему пространству с вашим потоком.
  • Найдите узел `Inject` (теперь он подписан "Запуск 'Hello, World'").
  • Слева от узла находится серая квадратная кнопка. Это кнопка для ручного запуска.
  • Нажмите на эту кнопку один раз.
  • В момент нажатия узел `Inject` создал объект `msg` (как в примере выше), отправил его по связи, и этот объект `msg` поступил на вход узла `Debug`.

    Шаг 2: Просмотр результата в панели отладки

    Теперь нам нужно увидеть результат работы узла `Debug`.

  • В правом верхнем углу интерфейса, рядом с кнопкой `Deploy`, найдите иконку с изображением жука. Это кнопка для открытия/закрытия боковой панели отладки.
  • Нажмите на эту иконку. Справа откроется панель Debug messages.
  • Если в панели уже были какие-то системные сообщения, вы можете очистить ее, нажав на иконку с корзиной.
  • Среди сообщений вы должны увидеть новую строку, содержащую наш текст: `Hello, World`.
  • Поздравляем! Вы только что успешно создали, развернули и протестировали свой первый рабочий сценарий автоматизации.

    Шаг 3: Анализ отладочного сообщения

    Давайте внимательно рассмотрим строку, которая появилась в панели отладки. Она содержит больше, чем просто наш текст:

    Этот простой вывод дает нам всю необходимую информацию для подтверждения, что поток работает так, как мы его спроектировали.

    ---

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

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

    > ℹ️ Информация: Не бойтесь экспериментировать! Вернитесь к узлу `Inject` и попробуйте изменить его настройки. Вместо строки (`string`) выберите `number` и отправьте число. Или выберите `JSON` и отправьте простой объект, например `{"status": "on", "brightness": 80}`. Посмотрите, как изменится вывод в панели `Debug`. Это лучший способ закрепить материал на практике.

    Каждый, даже самый сложный проект по автоматизации гостиницы или умного дома, в своей основе состоит из таких же простых блоков и связей. Понимание того, как данные в виде объекта `msg` путешествуют от узла к узлу, преобразуясь на каждом шаге, — это ключ к успешному проектированию надежных систем.

    Что дальше

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