Поиск по базе знаний

Интеграция протокола Modbus в умный дом Яндекса через Node-RED

В процессе построения профессиональных систем умного дома интеграторы часто сталкиваются с климатическим и силовым оборудованием, которое изначально разрабатывалось для промышленного сектора. Вентиляционные установки, кондиционеры с интерфейсными платами, тепловые насосы, инверторы солнечных батарей и многотарифные электросчетчики общаются по стандартизированным промышленным протоколам. Самым популярным и распространенным среди них является Modbus (в вариациях RTU по шине RS-485 и TCP по сетям Ethernet).

По умолчанию голосовой помощник Алиса и стандартные потребительские умные реле не умеют напрямую работать с промышленной шиной данных. Чтобы преодолеть этот барьер и получить возможность управлять, например, приточно-вытяжной вентиляцией или задавать температуру отопления голосом, используется среда Node-RED. Она выступает в качестве гибкого программного шлюза, который считывает регистры Modbus, переводит их в понятный формат и передает в экосистему Яндекса.


Аппаратное обеспечение: Подключение к шине RS-485

Шина RS-485 представляет собой дифференциальную двухпроводную линию (контакты A и B), к которой устройства подключаются параллельно. Чтобы связать эту шину с сервером Node-RED, вам потребуется одно из двух решений:

  1. USB-to-RS485 адаптер (так называемый «свисток»). Он подключается напрямую в USB-порт вашего сервера (например, Raspberry Pi). В системе он определяется как последовательный порт /dev/ttyUSB0.
  2. Конвертер Modbus-to-IP (шлюз RS-485 в Ethernet/Wi-Fi, например, приборы линейки USR-TCP232). Данный прибор принимает данные из последовательной шины и транслирует их по локальной сети по протоколу Modbus TCP (по умолчанию используется порт 502). Это решение является более профессиональным и помехоустойчивым.

IMPORTANT

При подключении устройств по шине RS-485 строго соблюдайте топологию «шина» (цепь от одного прибора к другому). Топология «звезда» или длинные ответвления категорически запрещены, так как они вызывают отражения сигналов и приводят к хаотичному пропаданию связи. На концах длинных линий обязательно устанавливайте терминирующие резисторы номиналом 120 Ом.


Установка и базовая настройка нод Modbus в Node-RED

Для интеграции протокола выполните установку пакета расширения:

  1. В веб-интерфейсе Node-RED перейдите в Manage palette ➡️ вкладка Install.
  2. Введите в поиске node-red-contrib-modbus и установите данный модуль.
  3. После завершения установки в вашей палитре появится обширный набор нод для чтения, записи и мониторинга данных.

Для считывания информации о температуре с датчика перетащите узел Modbus Read на рабочую область. Настройте его параметры:

  • Unit ID: адрес конкретного ведомого прибора на шине (обычно от 1 до 247).
  • FC (Function Code): для чтения значений выберите FC 3: Read Holding Registers или FC 4: Read Input Registers.
  • Address: стартовый адрес регистра данных (например, 0 или 40001 в зависимости от карты регистров производителя).
  • Quantity: количество считываемых подряд 16-битных регистров.
  • Poll Rate: интервал опроса. Не делайте его слишком частым. Значения раз в 5-10 секунд вполне достаточно для климатических систем.

В настройках соединения (Server) укажите параметры вашего Modbus TCP шлюза (его IP-адрес и порт 502) или выберите Serial-подключение, указав скорость (обычно 9600 или 115200 бод) и формат данных (например, 8N1).


Типы регистров и обработка полученных данных

В протоколе Modbus данные делятся на четыре основных типа памяти:

  • Coils (0x) — однобитные регистры чтения и записи (например, состояние реле включено/выключено).
  • Discrete Inputs (1x) — однобитные регистры только для чтения (например, статус концевого выключателя).
  • Input Registers (3x) — 16-битные регистры только для чтения (показания аналоговых датчиков).
  • Holding Registers (4x) — 16-битные регистры чтения и записи (уставки температуры, параметры конфигурации).

Данные датчиков обычно приходят в виде массива 16-битных целых чисел. Например, если датчик температуры присылает значение 245, это означает температуру 24.5 °C (значение передано с множителем 10 во избежание работы с плавающей запятой на слабом микроконтроллере).

Для парсинга этого массива подключите узел Function к выходу ноды Modbus Read и напишите следующий JavaScript-код:

// Получаем первый регистр из массива ответов
let rawVal = msg.payload[0];

// Преобразуем значение с учетом множителя 10
let realTemperature = rawVal / 10;

// Формируем сообщение для отправки дальше
msg.payload = realTemperature;
return msg;

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


Связывание с виртуальными устройствами Алисы

Теперь мы можем передать полученную температуру в Яндекс Алису.

  1. Создайте узел yandex-device.
  2. В его свойствах выберите тип устройства devices.types.sensor (датчик) или настройте полноценный климатический пульт devices.types.thermostat.
  3. Свяжите выход узла Function со входом датчика Яндекса.

TIP

При настройке термостата вы можете организовать и обратную связь: когда вы говорите Алисе: «Сделай температуру в спальне 22 градуса», узел yandex-device генерирует исходящее сообщение с новым значением. Вы перехватываете его, умножаете на 10 и отправляете в узел Modbus Write для записи в соответствующий регистр управления целевого котла или кондиционера.

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

Инструкция по настройке

1

Установка палитры Modbus

Установите пакет node-red-contrib-modbus через менеджер палитры Node-RED для работы с промышленными протоколами.

2

Настройка Modbus TCP клиента

Добавьте ноду Modbus Read, укажите IP-адрес конвертера, порт 502, адрес устройства Unit ID и нужные регистры.

3

Преобразование регистров в данные

Используйте узел function для парсинга массива 16-битных регистров в реальные физические показатели температуры.

4

Связывание с Яндекс Алисой

Создайте ноду yandex-device с типом термостат и передайте в нее преобразованные значения для голосового контроля.

Совет эксперта: Управляйте домом с компьютера

Установите Яндекс Браузер, чтобы управлять умными розетками и светом прямо со стартовой страницы, не отвлекаясь от работы.