Компонент интеграции счётчиков ресурсов от Элехант с Home Assistant


Опубликовано 14.02.2024 19:11 | Автор: Admin
Данная публикация была обновлена 13.10.2024 15:10

В данной статье рассматривается:
Компонент интеграции счётчиков ресурсов от Элехант с 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"

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

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



Метки
Home Assistant Элехант Python модуль bluetooth Протокол

Комментариев: 8

 164 |

 Nikolay
 05.11.2024 17:49

Добрый день, запустил вашу интеграцию, сначала пришлось RPI5 тащить поближе к счетчикам, дабы поймать пакеты, потом из подручных средств настроил ble-proxy на ESP32-C3 (видел в статье что он работает плохо), но все же мучает вопрос - счетчики время от времени становятся не доступными в Home Assistant, это лечится заменой на ESP-WROOM-32 например или все равно они так и будут отваливаться? Возможно есть способ доставать из HA последнее актуальное значение (что бы иметь его перед глазами)?

 Admin
 05.11.2024 21:12

Здравствуйте! ESP32-C3 – работает неважно, ловит пакеты очень плохо, причина пока не ясная, возможно надо поколдовать с параметрами сканирования и все такое в ESP-home, возможно плохая поддержка этой архитектуры или еще чего. С ESP-WROOM-32 все должно работать отлично, ничего отваливаться не будет, значение считываться будут по несколько раз в минуту (+-)… Также можно использовать любой другой bluetooth адаптер.
Про достать из HA - вопрос не понял.

 Nikolay
 05.11.2024 21:24

На сколько я полагаю счетчики "адвертайзят" не постоянно, а начинают какой то цикл, когда есть что считать (для экономии батареи), соответственно полагаю - что ситуация, когда счетчик в HA будет не доступен - будет повторятся (даже с ESP-WROOM-32)... Ну и сделаю я например выгрузку раз в месяц данных показаний и именно в этот замечательный момент какой либо из счетчиков будет не доступен, по закону подлости)))

 Admin
 05.11.2024 21:34

Счетчики отдают данные по несколько раз в минуту и это вы можете увидеть если установите приложение по перехвату трафика на телефон. При этом если расхода нет отдают все равно, но частота может быть другой, но это не точно. Я так особо не анализировал как часто отдают. И ничего не должно отваливаться и данные там актуальны +- 1 минута. НА все полученные данные хранит и при плохом сценарии у вас будут данные от предыдущего считывания и пусть это будет даже день, не такой большой лаг.

 Nikolay
 05.11.2024 22:04

скоро поставлю ESP-WROOM-32 вместо C3, потестирую и напишу результат тут. Спасибо!

 Nikolay
 06.11.2024 19:20

Поменял C3 на Wroom, стало лучше, но время от времени все равно какой либо из счетчиков становится не доступным (не на долго, в отличии от ситуации с C3). Wroom на расстоянии 1.5 метра от счетчиков, два СВТ и два СВД.

 Admin
 06.11.2024 20:46

Что HA написал, что данные не приходят, это наверное сутки ждать надо. Как вы понимаете, что счетчик не доступен? Вы esp32-bluetooth-proxy настроили как у меня в примере?

 Admin
 06.11.2024 21:01

Я сейчас посмотрел у себя, самое большое это 15 мин ... Возможно данные не передаются или очень редко, если нет расхода по счетчику. У нас получается, что мы должны попасть в окно сканирования и момент передачи данных. Можете поиграться с параметрами interval: 1100ms и window: 1100m, что-то уменьшить, что-то увеличить ...


Добавить комментарий:
Google
Yandex
Отправить