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

Интеграция протокола Modbus в умный дом Яндекса через Node-RED
Главное из статьи (Key Takeaways):
  • Пошаговый разбор: аппаратное обеспечение: подключение к шине rs-485.
  • Пошаговый разбор: установка и базовая настройка нод **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 для записи в соответствующий регистр управления целевого котла или кондиционера.

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

Если неправильно настроили пульт Яндекс Модуля, как поступить

При интеграции сложного промышленного оборудования и медиасистем иногда сбиваются настройки управляющих пультов. Если вы неправильно настроили пульт яндекс модуля, как поступить для сброса конфигурации? Зайдите в меню настроек Яндекс Модуля на вашем телевизоре, выберите раздел «Пульт и аксессуары» ➡️ «Настройка пульта», и запустите процесс перенастройки заново, следуя подсказкам на экране. Если пульт перестал реагировать полностью, зажмите одновременно кнопки «Домой» и «Громкость минус» на 5 секунд для сброса его сопряжения и повторного создания Bluetooth-пары.


Настройка голосового управления через Siri для Modbus-приборов

Если вы хотите управлять вашими промышленными установками с помощью экосистемы Apple, полезно разобраться, как сделать, чтобы Siri управляла Яндекс-устройствами. Для этого после проброса Modbus-регистров в Дом с Алисой настройте на iPhone «Быстрые команды» (Shortcuts) с HTTP-запросами к API Яндекса, подробнее эта схема описана в нашем руководстве по управлению Алисой через Siri.

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

1

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

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

2

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

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

3

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

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

4

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

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

SH
Умный Дом с АлисойTG Канал
Автор статьи Инженер по автоматизации & HA
6+ лет практики

Инженер-электротехник. Специализируется на кастомных прошивках микроконтроллеров, интеграции автономных серверов автоматизации и подключении сложного пром-оборудования к Алисе без облаков.

Обсуждение статьи