Node-RED примеры: практические сценарии автоматизации

Поток в Node-RED, который не отправляет данные в отладочную панель, чаще всего ломается на узле inject без настроенной полезной нагрузки — проверьте, что у узла задан msg.payload и нажата кнопка Deploy после изменений. Ниже разберём рабочие примеры Node-RED: от простейшего «hello world» до связки с MQTT, Telegram и внешними API.

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

Первый поток: inject, debug и function

Базовый пример, с которого начинается знакомство с Node-RED, состоит из двух узлов: inject и debug. Перетащите их на рабочее поле, соедините выход первого со входом второго и нажмите Deploy в правом верхнем углу. Клик по кнопке на узле inject отправит метку времени, которая появится на вкладке отладки справа.

Чтобы поток стал полезнее, добавьте между ними узел function. Внутри него пишется обычный JavaScript, и вернуть нужно объект сообщения:

msg.payload = "Температура: " + (18 + Math.round(Math.random() * 10)) + " °C";

return msg;

Теперь каждый запуск генерирует случайное значение температуры — это удобный способ тестировать последующие узлы без реального датчика. Если в консоли отладки пусто, убедитесь, что узел debug настроен на вывод msg.payload, а не всего объекта сообщения.

Пример с MQTT: подписка и публикация

Одна из самых востребованных задач — обмен данными через MQTT, стандартный протокол для умного дома. Потребуется брокер (например, Mosquitto, установленный локально или на том же устройстве) и два узла: mqtt in для подписки и mqtt out для публикации.

В узле mqtt in укажите адрес брокера и топик, например home/sensor/temperature. Выход узла соедините с debug — и все сообщения, которые публикуют устройства в этот топик, появятся в панели отладки. Для обратной связи настройте mqtt out с топиком вроде home/relay/set и подайте на его вход строку ON или OFF.

⚠️ Внимание: если брокер доступен из внешней сети, обязательно включите аутентификацию по логину и паролю. Открытый MQTT-брокер без пароля — реальная уязвимость, через которую посторонние могут читать данные датчиков и управлять устройствами.
  • 📡 Узел mqtt in — подписка на топик и приём сообщений
  • 📤 Узел mqtt out — публикация команд устройствам
  • 🔁 Узел switch — маршрутизация сообщений по значению payload
  • 🧮 Узел change — замена или переименование полей сообщения
📊 Для какой задачи вы используете (или планируете) Node-RED?
Умный дом и датчики
Telegram-боты и уведомления
Интеграция с API и сервисами
Обучение и эксперименты

Умный дом: автоматизация по расписанию

Типовой сценарий для дома — включение света или обогревателя по времени. Узел inject умеет срабатывать не только по клику, но и по расписанию: в его настройках выберите повторение «at a specific time» и задайте нужное время. Выход соедините с узлом, который отправляет команду устройству — через MQTT, HTTP-запрос или специализированный узел для вашей экосистемы.

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

☑️ Проверка потока автоматизации

Выполнено: 0 / 5

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

Telegram-бот через Node-RED

Уведомления в мессенджер — ещё один популярный пример. Через палитру (Manage palette) устанавливается набор узлов для Telegram, после чего потребуется токен бота, полученный у BotFather в самом Telegram. Узел приёма сообщений реагирует на команды пользователя, узел отправки — доставляет ответы в чат.

Минимальная схема: telegram receiverswitch (разбор команды) → function (формирование ответа) → telegram sender. В поле chatId у узла отправки укажите идентификатор чата — его можно узнать из входящего сообщения, посмотрев объект msg в отладке.

⚠️ Внимание: токен бота — это полный ключ доступа к нему. Не публикуйте экспортированные потоки вместе с токеном и не храните его в открытых репозиториях. При утечке токен следует перевыпустить через BotFather.
Как узнать chatId для отправки сообщений

Подключите выход узла telegram receiver к узлу debug с выводом полного объекта сообщения, затем напишите боту любое сообщение. В объекте msg найдите путь msg.payload.chatId — это и есть нужный идентификатор.

Запросы к внешним API

Узел http request превращает Node-RED в клиент для любых веб-сервисов: погода, курсы валют, состояние серверов. Укажите URL и метод, а на выходе получите ответ в msg.payload. Если сервис возвращает JSON, включите в настройках узла автоматический разбор — тогда поля ответа станут доступны как свойства объекта.

Комбинация inject (опрос раз в несколько минут) → http requestswitch (проверка порога) → уведомление — это готовый мониторинг любого параметра, который отдаёт сервис. Например, можно отслеживать температуру за окном и слать сообщение в Telegram при заморозках.

ЗадачаКлючевые узлыСложность
Приём данных с датчикаmqtt in, debugНизкая
Управление реле по расписаниюinject, mqtt outНизкая
Telegram-уведомленияtelegram sender, functionСредняя
Мониторинг внешнего APIhttp request, switchСредняя
Логирование в файлfile, functionНизкая

Импорт готовых примеров и типичные ошибки

Готовые потоки распространяются в виде JSON. Чтобы добавить чужой пример, откройте меню в правом верхнем углу редактора, выберите Import и вставьте JSON в текстовое поле. Перед импортом из непроверенных источников просмотрите содержимое: внутри могут быть узлы function с произвольным кодом, который выполнится на вашем устройстве.

  • 🔍 Поток не работает после импорта — проверьте, установлены ли все нужные пакеты узлов через палитру
  • 🚫 Кнопка Deploy неактивна — в потоке нет изменений или редактор потерял соединение с сервером
  • 🔌 Узел mqtt показывает «disconnected» — проверьте адрес брокера, порт и учётные данные
  • 📭 В debug пусто — убедитесь, что предыдущий узел вообще отправляет сообщение, поставив debug на каждый этап

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

FAQ: частые вопросы о Node-RED

Нужно ли знать программирование для работы с Node-RED?

Для базовых сценариев — нет: подписка на MQTT, расписания и простые условия собираются мышью. Но минимальное знание JavaScript заметно расширяет возможности, поскольку узел function открывает доступ к произвольной логике обработки сообщений.

На чём можно запустить Node-RED?

Node-RED работает поверх Node.js, поэтому запускается на Windows, Linux, macOS, а также на одноплатных компьютерах вроде Raspberry Pi и в Docker-контейнерах. Для круглосуточных автоматизаций обычно выбирают устройство, которое постоянно включено.

Как сохранить и перенести свои потоки?

Через меню Export поток сохраняется в JSON, который можно импортировать на другом устройстве. Учтите, что учётные данные (токены, пароли) хранятся отдельно от потоков и при переносе их придётся ввести заново.

Почему потоки перестали работать после перезагрузки?

Возможная причина — Node-RED не настроен на автозапуск и просто не стартовал вместе с системой. Проверьте, запущен ли процесс, и настройте автозапуск средствами вашей ОС (например, через systemd на Linux). Точные команды зависят от способа установки, сверяйтесь с официальной документацией.

Безопасно ли открывать редактор Node-RED в интернет?

По умолчанию редактор не защищён паролем, поэтому публиковать его в открытом виде нельзя. Если нужен удалённый доступ, включите встроенную аутентификацию администратора в файле настроек settings.js и используйте HTTPS либо доступ только через VPN.