/ha-mercury-200-integration

Mercury-200.02 integration for Home Assistant

Primary LanguagePythonMIT LicenseMIT

Home Assistant (ZigBee) <-> Меркурий200.02

!! Сам компонент, как и оформление репозитория находится в разработке !!

Custom Home Assistant integration for obtaining the data from Energy meter Mercury 200.02. This Integration is dedicated for Russia and CIS users, as I believe, no one outside uses this type of meters. However, if you need documentation in English, please, let me know in issues.

Бытовые счетчики электроэнергии Меркурий 200.02 обладают цифровым интерфейсом на базе RS-485, который позволяет удаленно считывать показания расхода электроэнергии. Данная интеграция позволяет считывать показания и отображать их в Home Assistant через zigbee2mqtt. Для подключения электросчетчика к Zigbee сети необходим модем. О нем - ниже.

Вдохновлен постом Smart Home 53. Расшифровка протокола Mercury200 в этом репо. Спасибо Авторам!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Дорогие друзья, автор этого компонента как и Вы - энтузиаст и для меня это - хобби. Компонент распространяется под лицензией MIT. Если У Вас есть вопросы или пожелания, пишите в Issues. Я постараюсь помочь, но обещать ничего не могу. У меня все работает :-D.

Содержание

В разработке

Установка

Через HACS (рекомендуется)

Раздел в разработке
Добавьте ссылку на этот репозиторий в HACS и Установите компонент.

Вручную (не рекомендуется)

В разработке

Конфигурация

После установки компонента возможно понадобится перезагрузка. Далее необходимо добавить в файл конфигурации configuration.yaml и перезагрузить HomeAssistant:

# Electricity Counter Mercury200.02
mercury200:
  - type: mercury200.02
    device_serial: "XXXXXXXX" 
    topic: "zigbee2mqtt/rs485"

Примечания:

  • Пока поддерживается только mercury200.02.
  • серийный номер счетчика можно посмотреть на самом счетчике, а так же в ЛК Мосэнергосбыт или другого оператора
  • 'rs485' - это friendly_name передающего устройства (модема) в zigbee2mqtt. Замените, если вы назвали его иначе.
  • Особенности шины позволяют опрашивать несколько счетчиков с одного модема. Однако этот режим не протестирован в виду отсутствия оных.

Использование

Сущности

После перезагрузки в Entities появится список сущностей, относящихся к Счетчику:

Изначально значения сущностей будут недоступны либо будут нулевыми. Это нормально.

Сервисы

Чтобы получить значения со счетчика, необходимо отправить на него запрос. Для этого в компоненте предусмотрен сервис submit_command, формирующий запрос в байтах:

    - service: mercury200.submit_command
      data:
        device_id: "XXXXXXXX" # Серийный номер счетчика
        command: get_energy
  • get_energy: отправляет запрос на получение значений тарифов T1-T4
  • get_status: отправляет запрос на получение текущих показаний сети: Сила тока, напряжение, потребляемая мощность

Получив запрос, электросчетчик отвечаечает байт-строкой, которая транслируется zigbee модемом в zigbee2mqtt. Интеграция проводит расшифровку сообщения и обновляет значения сущностей.
Для регулярного обновления значений можно добавить в automations.yaml:

# Collect data from electricity counter
- alias: Mercury T1 - T3
  trigger:
    - platform: time_pattern
      minutes: "/57" # каждые 57 минут
  action:
    - service: mercury200.submit_command
      data:
        device_id: "XXXXXXXX"
        command: get_energy

- alias: Mercury status
  trigger:
    - platform: time_pattern
      minutes: "/5" # каждые 5 минут
  action:
    - service: mercury200.submit_command
      data:
        device_id: "XXXXXXXX"
        command: get_status

Карточка

Ниже мой вариант карточки для LoveLace. Для этого необходим компонент multiple entity row. В качестве дополнительной информации, а так же для автоматической отправки показаний счетчика в личный кабинет, рекомендую использовать компонент ЛК "Интер РАО". Автору больше Спасибо!

Пример карточки в yaml для Lovelace
type: entities
entities:
  - entity: sensor.mercury200_XXXXXXXX_power
    name: Status
    secondary_info: last-updated
    icon: mdi:lightning-bolt
    type: custom:multiple-entity-row
    entities:
      - icon: mdi:refresh
        tap_action:
          action: call-service
          service: mercury200.submit_command
          service_data:
            device_id: 'XXXXXXXX'
            command: get_status
        name: false
      - entity: sensor.mercury200_XXXXXXXX_voltage
        name: false
  - entity: sensor.mercury200_XXXXXXXX_t3
    name: Counter (kW*h)
    icon: mdi:gauge
    type: custom:multiple-entity-row
    show_state: false
    secondary_info: last-updated
    entities:
      - icon: mdi:refresh
        tap_action:
          action: call-service
          service: mercury200.submit_command
          service_data:
            device_id: 'XXXXXXXX'
            command: get_energy
      - entity: sensor.mercury200_XXXXXXXX_t1
        name: T1
        unit: false
      - entity: sensor.mercury200_XXXXXXXX_t2
        name: T2
        unit: false
      - entity: sensor.mercury200_XXXXXXXX_t3
        name: T3
        unit: false
  - entity: sensor.mes_XXXXX_XXX_XX_meter_XXXXXXXX
    name: '-> Mosenergo'
    type: custom:multiple-entity-row
    secondary_info: last-changed
    attribute: last_indications_date
    format: date
    icon: mdi:cloud-upload
    entities:
      - entity: sensor.mes_XXXXX_XXX_XX_account
        name: Debth

В силу особенности работы z2m при каждом новом сообщении генерится retain сообщение вида

homeassistant/device_automation/.....

Такие сообщения содержат конфигурацию. Поскольку модем все время перебрасывается пакетами с RS-485 (байт-строками), то каждое такое сообщение является уникальным и для него генерится конфиг. Они накапливаются в MQTT и мне не удалось от этого избавиться. Как выход: я использую автоматизацию, которая их сразу же обнуляет. Рекомендую к использованию. !!Необходимо изменить id устройства на Ваше!!!

# purge retain MQTT messages from electricity counter
- id: "purge retain MQTT"
  alias: puge retain MQTT messages
  trigger:
    - platform: mqtt
      topic: homeassistant/device_automation/0x00124b001b222fb2/#
  action:
    - service: mqtt.publish
      data_template:
        topic: "{{ trigger.topic }}"
        payload: ""
        retain: True

Модем

Раздел в Разработке

Модем необходим для подключения Счетчика электроэнергии к zigbee2mqtt.
В папке ZigBee2MQTT <-> RS485 лежит файл Gerber, необходимый для печати плат, а также файл прошивки.

Подключение:
ВНИМАНИЕ!!! Высокое напряжение! Опасно для жизни! Лучше обратиться к профессионалам!

Также сущности T1 - T4 можно добавить а панель Energy для мониторинга расхода электроэнергии.

Помогите разработке

  • Проверка кофигурации с homeassistant.helpers.config_validation
  • Зашить в компонент периодическое обновление данных (Сейчас это делается вручную или через automations.yaml)
  • По непонятной мне причине показания счетчиков в карточке обновляются в течение 30 секунд после фактического получения данных (К примеру, после ручного обновления через иконку в карточке).
  • Кастомная прошивка для модема (сейчас она на базе конфигуратора PTVO. За что ему большое Спасибо!)
  • Поддержка других счетчиков
  • Избавиться от retain сообщений в MQTT средствами интеграции
  • Доработка документации
    • Прошивка
    • Установка в ручном режиме
    • Подключение модема к счетчику электроэнергии
  • Донат. Вы всегда можете поддержать авторов zigbee2mqtt, PTVO, Home assistant и других контрибьюторов. Потом может и я заслужу)