Skip to main content

Добавляем водяные счетчики Элехант СВД-15 в Home Assistant

В данной статье рассматривается:
Компонент интеграции счётчиков ресурсов от Элехант с Home Assistant с расшифровкой протокола обмена по bluetooth

Для меня это первая разработка интеграции для Home Assistant и первое знакомство с языком Python так, что не судите строго. Данная интеграция это "я его слепила из того что было" 

Изобретать свой велосипед пришлось из-за того, что имеющиеся интеграции не поддерживают esp32-bluetooth-proxy

esp32-bluetooth-proxy – интересен тем, что его не надо подключать непосредственно Home Assistant, как физический bluetooth адаптер и его можно разместить рядом со счетчиком т.к. действие bluetooth имеет небольшой радиус действия.

esp32-bluetooth-proxy представляет собой программный модуль на базе ESP32, который имеет на борту WiFi и bluetooth. По WiFi мы подключаемся к HA а по bluetooth мы получаем данные от счетчика. Модули ESP32 не дорогие и их множество разновидностей, ознакомится можно тут, читать.

Модули ESP32 могут быть прошиты непосредственно их Home Assistant, для этого надо установить дополнение ESPHome. Как это сделать можно почитать тут, Прошивка ESP32/ESP8266 через ESPHome



Требования

Для интеграции требуется наличие Bluetooth модуля в сервере HA или ESP32 плата с установленной на ней Bluetooth proxy ESPHome.

Модуль тестировался при использовании ESPHome esp32-bluetooth-proxy, но так же должен работать с физическим адаптером bluetooth

Код для работы с известными счетчиками добавлен, но не проверялся т.к. у автора нет этих счетчиков


Возможно поддерживаются:

 

  • * СГБД-1.8 - работает
  • * СГБД-3.2 - работает
  • * СГБД-4.0 - работает
  • * СГБД-6.0
  • * СГБД-1.6
  • * СОНИК-G1.6
  • * СОНИК-G2.5
  • * СОНИК-G4
  • * СОНИК-G6
  • * СОНИК-G10
  • * СГБД-1.8ТК
  • * СГБД-3.2ТК
  • * СГБД-4.0ТК
  • * СГБД-6.0ТК
  • * СГБД-1.6ТК
  • * СОНИК-G16ТК
  • * СОНИК-G25ТК
  • * СОНИК-G4ТК
  • * СОНИК-G6ТК
  • * СОНИК-G10ТК
  • * СВД-15 - работает
  • * СВД-20
  • * СВТ-15 - работает
  • * СВТ-20
  • * СЭБ
  • * СТБ-10

Установка

Скопируйте папку elehant_meter в custom_components в корне конфигурации Home Assistant


Особенности

 - С ESP32-C3 который основан на RISC-V (RV32IMC) esp32-bluetooth-proxy работает очень плохо.


Пример кода esp32-bluetooth-elehant

substitutions:
  name: "esp32-bluetooth-elehant"
  friendly_name: Bluetooth Proxy Elehant
packages:
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic.yaml@main
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}

api:
  encryption:
    key: P6WgSzWf5HF4vDnEwVOFVSEW9qA6o6RI6pNd5ANiC

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

esp32_ble_tracker:
  scan_parameters:
    interval: 1100ms  
    window: 1100ms
    #duration: 10min
    active: false
    #continuous: true

bluetooth_proxy:
  active: true


logger:

 Скачать модуль с GitHab elehant_meter

Дополнение


Расшифровка протокола счетчиков Элехант

По мере дальнейшего изучения протокола информация будет меняться.

Предисловие:

На просторах Интернета методом научного тыка были выявлены основные данные протокола счетчиков Элехант, но все же не все. Но мы такой метод тоже используем, но в данном случае есть решение «проще».

У нас есть приложение от производителя, и оно написано под Android, ну и, как всем известно, такие приложения декомпилируется очень просто и мы получаем исходный код на Java. А далее просто изучаем этот код … Вот такой реверс инжиниринг и был произведен, но даже при таком подходе остались еще невыясненные моменты.

Итоги реверс инжиниринга

  • Список поддерживаемых счетчиков перечислен выше и там есть те, которых еще не существует. По коду видно, что планируются выпуск счетчиков энергии и тепловых счетчиков, но на текущий момент только газа и воды.
  • Устройства с MAC начинающихся на B1 (мак как у основного) - это какие-то дополнительные данные.
  • Приложение отсылает данные на https://cntdev.ru/n и тут интересна политика https://boxold.cntdev.ru/privacy

Данные в mac адресе:
         mac
---------------------------------
B0:01:02:01:8B:8B
 0  1  2  3  4  5
---------------------------------
(0)B0 - данные протоколу v1 / B1 - дополнительные данные, требует выяснения
(1)01 – модель счетчика
(2)02 – тип счетчика
(3,4,5)01:8B:8B - серийный номер
Данные в пакете:
ffff -  код производителя в заголовке
          ---------------
           Пакет данных:
-----------------------------------------------------------------------
80 88 A0 01 02 01 8B 8B 01 13 1E 00 00 7A 63 0F 16
 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
------------------------------------------------------------------------
0   -   Данные не обрабатываются (всегда равен 0х80)
1   -   Данные не обрабатываются (кто-то говорит, что это некий счетчик, который изменяется каждую минуту или номер пакета)
2   -   Данные не обрабатываются (не известно)
3   -   Равен 1 (вероятно это версия пакета, версии 1, 5, 8(для B1))
4   -   Тип счетчика (тот же что и в mac)
5   -   Модель счетчика (тот же что и в mac)
6-8 -   Серийный номер 
9-12 -  Показания (0.1 литр)
13    - Батарея (показание больше 100, но берется минимальное значение из двух)
14-15 - Температура (деленная на 100)
16 -    Версия прошивки /10

Модели счетчиков газа:

1, 2, 3, 4, 5, 16, 17, 18, 19, 20, 32, 33, 34, 35, 36, 48, 49, 50, 51, 52, 64, 65, 66, 67, 68, 80, 81, 82, 83, 84

Модели счетчиков воды:

1, 2, 3, 4, 5, 6

Типы счетчиков:

1 – Газ

2 – Вода

3 – Энергия (Возможно)

4 – Тепла (Возможно)

Соотношение:

    "1-1": "СГБ-1.8",
    "1-2": "СГБ-3.2",
    "1-3": "СГБ-4.0",
    "1-4": "СГБ-6.0",
    "1-5": "СГБ-1.6",
    "1-16": "СГБД-1.8",
    "1-17": "СГБД-3.2",
    "1-18": "СГБД-4.0",
    "1-19": "СГБД-6.0",
    "1-20": "СГБД-1.6",
    "1-32": "СОНИК-G1,6",
    "1-33": "СОНИК-G2,5",
    "1-34": "СОНИК-G4",
    "1-35": "СОНИК-G6",
    "1-36": "СОНИК-G10",
    "1-48": "СГБД-1.8ТК",
    "1-49": "СГБД-3.2ТК",
    "1-50": "СГБД-4.0ТК",
    "1-51": "СГБД-6.0ТК",
    "1-52": "СГБД-1.6ТК",
    "1-64": "СОНИК-G1,6ТК",
    "1-65": "СОНИК-G2,5ТК",
    "1-66": "СОНИК-G4ТК",
    "1-67": "СОНИК-G6ТК",
    "1-68": "СОНИК-G10ТК",
    "1-80": "СГБ-1.8ТК",
    "1-81": "СГБ-3.2ТК",
    "1-82": "СГБ-4.0ТК",
    "1-83": "СГБ-6.0ТК",
    "1-84": "СГБ-1.6ТК",
    "2-1": "СВД-15",
    "2-2": "СВД-20",
    "2-3": "СВТ-15",
    "2-4": "СВТ-15",
    "2-5": "СВТ-20",
    "2-6": "СВТ-20",
    "3-1": "СЭБ",
    "4-1": "СТБ-10"

Возможно, что-то при исследованиях я не правильно понял или не смог понять. Если есть кому, что дополнить пишите. Исследования продолжаются...

Если у вашего устройства есть дисплей, то он не будет работать с данной интеграцией т.к. эти счетчики не имеют Bluetooth на борту!

На основе этих данных написана интеграция для Home Assistant для счетчиков Элехант смотреть.

Итоговый YAML для ESP-BLE-PROXY

esphome:
  name: esp32-bluetooth-elehant
  friendly_name: Bluetooth Proxy Elehant
  min_version: 2025.8.0
  name_add_mac_suffix: false

esp32:
  variant: esp32
  framework:
    type: esp-idf

captive_portal: 
  
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "ESP32-BLE-PROXY"      # аварийная точка доступа
    password: !secret wifi_password_ap         # минимальная длина 8 символов
  

api:                             # без шифрования для упрощения подключения

ota:
  - platform: esphome
    id: ota_esphome

# Исправление предупреждения BLE: увеличить максимальное количество подключений
esp32_ble:
  max_connections: 5

esp32_ble_tracker:
  scan_parameters:
    interval: 1100ms
    window: 1100ms
    active: false                 # пассивное сканирование для экономии батарей

bluetooth_proxy:
  active: true
  connection_slots: 5            # до 5 подключений одновременно

logger:
  level: ERROR                   # минимальный лог, только ошибки

button:
  - platform: safe_mode
    id: button_safe_mode
    name: Safe Mode Boot

  - platform: factory_reset
    id: factory_reset_btn
    name: Factory Reset