Для меня это первая разработка интеграции для 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
Код для работы с известными счетчиками добавлен, но не проверялся т.к. у автора нет этих счетчиков
Скопируйте папку 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
---------------------------------
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 для счетчиков Элехант смотреть.
Добрый день, запустил вашу интеграцию, сначала пришлось RPI5 тащить поближе к счетчикам, дабы поймать пакеты, потом из подручных средств настроил ble-proxy на ESP32-C3 (видел в статье что он работает плохо), но все же мучает вопрос - счетчики время от времени становятся не доступными в Home Assistant, это лечится заменой на ESP-WROOM-32 например или все равно они так и будут отваливаться? Возможно есть способ доставать из HA последнее актуальное значение (что бы иметь его перед глазами)?
Здравствуйте! ESP32-C3 – работает неважно, ловит пакеты очень плохо, причина пока не ясная, возможно надо поколдовать с параметрами сканирования и все такое в ESP-home, возможно плохая поддержка этой архитектуры или еще чего. С ESP-WROOM-32 все должно работать отлично, ничего отваливаться не будет, значение считываться будут по несколько раз в минуту (+-)… Также можно использовать любой другой bluetooth адаптер.
Про достать из HA - вопрос не понял.
На сколько я полагаю счетчики "адвертайзят" не постоянно, а начинают какой то цикл, когда есть что считать (для экономии батареи), соответственно полагаю - что ситуация, когда счетчик в HA будет не доступен - будет повторятся (даже с ESP-WROOM-32)... Ну и сделаю я например выгрузку раз в месяц данных показаний и именно в этот замечательный момент какой либо из счетчиков будет не доступен, по закону подлости)))
Счетчики отдают данные по несколько раз в минуту и это вы можете увидеть если установите приложение по перехвату трафика на телефон. При этом если расхода нет отдают все равно, но частота может быть другой, но это не точно. Я так особо не анализировал как часто отдают. И ничего не должно отваливаться и данные там актуальны +- 1 минута. НА все полученные данные хранит и при плохом сценарии у вас будут данные от предыдущего считывания и пусть это будет даже день, не такой большой лаг.
скоро поставлю ESP-WROOM-32 вместо C3, потестирую и напишу результат тут. Спасибо!
Поменял C3 на Wroom, стало лучше, но время от времени все равно какой либо из счетчиков становится не доступным (не на долго, в отличии от ситуации с C3). Wroom на расстоянии 1.5 метра от счетчиков, два СВТ и два СВД.
Что HA написал, что данные не приходят, это наверное сутки ждать надо. Как вы понимаете, что счетчик не доступен? Вы esp32-bluetooth-proxy настроили как у меня в примере?
Я сейчас посмотрел у себя, самое большое это 15 мин ... Возможно данные не передаются или очень редко, если нет расхода по счетчику. У нас получается, что мы должны попасть в окно сканирования и момент передачи данных. Можете поиграться с параметрами interval: 1100ms и window: 1100m, что-то уменьшить, что-то увеличить ...