Что такое Modbus?
Для Home Assistant разницы почти нет — интеграция Modbus поддерживает и RTU, и TCP.
Modbus оперирует четырьмя типами данных, которые называются регистрами. Это его модель памяти — простая, фиксированная, без объектов и иерархий.
Coils (катушки) — однобитные значения для чтения и записи. Вкл/выкл, 0/1. Типичное применение: управление реле, выходами. «Включить насос» — это запись в coil.
Discrete Inputs (дискретные входы) — однобитные значения только для чтения. Состояние концевого выключателя, аварийный сигнал. Только чтение — записать нельзя.
Holding Registers (регистры хранения) — 16-битные значения для чтения и записи. Самый часто используемый тип. Уставка температуры, скорость вентилятора, порог срабатывания — всё это holding registers.
Input Registers (входные регистры) — 16-битные значения только для чтения. Показания датчиков, измеренные значения. Текущая температура, напряжение, ток, мощность.
Каждый регистр имеет адрес — число от 0 до 65535. Адреса регистров перечислены в документации на конкретное устройство (её обычно называют «карта регистров» или Modbus register map). Без этой документации работать с устройством практически невозможно — вы просто не будете знать, что лежит по какому адресу.
Вот тут — источник вечной путаницы. В спецификации Modbus адреса начинаются с нуля. Но исторически существует альтернативная нумерация, где к адресу добавляется смещение в зависимости от типа регистра:
Регистр 40001 в старой нотации — это holding register с адресом 0. Регистр 30005 — input register с адресом 4.
Одни производители используют адресацию с нуля, другие — с единицы, третьи — со смещением. Документация одного устройства говорит «регистр 40001», другого — «регистр 0, тип Holding». Это одно и то же, но пока вы это поймёте — потратите немало нервов.
Совет: всегда сверяйтесь с документацией конкретного устройства и будьте готовы к тому, что реальный адрес отличается от указанного на ±1.
Modbus определяет набор функций — операций, которые ведущий может запросить у ведомого. Каждая функция имеет числовой код. Основные:
Это покрывает 95% задач. Остальные функции (диагностика, файловые операции и т. д.) используются в специфических промышленных сценариях и в домашней автоматизации практически не встречаются.
Теперь — конкретные сценарии, ради которых стоит разбираться с Modbus.
DIN-реечные электросчётчики — наверное, самый массовый случай использования Modbus дома. Eastron SDM120, SDM230, SDM630, Schneider Electric iEM3000, ABB B-series — все они общаются по Modbus RTU через RS-485.
Подключаете счётчик к Home Assistant через USB-конвертер RS-485 — и получаете в реальном времени: напряжение, ток, активную и реактивную мощность, потреблённую энергию, коэффициент мощности. Данные обновляются каждые несколько секунд. Для мониторинга потребления — незаменимая вещь.
Большинство инверторов для солнечных электростанций поддерживают Modbus — через RS-485 или TCP. Huawei SUN2000, Fronius, SMA, Growatt, Deye — все они отдают по Modbus текущую выработку, состояние батареи, потребление из сети, режим работы.
В Home Assistant есть как нативная интеграция Modbus, так и специализированные аддоны для конкретных инверторов (например, SolarEdge Modbus, Huawei Solar). Второй вариант обычно удобнее — карта регистров уже прописана, вам остаётся только указать адрес.
Многие тепловые насосы (Nibe, Mitsubishi Ecodan, Daikin Altherma, Vaillant) имеют Modbus-интерфейс для мониторинга и управления. Температура теплоносителя, режим работы, уставки, коды ошибок — всё доступно через регистры.
Для некоторых моделей существуют готовые интеграции в Home Assistant. Для остальных — настраиваете интеграцию Modbus вручную, используя карту регистров из документации производителя.
Приточно-вытяжные установки (рекуператоры) — ещё один типичный кандидат. Systemair, Komfovent, Blauberg, Turkov — у большинства есть Modbus-интерфейс. Скорость вентилятора, температура приточного и вытяжного воздуха, режим работы, управление байпасом — всё через регистры.
Модульные реле с Modbus-управлением — например, от Waveshare или китайских производителей — позволяют коммутировать нагрузку через RS-485. Восемь, шестнадцать, тридцать два канала. Стоят недорого, монтируются на DIN-рейку. Альтернатива Zigbee/Z-Wave-реле для тех, кто предпочитает проводное управление.
Минимальный набор:
USB-конвертер RS-485. Стоит от нескольких долларов (безымянные на CH340/CH341) до нескольких десятков (качественные на FTDI). Дешёвые работают, но бывают капризны на высоких скоростях и при длинных линиях. Для домашних задач обычно хватает бюджетного варианта.
Витая пара. Два провода: A и B (они же D+ и D−). Для коротких расстояний сойдёт любой провод. Для длинных линий (десятки метров и более) — экранированная витая пара с терминирующими резисторами 120 Ом на концах линии.
Карта регистров устройства. Без неё никуда. Ищите в документации производителя — обычно это PDF-таблица с адресами регистров, типами данных, множителями и единицами измерения.
Проще: устройство подключается к локальной сети по Ethernet, Home Assistant обращается к нему по IP-адресу и порту (обычно 502). Никаких конвертеров и проводов RS-485.
Home Assistant имеет встроенную интеграцию Modbus. Конфигурация — через YAML.
Вы указываете:
Типичная запись для одного датчика выглядит примерно так: адрес регистра, тип (input / holding), формат данных (int16, uint32, float32), масштабный коэффициент, единица измерения. Не самая интуитивная настройка, но вполне посильная, если у вас есть карта регистров.
Для популярных устройств (Eastron SDM, Huawei инверторы, Nibe тепловые насосы) существуют готовые конфигурации — в документации Home Assistant, на форумах и в GitHub-репозиториях. Часто достаточно скопировать YAML-блок и подставить свои параметры подключения.
Нет ответа от устройства. Первое, что проверяется: адрес устройства (slave ID), скорость (baud rate), чётность (parity), стоп-биты. Все параметры должны совпадать на ведущем и ведомом. Одна ошибка — и связи нет. Это самая частая проблема при первом подключении.
Неправильные значения. Вы читаете температуру, а получаете 23756. Скорее всего, дело в формате данных. Один регистр — 16 бит. Если значение хранится как 32-битное число (float32 или uint32), нужно читать два регистра подряд и правильно их склеивать. Плюс может быть масштабный коэффициент: 2375 означает 23,75°C. Всё это описано в карте регистров, но не всегда очевидно с первого взгляда.
Порядок байтов (byte order / word order). 32-битное значение состоит из двух 16-битных регистров. В каком порядке они идут — Big Endian или Little Endian? Стандарт говорит одно, производитель делает другое. Если значение выглядит как мусор — попробуйте поменять порядок байтов или слов в настройках интеграции.
Конфликты на шине. Два ведущих на одной RS-485-шине — рецепт катастрофы. Modbus RTU допускает только одного ведущего. Если и Home Assistant, и родной контроллер пытаются одновременно опрашивать устройства по одной шине — будут коллизии и ошибки.
Скорость опроса. Modbus — последовательный протокол. Ведущий опрашивает устройства по очереди. Если устройств много и регистров читается много — цикл опроса растягивается. Обновление раз в секунду при десяти устройствах и десятках регистров на каждое — вполне реалистичный предел для RTU на 9600 бод.
modbus-cli — консольная утилита для чтения и записи Modbus-регистров. Быстрый способ проверить связь с устройством без настройки Home Assistant.
QModMaster — графическое приложение для Windows и Linux. Позволяет сканировать адреса устройств, читать регистры, менять параметры подключения. Незаменимо при первоначальной настройке.
mbusd — Modbus TCP-шлюз. Превращает один последовательный порт RS-485 в Modbus TCP-сервер, доступный по сети. Полезно, если физический конвертер RS-485 подключён к одному устройству, а Home Assistant работает на другом.
Если коротко — безопасности в Modbus нет. Никакой. Ни аутентификации, ни шифрования, ни контроля доступа. Протоколу почти полвека — он создавался для изолированных промышленных сетей, где безопасность обеспечивалась физически: забором, замком на двери щитовой и пропускным режимом.
В домашней инсталляции это обычно не проблема — Modbus RTU работает по выделенному кабелю, доступ к которому ограничен физически. С Modbus TCP сложнее: устройство доступно из локальной сети. Если ваша сеть не сегментирована, любой клиент в ней может отправлять команды Modbus-устройствам.
Рекомендация: изолируйте Modbus TCP-устройства в отдельный VLAN, как и любое IoT-оборудование. Если устройство поддерживает только RS-485 — это, как ни парадоксально, преимущество с точки зрения безопасности.
Modbus — протокол из другой эпохи, который отказывается стареть. Простой до примитивности, надёжный до скуки, поддерживаемый абсолютным большинством инженерного оборудования.
В домашней инфраструктуре Modbus — это мост между миром бытовой автоматизации и миром настоящей инженерии. Электросчётчики, инверторы, тепловые насосы, вентиляция — всё это говорит на Modbus. И если вы хотите, чтобы Home Assistant видел не только лампочки и датчики движения, а всю картину целиком — Modbus придётся освоить.
Порог входа чуть выше, чем у Zigbee или Wi-Fi. Нужно разбираться с адресами регистров, форматами данных и параметрами последовательного порта. Но за этим порогом — доступ к оборудованию, которое работает десятилетиями и не зависит ни от облаков, ни от прихотей производителя. А это в мире умного дома — ценность, которую сложно переоценить.
Материал носит информационно-образовательный характер и не является рекламой конкретных производителей или продуктов.