Modbus RTU · RS-485 · счётчик электроэнергии · Home Assistant

Modbus-счётчик электроэнергии в Home Assistant: как подключить через RS-485 и ESPHome

Счётчик с Modbus RTU позволяет получать в локальную систему автоматизации напряжение, ток, активную мощность, энергию, частоту и другие параметры без облака. Для этого нужен RS-485-интерфейс, карта регистров конкретного прибора и корректная настройка Modbus-клиента. Подключать такой счётчик можно напрямую к Home Assistant через Modbus-интеграцию или через ESPHome.

Modbus RTU RS-485 Home Assistant ESPHome Energy Dashboard modbus_client
Коротко: если прибор уже имеет стабильную vendor-интеграцию для Home Assistant, обычно лучше использовать её. Если интеграции нет, но есть документированная Modbus register map, данные можно читать напрямую через Home Assistant или вынести работу с RS-485 на ESPHome.

Зачем вообще подключать электросчётчик по Modbus

Обычный бытовой счётчик используется прежде всего для коммерческого учёта электроэнергии. Но отдельный измерительный прибор с Modbus в щите может работать как источник телеметрии для Home Assistant, HEMS, инвертора или локальной автоматики.

Напряжение

По фазам или для однофазного ввода.

Ток

Текущая нагрузка каждой фазы.

Активная мощность

Потребление или отдача в реальном времени.

Энергия

Накопленные кВт·ч.

Частота

Параметр сети 50 Гц.

Дополнительные данные

Reactive power, apparent power, power factor, import/export и другие значения, если они поддерживаются прибором.

Эти данные можно использовать для графиков, Energy Dashboard, контроля выделенной мощности, динамической зарядки EV, оценки работы солнечного инвертора и автоматического управления нагрузкой.

Важно: измерительный Modbus-прибор в Home Assistant не заменяет коммерческий прибор учёта, если только конкретный прибор официально не используется для расчётного учёта по правилам энергоснабжающей организации.

RS-485 и Modbus — это не одно и то же

RS-485 определяет электрический интерфейс линии связи: дифференциальную передачу данных по паре проводников. Modbus определяет структуру запросов, ответов, адреса устройств, function codes и представление регистров.

UARTESP32 / USB adapter
→
RS-485 transceiverэлектрический интерфейс
→
Modbus RTUпротокол обмена
→
Счётчикslave/server device

Поэтому надписи «RS-485» на приборе недостаточно. Нужно знать, какой протокол работает поверх него, параметры последовательного порта и register map.

Что такое карта регистров Modbus

Modbus-счётчик не передаёт Home Assistant готовую сущность «мощность дома». Клиент должен знать, по какому адресу лежит значение, какой function code используется, сколько регистров нужно прочитать и как интерпретировать байты.

ПараметрПример того, что нужно знать
Slave addressНапример 1
Baud rate9600 / 19200 / другое значение
ParityNone / Even / Odd
Stop bits1 или 2
Register typeInput / Holding / Coil / Discrete Input
Register addressНапример 0x000C
Data typeU16, S16, U32, float32 и т.д.
Word orderABCD, 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 и сам опрашивает счётчик.

СчётчикModbus RTU
↔
RS-485 adapterA/B ↔ UART
↔
ESP32ESPHome
↔
Home Assistantnative API / MQTT

Базовая структура выглядит так:

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"
GPIO, register address, `register_type`, `value_type` и коэффициент выше приведены только для объяснения структуры. Их нельзя переносить на конкретный электросчётчик без проверки документации.

Что изменил новый 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());
ESPHome рекомендует для стандартных операций использовать typed read/write actions, а `modbus_client.send` оставлять для нестандартных PDU или function code, выбираемого во время выполнения.

Почему значение в регистре часто получается неправильным

Самые частые ошибки 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 В.

Сначала полезно проверить 2–3 регистра отдельной Modbus diagnostic utility. Если там данные корректны, а в Home Assistant нет, проблема почти наверняка в конфигурации адресации или типа данных.

Как добавить Modbus-счётчик в Energy Dashboard

Home Assistant Energy Dashboard требует не просто датчик мгновенной мощности в ваттах, а подходящую энергетическую сущность с корректной единицей измерения и статистикой.

Если счётчик отдаёт накопленную импортированную энергию, это лучший источник:

Modbus registertotal import energy
→
SensorkWh
→
Long-term statisticsstate_class
→
Energy Dashboardграфики и баланс

Если прибор отдаёт только мощность, энергию можно рассчитывать интегрированием мощности во времени, но прямой накопительный energy register обычно предпочтительнее: он переживает перезагрузку Home Assistant и меньше зависит от пропусков телеметрии.

Для двунаправленного учёта солнечной генерации или ESS важно не смешивать import и export. Некоторые счётчики имеют отдельные регистры, другие используют знак активной мощности или отдельные total counters.

Как правильно собрать RS-485 линию

ESPHome рекомендует использовать RS-485 transceiver и оконечные резисторы 120 Ом на концах шины согласно требованиям линии. Некоторые адаптеры и приборы уже имеют встроенную или отключаемую терминацию.

ClientESPHome / gateway
────
Meter 1address 1
────
Meter 2address 2
────
Meter 3address 3
  • используйте витую пару для A/B;
  • соблюдайте рекомендованную топологию bus;
  • не делайте длинные случайные ответвления;
  • назначайте уникальные Modbus addresses;
  • все устройства сегмента должны иметь совместимые baud/parity/stop bits;
  • учитывайте требования к GND/reference конкретного оборудования;
  • не соединяйте экран кабеля произвольно с PE на обоих концах без понимания системы уравнивания потенциалов.

Почему счётчик лучше сначала использовать только для чтения

Многие Modbus-устройства имеют не только измерительные, но и конфигурационные holding registers. Через них иногда можно изменить адрес, скорость интерфейса, коэффициенты, режимы, выходы или параметры оборудования.

Не пишите в неизвестные holding registers. Ошибочная запись может изменить конфигурацию прибора, нарушить связь или повлиять на работу подключённого оборудования.

Для энергетического мониторинга почти всегда достаточно read-only работы. Если запись действительно требуется, сначала проверяют руководство, допустимый диапазон, единицы, подтверждение изменения и безопасное поведение при ошибке.

Особенно осторожно нужно работать с инверторами, EVSE, тепловыми насосами и промышленными контроллерами: один и тот же Modbus-интерфейс может одновременно отдавать телеметрию и принимать команды управления мощностью.

Почему Modbus не работает: порядок диагностики

  1. 1

    Проверить питание

    Счётчик и RS-485 transceiver должны быть исправно запитаны.

  2. 2

    Проверить A/B

    Если нет ответа, одна из первых проверок — соответствие обозначений линии документации обоих устройств.

  3. 3

    Проверить serial parameters

    Baud rate, parity, stop bits должны совпадать.

  4. 4

    Проверить slave address

    Клиент должен обращаться к реальному адресу устройства.

  5. 5

    Проверить function code и register

    Ответ Modbus exception часто прямо указывает на неподдерживаемую функцию или адрес.

  6. 6

    Снизить частоту опроса

    Слишком агрессивный polling нескольких устройств может создавать очередь и timeouts.

  7. 7

    Проверить терминацию

    Особенно на длинной линии или при нескольких устройствах.

  8. 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 интерфейса не делает сам счётчик или его силовые клеммы безопасными для работы под напряжением.

Частые вопросы

Можно ли подключить любой электросчётчик с 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-регистры добавляют только после проверки документации и безопасного поведения оборудования.