ClusterM / skykettle-ha

Redmond SkyKettle integration for Home Assistant
GNU General Public License v3.0
92 stars 14 forks source link

@ClusterM приветствую! Если нужны будут подробности о работе ble_monitor, я с радостью отвечу. #13

Open Disperion opened 2 years ago

Disperion commented 2 years ago

@ClusterM приветствую! Если нужны будут подробности о работе ble_monitor, я с радостью отвечу.

Originally posted by @Magalex2x14 in https://github.com/ClusterM/skykettle-ha/issues/9#issuecomment-1055228249

Приветствую! Поделитесь информацией по решению проблемы?

ClusterM commented 2 years ago

Привет. Да вот надо разобраться, почему он не работает одновременно с gatttool.

Magalex2x14 commented 2 years ago

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

Как мне кажется, gatttool (тут могу быть не прав, не очень детально смотрел твой код) долго (и/или часто) держит интерфейс в состоянии сканирования с включенным белым списком (в этом списке только мак-адрес устройства skykettle), что, естественно, приводит к прерыванию потока данных от других устройств. Причем это становится ощутимо на интерфейсе BT5.0. С BT4.0 негативный эффект от одновременной работы двух интеграций с одним интерфейсом практически незаметен. Еще @rchovan отмечает, что hcitool работает ощутимо медленнее на интерфейсе BT5.0 (это субъективное ощущение может быть связано именно с прерыванием потока данных от других устройств, а может действительно просто он работает медленнее по какой то причине)... Возможно, дело в том, что обе утилиты (и hcitool и gatttool) находятся в статусе deprecated уже довольно давно, и могут плохо работать с новыми BT-чипсетами, я не знаю...

Все, что делает ble_monitor, это раз в минуту (это период по умолчанию) перезапускает сканирование на интерфейсе и парсит полученные за прошедший период события. Другая интеграция (или другой системный софт) может перевести интерфейс в другой режим, прервав тем самым сканирование, но для ble_monitor и пользователя это будет практически незаметно, если это продлится не долго (по истечении текущего периода ble_monitor просто перезапустит сканирование, и все вернется на круги своя). А вот если интерфейс будет удерживаться в другом режиме достаточно долго (и/или часто), то прерывание потока данных может стать ощутимым (провалы на графиках, например). Теоретически, в такой ситуации можно попробовать поиграться продолжительностью периода в ble_monitor и в конфликтующей интеграции - но это в любом случае лотерея, поскольку многое еще будет зависеть от того, какая интеграция стартанет первой, и насколько быстрее, поэтому я обычно советую пользователям разнести их по разным интерфейсам, то есть выделить под ble_monitor один интерфейс, а для соединений с устройствами использовать другой.

Magalex2x14 commented 2 years ago

Не уверен, что моя память не шутит со мной, но в нашем случае там вообще вроде бы ситуация такова, что gatttool на интерфейсе BT4.0 включает сканирование без белого списка, а на BT5.0 - с белым списком почему то... Надо снова лезть в журналы от @rchovan, но у меня сейчас со временем туговато...

Ты не думал уходить от использования hcitool и gatttool?

ClusterM commented 2 years ago

У меня сейчас тоже со временем туговато. Можно попробовать уйти от gatttool, лишь бы работало стабильно.

ClusterM commented 2 years ago

А на что лучше перейти с gatttool? Может лучше вообще какую-то готовую питоновскую библиотеку использовать?

ClusterM commented 2 years ago

Попробую Bleak.

ClusterM commented 2 years ago

Или PyBluez.

Magalex2x14 commented 2 years ago

Приветствую! Могу только посоветовать обратить внимание на эту сводную таблицу - https://github.com/ukBaz/python-bluezero/wiki И вообще посмотри репозитории ukBaz. Мне его наработки здорово помогли в свое время. Там много полезного относительно работы с Bluetooth. Возможно, его BLE_GATT закроет твои потребности? Или python-bluezero.

rchovan commented 2 years ago

Hello, will be you so kind and write in English, so I can be informed too :-) I'm using translator, and currently I want to add some info. In HA 2022.7 are breaking changes for bluetooth, and because you discussed BT libraries, I'm pointing to this changelog:

https://www.home-assistant.io/blog/2022/07/06/release-20227/#breaking-changes

Integrations which rely on the bluepyand pybluezlibraries, no longer work in newer versions of Python. bluepyhas seen its last update in December 2018 and hasn’t kept up with changes in the Python world. Similar story with pybluez.

ClusterM commented 2 years ago

Hello, will be you so kind and write in English, so I can be informed too :-) I'm using translator, and currently I want to add some info. In HA 2022.7 are breaking changes for bluetooth, and because you discussed BT libraries, I'm pointing to this changelog:

https://www.home-assistant.io/blog/2022/07/06/release-20227/#breaking-changes

Integrations which rely on the bluepyand pybluezlibraries, no longer work in newer versions of Python. bluepyhas seen its last update in December 2018 and hasn’t kept up with changes in the Python world. Similar story with pybluez.

This integration doesn't use bluepy or pybluez.

ClusterM commented 2 years ago

Please install Home Assistant 2022.8.1 or newer and try version from master. It depends on the new "Bluetooth" integration now, so make sure that it's enabled and works.