Интеграция протокола Modbus в умный дом Яндекса через Node-RED
В процессе построения профессиональных систем умного дома интеграторы часто сталкиваются с климатическим и силовым оборудованием, которое изначально разрабатывалось для промышленного сектора. Вентиляционные установки, кондиционеры с интерфейсными платами, тепловые насосы, инверторы солнечных батарей и многотарифные электросчетчики общаются по стандартизированным промышленным протоколам. Самым популярным и распространенным среди них является Modbus (в вариациях RTU по шине RS-485 и TCP по сетям Ethernet).
По умолчанию голосовой помощник Алиса и стандартные потребительские умные реле не умеют напрямую работать с промышленной шиной данных. Чтобы преодолеть этот барьер и получить возможность управлять, например, приточно-вытяжной вентиляцией или задавать температуру отопления голосом, используется среда Node-RED. Она выступает в качестве гибкого программного шлюза, который считывает регистры Modbus, переводит их в понятный формат и передает в экосистему Яндекса.
Аппаратное обеспечение: Подключение к шине RS-485
Шина RS-485 представляет собой дифференциальную двухпроводную линию (контакты A и B), к которой устройства подключаются параллельно. Чтобы связать эту шину с сервером Node-RED, вам потребуется одно из двух решений:
- USB-to-RS485 адаптер (так называемый «свисток»). Он подключается напрямую в USB-порт вашего сервера (например, Raspberry Pi). В системе он определяется как последовательный порт
/dev/ttyUSB0. - Конвертер Modbus-to-IP (шлюз RS-485 в Ethernet/Wi-Fi, например, приборы линейки USR-TCP232). Данный прибор принимает данные из последовательной шины и транслирует их по локальной сети по протоколу Modbus TCP (по умолчанию используется порт
502). Это решение является более профессиональным и помехоустойчивым.
IMPORTANT
При подключении устройств по шине RS-485 строго соблюдайте топологию «шина» (цепь от одного прибора к другому). Топология «звезда» или длинные ответвления категорически запрещены, так как они вызывают отражения сигналов и приводят к хаотичному пропаданию связи. На концах длинных линий обязательно устанавливайте терминирующие резисторы номиналом 120 Ом.
Установка и базовая настройка нод Modbus в Node-RED
Для интеграции протокола выполните установку пакета расширения:
- В веб-интерфейсе Node-RED перейдите в Manage palette ➡️ вкладка Install.
- Введите в поиске
node-red-contrib-modbusи установите данный модуль. - После завершения установки в вашей палитре появится обширный набор нод для чтения, записи и мониторинга данных.
Для считывания информации о температуре с датчика перетащите узел 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. Это поможет вам организовать автоматический перезапуск опроса при временной потере связи с конвертером.
Связывание с виртуальными устройствами Алисы
Теперь мы можем передать полученную температуру в Яндекс Алису.
- Создайте узел
yandex-device. - В его свойствах выберите тип устройства
devices.types.sensor(датчик) или настройте полноценный климатический пультdevices.types.thermostat. - Свяжите выход узла Function со входом датчика Яндекса.
TIP
При настройке термостата вы можете организовать и обратную связь: когда вы говорите Алисе: «Сделай температуру в спальне 22 градуса», узел yandex-device генерирует исходящее сообщение с новым значением. Вы перехватываете его, умножаете на 10 и отправляете в узел Modbus Write для записи в соответствующий регистр управления целевого котла или кондиционера.
Всегда проверяйте карту регистров вашего оборудования перед записью параметров. Неправильно указанный адрес регистра записи может привести к сбросу настроек прибора или его аварийной остановке.
Инструкция по настройке
Установка палитры Modbus
Установите пакет node-red-contrib-modbus через менеджер палитры Node-RED для работы с промышленными протоколами.
Настройка Modbus TCP клиента
Добавьте ноду Modbus Read, укажите IP-адрес конвертера, порт 502, адрес устройства Unit ID и нужные регистры.
Преобразование регистров в данные
Используйте узел function для парсинга массива 16-битных регистров в реальные физические показатели температуры.
Связывание с Яндекс Алисой
Создайте ноду yandex-device с типом термостат и передайте в нее преобразованные значения для голосового контроля.
Совет эксперта: Управляйте домом с компьютера
Установите Яндекс Браузер, чтобы управлять умными розетками и светом прямо со стартовой страницы, не отвлекаясь от работы.