Modbus-счётчик электроэнергии в Home Assistant: как подключить через RS-485 и ESPHome
Счётчик с Modbus RTU позволяет получать в локальную систему автоматизации напряжение, ток, активную мощность, энергию, частоту и другие параметры без облака. Для этого нужен RS-485-интерфейс, карта регистров конкретного прибора и корректная настройка Modbus-клиента. Подключать такой счётчик можно напрямую к Home Assistant через Modbus-интеграцию или через ESPHome.
Зачем вообще подключать электросчётчик по Modbus
Обычный бытовой счётчик используется прежде всего для коммерческого учёта электроэнергии. Но отдельный измерительный прибор с Modbus в щите может работать как источник телеметрии для Home Assistant, HEMS, инвертора или локальной автоматики.
Напряжение
По фазам или для однофазного ввода.
Ток
Текущая нагрузка каждой фазы.
Активная мощность
Потребление или отдача в реальном времени.
Энергия
Накопленные кВт·ч.
Частота
Параметр сети 50 Гц.
Дополнительные данные
Reactive power, apparent power, power factor, import/export и другие значения, если они поддерживаются прибором.
Эти данные можно использовать для графиков, Energy Dashboard, контроля выделенной мощности, динамической зарядки EV, оценки работы солнечного инвертора и автоматического управления нагрузкой.
RS-485 и Modbus — это не одно и то же
RS-485 определяет электрический интерфейс линии связи: дифференциальную передачу данных по паре проводников. Modbus определяет структуру запросов, ответов, адреса устройств, function codes и представление регистров.
Поэтому надписи «RS-485» на приборе недостаточно. Нужно знать, какой протокол работает поверх него, параметры последовательного порта и register map.
Что такое карта регистров Modbus
Modbus-счётчик не передаёт Home Assistant готовую сущность «мощность дома». Клиент должен знать, по какому адресу лежит значение, какой function code используется, сколько регистров нужно прочитать и как интерпретировать байты.
| Параметр | Пример того, что нужно знать |
|---|---|
| Slave address | Например 1 |
| Baud rate | 9600 / 19200 / другое значение |
| Parity | None / Even / Odd |
| Stop bits | 1 или 2 |
| Register type | Input / Holding / Coil / Discrete Input |
| Register address | Например 0x000C |
| Data type | U16, S16, U32, float32 и т.д. |
| Word order | ABCD, CDAB и другие варианты |
| Scale | ×0.1, ×0.01, ÷1000 и т.п. |
Три способа подключить счётчик к Home Assistant
1. Vendor-интеграция
Лучший вариант, если Home Assistant уже имеет отдельную стабильную интеграцию для конкретного счётчика.
2. Home Assistant Modbus
RS-485 подключается через serial gateway или Modbus TCP gateway, а регистры описываются в конфигурации Home Assistant.
3. ESPHome
ESP32 опрашивает счётчик локально через RS-485 и публикует уже готовые sensors в Home Assistant.
Официальная документация Home Assistant прямо рекомендует сначала искать vendor-specific integration. Она обычно проще в настройке и обслуживании, потому что детали register map уже реализованы разработчиком интеграции.
Прямое подключение через Home Assistant Modbus
Встроенная интеграция Home Assistant Modbus поддерживает serial RTU, TCP и UDP. Для обычного RS-485 счётчика чаще используется serial connection либо Ethernet/RS-485 gateway.
modbus:
- name: energy_meter
type: serial
port: /dev/ttyUSB0
baudrate: 9600
bytesize: 8
parity: N
stopbits: 1
sensors:
- name: "Grid Voltage"
slave: 1
address: 0
input_type: input
data_type: uint16
scale: 0.1
precision: 1
unit_of_measurement: V
Это пример структуры, а не конфигурация конкретной модели счётчика. Адрес регистра, function type, data type и scale нужно брать из официальной документации прибора.
Когда прямой Modbus удобен
- Home Assistant сервер расположен рядом с RS-485 gateway;
- register map стабильна и понятна;
- не нужен отдельный ESP32;
- соединение должно обслуживаться централизованно.
Когда это неудобно
USB-RS485 адаптер привязывает физическую линию к серверу Home Assistant. При переносе сервера, виртуализации, проблемах USB passthrough или большом расстоянии до щита такая архитектура может быть менее удобной.
Modbus-счётчик через ESPHome
ESPHome позволяет разместить микроконтроллер непосредственно возле щита или оборудования. ESP32 работает с RS-485 через внешний transceiver и сам опрашивает счётчик.
Базовая структура выглядит так:
uart:
id: uart_modbus
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
parity: NONE
stop_bits: 1
modbus:
id: modbus_bus
uart_id: uart_modbus
modbus_controller:
- id: meter
address: 1
modbus_id: modbus_bus
update_interval: 5s
sensor:
- platform: modbus_controller
modbus_controller_id: meter
name: "Grid Voltage"
register_type: read
address: 0x0000
value_type: U_WORD
filters:
- multiply: 0.1
unit_of_measurement: "V"
Что изменил новый ESPHome modbus_client
В ESPHome 2026.8 появился отдельный компонент modbus_client для ad-hoc запросов. Он не заменяет modbus_controller, а решает другую задачу.
| Компонент | Когда использовать |
|---|---|
modbus_controller | Регулярно опрашивать известные регистры и превращать их в sensors, switches, numbers и другие сущности ESPHome. |
modbus_client | Отправлять разовые read/write запросы из automations или lambdas. |
modbus_server | Сделать сам ESPHome node Modbus server и отдавать регистры другому клиенту. |
Для электросчётчика основной телеметрический поток по-прежнему удобнее строить через modbus_controller. Новый modbus_client полезен, когда нужно по событию прочитать нестандартный диапазон регистров, выполнить единичную команду или сформировать специальный PDU.
on_...:
- modbus_client.send:
address: 0x01
pdu: [0x03, 0x00, 0x10, 0x00, 0x01]
on_response:
- lambda: |-
ESP_LOGI("modbus", "Response: %u bytes",
response.size());
Почему значение в регистре часто получается неправильным
Самые частые ошибки Modbus связаны не с RS-485, а с интерпретацией данных.
Сдвиг адреса на 1
Документация может показывать логические номера 30001/40001, а библиотека ожидать zero-based address.
Неверный тип регистра
Holding Register и Input Register используют разные function codes.
32-битное значение читается как 16 бит
Нужно объединять два регистра.
Перепутан word order
Два корректных 16-битных слова дают абсурдный float.
Не применён scale
2304 может означать 230,4 В, а не 2304 В.
Signed вместо unsigned
При пересечении старшего бита значение становится отрицательным.
Пример
Если register map говорит: Voltage = unsigned 16-bit, register 0x0000, scale 0.1, сырое значение 2307 интерпретируется как 230,7 В.
Как добавить Modbus-счётчик в Energy Dashboard
Home Assistant Energy Dashboard требует не просто датчик мгновенной мощности в ваттах, а подходящую энергетическую сущность с корректной единицей измерения и статистикой.
Если счётчик отдаёт накопленную импортированную энергию, это лучший источник:
Если прибор отдаёт только мощность, энергию можно рассчитывать интегрированием мощности во времени, но прямой накопительный energy register обычно предпочтительнее: он переживает перезагрузку Home Assistant и меньше зависит от пропусков телеметрии.
Как правильно собрать RS-485 линию
ESPHome рекомендует использовать RS-485 transceiver и оконечные резисторы 120 Ом на концах шины согласно требованиям линии. Некоторые адаптеры и приборы уже имеют встроенную или отключаемую терминацию.
- используйте витую пару для A/B;
- соблюдайте рекомендованную топологию bus;
- не делайте длинные случайные ответвления;
- назначайте уникальные Modbus addresses;
- все устройства сегмента должны иметь совместимые baud/parity/stop bits;
- учитывайте требования к GND/reference конкретного оборудования;
- не соединяйте экран кабеля произвольно с PE на обоих концах без понимания системы уравнивания потенциалов.
Почему счётчик лучше сначала использовать только для чтения
Многие Modbus-устройства имеют не только измерительные, но и конфигурационные holding registers. Через них иногда можно изменить адрес, скорость интерфейса, коэффициенты, режимы, выходы или параметры оборудования.
Для энергетического мониторинга почти всегда достаточно read-only работы. Если запись действительно требуется, сначала проверяют руководство, допустимый диапазон, единицы, подтверждение изменения и безопасное поведение при ошибке.
Особенно осторожно нужно работать с инверторами, EVSE, тепловыми насосами и промышленными контроллерами: один и тот же Modbus-интерфейс может одновременно отдавать телеметрию и принимать команды управления мощностью.
Почему Modbus не работает: порядок диагностики
- 1
Проверить питание
Счётчик и RS-485 transceiver должны быть исправно запитаны.
- 2
Проверить A/B
Если нет ответа, одна из первых проверок — соответствие обозначений линии документации обоих устройств.
- 3
Проверить serial parameters
Baud rate, parity, stop bits должны совпадать.
- 4
Проверить slave address
Клиент должен обращаться к реальному адресу устройства.
- 5
Проверить function code и register
Ответ Modbus exception часто прямо указывает на неподдерживаемую функцию или адрес.
- 6
Снизить частоту опроса
Слишком агрессивный polling нескольких устройств может создавать очередь и timeouts.
- 7
Проверить терминацию
Особенно на длинной линии или при нескольких устройствах.
- 8
Проверить данные отдельно
Используйте диагностический Modbus-клиент, чтобы отделить проблему шины от ошибки Home Assistant/ESPHome.
Что выбрать для дома: Home Assistant Modbus или ESPHome
| Сценарий | Что логичнее |
|---|---|
| Счётчик рядом с сервером | Прямой Home Assistant Modbus |
| RS-485 находится в электрощите далеко от сервера | ESPHome или Ethernet/RS-485 gateway |
| Нужна локальная логика рядом с оборудованием | ESPHome / отдельный контроллер |
| Есть официальная vendor-интеграция | Сначала рассмотреть её |
| Нужно много нестандартных разовых команд | ESPHome `modbus_client` может быть удобен |
| Сложная инженерная шина с большим количеством устройств | Отдельный промышленный/инженерный контроллер часто надёжнее DIY ESP32 |
Для одного домашнего счётчика рядом со щитом ESPHome является удобным мостом между RS-485 и Home Assistant. Для большого дома с котельной, инверторами, вентиляцией и десятками Modbus-устройств лучше заранее проектировать общую шину и контроллерную архитектуру.
Что учесть в электрощите
Modbus-связь не отменяет обычные требования к монтажу счётчика и электрощита. Силовая часть выбирается по паспорту прибора, схеме измерения, току, сечению проводников, назначению аппарата и условиям эксплуатации.
- измерительный прибор не должен ухудшать надёжность силовой цепи;
- трансформаторы тока устанавливаются с правильным направлением и коэффициентом;
- RS-485 и силовые трассы организуются с учётом помех и требований изготовителей;
- клеммы должны оставаться доступными для обслуживания;
- приборы и проводники в щите маркируются;
- для коммерческого учёта действуют отдельные требования к допуску и эксплуатации прибора.
Частые вопросы
Можно ли подключить любой электросчётчик с RS-485 к Home Assistant?
Не обязательно. Нужен документированный протокол, обычно Modbus RTU, и карта регистров. Некоторые устройства используют собственный протокол поверх RS-485.
Нужен ли ESP32, если Home Assistant уже умеет Modbus?
Нет. Home Assistant умеет работать с Modbus serial/TCP/UDP напрямую. ESPHome полезен как удалённый локальный мост или контроллер возле оборудования.
Что лучше: USB-RS485 или ESPHome?
USB-RS485 проще возле физического сервера. ESPHome удобнее, если счётчик находится далеко, Home Assistant виртуализирован или не хочется тянуть RS-485 до серверной.
Можно ли подключить несколько счётчиков к одной RS-485 линии?
Да, если устройства поддерживают общие параметры связи и имеют уникальные Modbus addresses. Нужно соблюдать ограничения шины и топологию.
Что такое modbus_controller в ESPHome?
Это компонент для регулярного чтения и записи регистров Modbus-устройства и представления их как sensors, switches, numbers и других сущностей.
Что такое новый modbus_client?
Это механизм ESPHome для разовых запросов и ответов из automations/lambdas. Для постоянного polling известных регистров по-прежнему удобнее modbus_controller.
Можно ли использовать данные Modbus-счётчика в Energy Dashboard?
Да, если создаётся корректная energy entity с подходящей единицей, device class и state class. Лучше использовать накопительный register импортированной энергии, если счётчик его предоставляет.
Вывод
Modbus-счётчик — один из самых универсальных способов получить локальный энергетический мониторинг без привязки к облаку производителя. Но успех зависит не от самого Home Assistant, а от качества документации прибора: адресов регистров, типов данных и параметров RS-485.
Для простой системы можно подключить счётчик напрямую через Home Assistant Modbus. ESPHome удобен, когда RS-485 находится рядом со щитом, нужен отдельный локальный узел или требуется гибкая обработка данных. Новый `modbus_client` расширяет ESPHome для разовых команд, но не отменяет `modbus_controller` для постоянной телеметрии.
Начинать лучше с read-only мониторинга: напряжение, ток, мощность и накопленная энергия. Управляющие записи в Modbus-регистры добавляют только после проверки документации и безопасного поведения оборудования.