Open kusok18 opened 3 years ago
та же беда
По каким то причинам не устанаваливается модуль aioblescan, хотя он и есть в зависимостях. Но к сожалению у меня под рукой нет ни HA, и счетчиков - поковыряться возможности нет. Да и со временем туго Может кто-то знает какие изменения на это повлияли - отпишитесь сюда. Это сильно ускорит прогресс
Тоже не работает. В логах нашел это, не знаю связано с проблемой или нет:
/config/custom_components/elehant_water/sensor.py:63: RuntimeWarning: coroutine 'BLEScanRequester.send_scan_request' was never awaited
btctrl.send_scan_request()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
/config/custom_components/elehant_water/sensor.py:20: RuntimeWarning: coroutine 'BLEScanRequester.stop_scan_request' was never awaited
btctrl.stop_scan_request()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
/config/custom_components/elehant_water/sensor.py:71: RuntimeWarning: coroutine 'BLEScanRequester.stop_scan_request' was never awaited
btctrl.stop_scan_request()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Похоже что при заливке новой версии sensor.py (0.4.1-beta.1) что-то пошло не так, он не изменился (странно). Только в манифесте обновился номер версии и всё...
Похоже что при заливке новой версии sensor.py (0.4.1-beta.1) что-то пошло не так, он не изменился (странно). Только в манифесте обновился номер версии и всё...
Я плохо залил Поправил в 0.4.1-beta.2
Обновился до 0.4.1-beta.2, не заработало. В логах нашел следующее:
[homeassistant] Error doing job: Future exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/elehant_water/sensor.py", line 67, in update_counters
conn, btctrl = current_event_loop.run_until_complete(fac)
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete
self._check_running()
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 578, in _check_running
raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
Эта ошибка иногда появляется - это нормально Странно что данные не собираются
Точно раз в минуту это появляется, такое впечатление что первая попытка считывания зависает...
2021-10-07 22:18:59 ERROR (MainThread) [homeassistant] Error doing job: Future exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/elehant_water/sensor.py", line 67, in update_counters
conn, btctrl = current_event_loop.run_until_complete(fac)
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete
self._check_running()
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 578, in _check_running
raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
2021-10-07 22:19:59 ERROR (MainThread) [homeassistant] Error doing job: Future exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/elehant_water/sensor.py", line 67, in update_counters
conn, btctrl = current_event_loop.run_until_complete(fac)
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete
self._check_running()
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 578, in _check_running
raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
2021-10-07 22:20:59 ERROR (MainThread) [homeassistant] Error doing job: Future exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/elehant_water/sensor.py", line 67, in update_counters
conn, btctrl = current_event_loop.run_until_complete(fac)
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete
self._check_running()
File "/usr/local/lib/python3.9/asyncio/base_events.py", line 578, in _check_running
raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
/usr/local/lib/python3.9/logging/handlers.py:1513: RuntimeWarning: coroutine 'BaseEventLoop._create_connection_transport' was never awaited
record = self.dequeue(True)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Аналогичное поведение в Home assistant на виртуалке (KVM под Linux) и на Raspberry. Счетчики в наличии СВД-15 и СВТ-15, через приложение Android на телефоне считываются нормально. Готов предоставить нужные логи, участвовать в экспериментах, пишите что надо сделать.
+1 к предыдущему сообщению та же ошибка с эвент луп, при этом данные не собираются. Попытка установить aioblescan в том же venv, в котором бежит home assistant приводит к сообщению о том, что этот модуль уже стоит. Может ли это быть связано с установленной интеграцией Bluetooth Low Energy Monitor, собирающей данные с сяомишных устройств? Может быть она забирает hci?
│2022-01-20 00:35:05 ERROR (MainThread) [homeassistant] Error doing job: Future exception was never retrieved │
│Traceback (most recent call last): │
│ File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run │
│ result = self.fn(*self.args, **self.kwargs) │
│ File "/opt/ha/config/custom_components/elehant_water/sensor.py", line 67, in update_counters │
│ conn, btctrl = current_event_loop.run_until_complete(fac) │
│ File "/usr/lib/python3.8/asyncio/base_events.py", line 592, in run_until_complete │
│ self._check_running() │
│ File "/usr/lib/python3.8/asyncio/base_events.py", line 552, in _check_running │
│ raise RuntimeError('This event loop is already running') │
│RuntimeError: This event loop is already running │
│2022-01-20 00:35:35 ERROR (MainThread) [homeassistant] Error doing job: Future exception was never retrieved │
│Traceback (most recent call last): │
│ File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run │
│ result = self.fn(*self.args, **self.kwargs) │
│ File "/opt/ha/config/custom_components/elehant_water/sensor.py", line 67, in update_counters │
│ conn, btctrl = current_event_loop.run_until_complete(fac) │
│ File "/usr/lib/python3.8/asyncio/base_events.py", line 592, in run_until_complete │
│ self._check_running() │
│ File "/usr/lib/python3.8/asyncio/base_events.py", line 552, in _check_running │
│ raise RuntimeError('This event loop is already running') │
│RuntimeError: This event loop is already running
Приветствую! Я PHP-шник, и в питоне не шарю. Но пошарившись в интернете я пришел к выводу, что ошибка возникает в слишком большом количестве bluetooth девайсов в округе. Дело в том, что поиск и считывание счетчиков происходит интервалами функцией track_time_interval. Период вызова функции считывания показаний задаётся параметром scan_interval, который слишком мал. Получается так, что функция считывания все еще отрабатывает и aioblescan в этот момент занят. И в этот момент эта же функция запускается снова. Как временное решение предлагаю увеличить параметр scan_interval до 120 (2 минуты) или больше. А в идеале, стоит переписать код, чтобы следующий цикл запускался не по интервалу, а по завершению предыдущего. Если руки дойдут до базового понимания питона, то думаю сделать форк с апдейтами. Сейчас у меня на руках СВТ-20 и СГБД-1,8 и я уже знаю их мак-адреса.
UPD. Немного дополнил код в своём hass. Увеличил scan_interval до 600. Данные стали собираться не так шустро, но уже без ошибок. Добавил считывание показаний СВД-20, СВТ-20 и СГБД-1,8. Данные успешно снялись. Если кто подскажет, как можно отлаживать HACS плагины без постоянной перезагрузки HA, соберу нормальный код и выкачу на обозрение.
Добавил считывание показаний СВД-20, СВТ-20 и СГБД-1,8.
подскажите пожалуйста какой мак для газовых счетчиков? Купил СНБД-4.0, хочу добавить в HA.
У СГБД-1,8 мак начинается на b0:10:01. По аналогии со счетчиками воды, предполагаю, что СГБД-3.2 - b0:0a:01, , СГБД-4.0 - b0:0b:01.
Я установил в телефон прогу BLE Scanner. Есть так же и в appstore. На телефоне модуль bluetooth должен быть не ниже 4.0. Запускаем сканнер вблизи счетчика и ищем мак, который начинается на b0.
Очень прошу засветить найденный мак адрес сюда (хватит первых 3 групп, остальные - это номер счетчика в hex). Я взялся за разработку интеграции по Элехант счетчикам. Собираю информацию, где могу. Отдел поддержки Элехант информацией не поделился.
Очень прошу засветить найденный мак адрес сюда (хватит первых 3 групп)
нашел через aioblescan. Для СГБД-4.0: peer: b0:12:01:ХХХХХХХ Payload: 80:a0:0a:01:01:12:55:05:00:30:0f:00:00:6c:e0:c5:0b Вы планируйте выкладывать свой код или самому исправить в hacs?
Ага. Значит СГБД-3.2 - b0:11:01. Планирую выложить. Как только разберусь с питоном и документацией к custom интеграциям. Документация запутанная, сложно вникнуть. На данный момент можно добавлять счетчики через интерфейс. Осталось собрать объекты в устройство. Это займёт некоторое время.
Ага. Значит СГБД-3.2 - b0:11:01.
Смещения в payload для газовых счетчиков те же? c_num = int.from_bytes(payload[6:8], byteorder="little") c_count = int.from_bytes(payload[9:12], byteorder="little")
Сделал форк от этого репо. У меня пока работает так. Обязательно прочитать описание в форке. Есть изменения в описании сенсора.
Сделал форк от этого репо
перенастроил интеграцию на ваш форк, все работает, спасибо! Осталось прикрутить что-нибудь легкое для подсчета статистики
По состоянию на текущую дату - у меня снимаются показания с двухтарифного счётчика и через компонент от @raxers, и через форк от @SzenProgs. И в обоих компонентах - возникает ошибка на строчке с вызовом current_event_loop.run_until_complete(fac), даже с интервалом сканирования в 180 секунд.
Я добавил немного отладочных сообщений:
В configuration.yaml я выставил scan_duration: 10 и scan_interval: 180.
Вот логи сразу после запуска/рестарта HA:
Traceback (most recent call last): File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/config/custom_components/elehant_water/sensor.py", line 90, in update_counters conn, btctrl = current_event_loop.run_until_complete(fac) File "/usr/local/lib/python3.10/asyncio/base_events.py", line 622, in run_until_complete self._check_running() File "/usr/local/lib/python3.10/asyncio/base_events.py", line 582, in _check_running raise RuntimeError('This event loop is already running') RuntimeError: This event loop is already running#033[0m /usr/local/lib/python3.10/asyncio/base_events.py:1897: RuntimeWarning: coroutine 'BaseEventLoop._create_connection_transport' was never awaited handle = None # Needed to break cycles when an exception occurs. RuntimeWarning: Enable tracemalloc to get the object allocation traceback
То есть видно, что первый же запуск компонента не прерывается, и остаётся работать. Все последующие запуски компонента (с моими настройками это каждые три минуты) просто вываливаются с ошибкой. За первые три минуты компонент успевает несколько раз получить данные с моего 2х-тарифного счётчика (при этом он видит ещё десяток других Bluetooth-устройств, но проверка по MAC-адресу их отбрасывает). Через день-два работы компонент подвисает, данные в HA перестают обновляться, нужно перегрузить supervisor, и снова данные начинают обновляться – также только в результате работы первого запуска компонента.
@raxers, @SzenProgs - вдруг у вас появилось время посмотреть почему цикл не завершается по времени, почему не срабатывает отсечка по scan_duration? Подскажите плз куда дальше покопать...
В общем, вот что я выяснил:
Всё заработало как часы, все ошибки ушли.
Если авторы компонента заглянут сюда - пришлю им код. Не очень хочу делать ещё один форк..
Приветствую! С удовольствием гляну на ваш код.
@SzenProgs,
Попробую так отправить, в архиве (так как zip - это supported format).. Если не получилось - скажите, отправлю другим способом..
Всем привет!
Только что установил дополнение из https://github.com/SzenProgs/elehant_water.
А как id: 60718
добавлять - это значение без 0 должно быть?
@empenoso, да, без ведущих нулей.
У СГБД-1,8 мак начинается на b0:10:01. По аналогии со счетчиками воды, предполагаю, что СГБД-3.2 - b0:0a:01, , СГБД-4.0 - b0:0b:01.
Я установил в телефон прогу BLE Scanner. Есть так же и в appstore. На телефоне модуль bluetooth должен быть не ниже 4.0. Запускаем сканнер вблизи счетчика и ищем мак, который начинается на b0.
Очень прошу засветить найденный мак адрес сюда (хватит первых 3 групп, остальные - это номер счетчика в hex). Я взялся за разработку интеграции по Элехант счетчикам. Собираю информацию, где могу. Отдел поддержки Элехант информацией не поделился.
Добрый день! Установил вашу интеграцию. У меня газовый счетчик СГБД-4.0 ТК (видимо с термокоррекцией) судя по скриншоту с приложения Элеханта. У него mac b0:32:01:00:01:b7. Я даже дописал его в sensor.py:
if (str(mac).find('b0:10:01') !=-1) or (str(mac).find('b0:11:01') !=-1) or (str(mac).find('b0:12:01') !=-1) or (str(mac).find('B0:32:01') !=-1):
Однако показания не считываются. У меня давно установлен водный счетчик. Он продолжает работать как и раньше. А газовый не хочет. Может быть только добавление мака мало?
Приветствую! Предполагаю, что у счетчиков с термокомпенсацией отличаются пейлоады. Хорошо бы трансляцию счетчика пощупать...
Здравствуйте. Если вы мне подскажете, что нужно сделать для "ощупывания" трансляции, то я попробую получить нужные данные.
Здравствуйте. На счет передачи данных со счтечика газа с термокоррекцией. Я нашел скрипт https://support.wirenboard.com/t/podderzhka-schetchikov-vody-elehant/4809 (elehant-scan.sh) Запустил его в оригинале (с фильтрацией по mac для водного счетчика)
` # process only Elehant packets if [[ ! $packet =~ ^043E210201.{10}0201B0 ]]; then return fi
./elehant-scan.sh 24536|16.6304|16630.4|-86|30-10-2022 22:40:07 24536|16.6304|16630.4|-84|30-10-2022 22:40:38`
А потом поправил фильтрацию mac для своего газового счетчика с термокоррекцией и тоже получил нужные данные.
` # process only Elehant packets if [[ ! $packet =~ ^043E210201.{10}0132B0 ]]; then return fi
./elehant-scan.sh 439|0.7635|763.5|-56|30-10-2022 22:37:25 439|0.7635|763.5|-48|30-10-2022 22:38:18 439|0.7635|763.5|-50|30-10-2022 22:38:30 439|0.7635|763.5|-48|30-10-2022 22:38:46 439|0.7635|763.5|-50|30-10-2022 22:38:49`
Т.е. получается, что данные оба счетчика передают. И передаются вроде бы идетично. Но в интеграции и хомассистансе по-прежнему газовый не виден. ( Что может быть не так?
Решил еще прикрепить дамп: ble1.dump.gz Может как то поможет. Открыавет wireshark-ом
Вопрос снимается!
Заменил строку:
if (str(mac).find('b0:10:01') !=-1) or (str(mac).find('b0:11:01') !=-1) or (str(mac).find('b0:12:01') !=-1) or (str(mac).find('B0:32:01') !=-1):
на
if (str(mac).find('b0:32:01') !=-1):
И понял, что проблема в регистре.
В интерфейсе увидел:
В дэбаге тоже значения увидел:
2022-11-04 02:00:50.778 DEBUG (SyncWorker_6) [elehant_water] Found MAC = b0:32:01:00:01:b7
2022-11-04 02:00:50.778 DEBUG (SyncWorker_6) [elehant_water] SEE gaz counter
2022-11-04 02:00:50.779 DEBUG (SyncWorker_6) [elehant_water] c_num serial gas = 439
2022-11-04 02:00:50.779 DEBUG (SyncWorker_6) [elehant_water] c_count gas = 7635
2022-11-04 02:01:01.173 DEBUG (SyncWorker_6) [elehant_water] Found MAC = b0:01:02:00:5f:d8
2022-11-04 02:01:01.174 DEBUG (SyncWorker_6) [elehant_water] SEE 1 tariff counter
2022-11-04 02:01:01.174 DEBUG (SyncWorker_6) [elehant_water] c_num serial water = 24536
2022-11-04 02:01:01.174 DEBUG (SyncWorker_6) [elehant_water] c_count water = 175839```
Внёс правки в форк. Работы много, не успеваю реагировать на сторонние проекты. Спасибо за информацию по СГБД-4,0 ТК!
Внёс правки в форк. Работы много, не успеваю реагировать на сторонние проекты. Спасибо за информацию по СГБД-4,0 ТК!
Да не за что. Потихоньку информация по MAC счетчиков собирается. Хорошо бы еще что бы вот это https://github.com/raxers/elehant_water/issues/9 кто-то посмотрел и что-то посоветовал, как пофиксить
А еще в примере сенсора в README видимо надо заменить: measurement_water: l на measurement_water: L
А еще в примере сенсора в README видимо надо заменить: measurement_water: l на measurement_water: L
Это значения не имеет. В коде проверка на "m3". Если введено что-то другое - то будут литры.
Хорошо бы еще что бы вот это #9 кто-то посмотрел и что-то посоветовал, как пофиксить
Постараюсь внести правки.
С некоторых пор у HA появилась возможность использовать нативные методы для работы с bluetooth. Начал разработку кода, но сам столкнулся с проблемой. Мой Raspberry Pi 4 перестал видеть счетчики элехант и только их. При этом другие BLE датчики видны без проблем.
Добрый день! Про литры я имел ввиду, что заменить примере описания конфига в "ридми" l на L (возможно для HA это имеет значение... но это не точно) measurement_water: l - отображать показания воды в литрах measurement_gas: l - отображать показания газа в литрах
А что касается BLE и Pi, то как вариант попробовать отдельный BT-адаптер. Может он увидит. У меня еще был момент (до обновления HA на 2022.11), что нитивная итеграция блютуса от HA видела mac встроенного в R-pi BT-адаптера как AA:AA:AA:AA - я удивился, но забил. потому что все равно использовал выносной. А после обновления на последнюю версию вновь появился реальный mac. Был какой-то глюк видимо. Но у вас скорее всего дело не в этом, раз видятся другие BLE-устройства. Еще как вариант послушать эфир тем bash-скриптом, ссылку на который я скидывал выше.
По BLE проблема оказалась тривиальной. Моя малинка в корпусе Argon One M2 в алюминии. А в дом пришли пару десятков Zigbee выключателей (роутеров) и датчиков. В результате частота 2,4 ГГц была забита и дальность приёма BLE уменьшилась. Пришлось колхозить внешнюю антенну для аргона. Впаялся пигтейлом и вывел антеннку. Теперь вижу счетчики (все 5 штук).
Оффтоп, конечно, но может кому поможет.
А кто знает как добавить эти счётчики в раздел Потребление воды HA? http://homeassistant.local:8123/config/energy
@empenoso, а вы точно последнюю версию интеграции с моего форка используете? Там этот функционал уже давно реализован. SzenProgs/elehant_water
Обновил HA до версии core-2021.6.4 Показания счетчиков перестали отображаться. Если в терминале запустить команду "pip install aioblescan", интеграция начинает работать, но это только до следующего перезапуска HA. Почему aioblescan не подгружается автоматически, как это было в предыдущих версиях ХА? Как бы это поправить, есть регулярная перезагрузка сервера, для стабильной работы, после этого показания автоматически не передаются в управляющую компанию. Приходится после каждого перезапуска в терминале выполнять "pip install aioblescan", после чего все работает отлично.