8000 Интеграция 4.1.1 не добавляются бризеры. No device found for address None · Issue #117 · TionAPI/HA-tion · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Интеграция 4.1.1 не добавляются бризеры. No device found for address None #117

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
UnnamedHero opened this issue Sep 25, 2022 · 39 comments
Labels
Bluetooth BT related bug Something isn't working

Comments

@UnnamedHero
Copy link
UnnamedHero commented Sep 25, 2022

Общая информация

  • версия Home Assistant: 2022.9.6
  • способ установки Home Assistant:
    [ ] venv
    [x] Docker
    [ ] Home Assistant OS
  • версия компонента: 4.1.1
  • Модель бризера: Lite

[x] в момент проявления проблемы к бризеру никто не подключен
[x] bluetooth в системе работает корректно, действий из (WiKi)[https://github.com/TionAPI/HA-tion/wiki/Bluetooth] не требуется
[x] проблема не похожа ни на одну из (FAQ)[https://github.com/TionAPI/HA-tion/wiki/FAQ]

Краткое описание

При добавлении бризера сразу высвечивается ошибка "Could not get test data from breezer!"
Вместо MAC можно вообще что угодно вводить, результат всегда одинаковый.
В логах результаты попытки простого добавления и добавление с сопряжением.

Debug-log

2022-09-25 12:26:56.646 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that attempted to call BleakClient with an address instead of a BLEDevice. Please report issue to the custom integration author for ha_tion_btle using this method at custom_components/ha_tion_btle/config_flow.py, line 107: return Breezer(btle_device)
2022-09-25 12:26:56.652 ERROR (MainThread) [custom_components.ha_tion_btle.config_flow] Could not get data from breezer. result is {}, error: No device found for address None
2022-09-25 12:27:02.080 ERROR (MainThread) [custom_components.ha_tion_btle.config_flow] Cannot pair and get data. Data is {'model': 'Lite', 'name': 'Tion Breezer', 'mac': 'd5:66:95:e5:3d:8c', 'keep_alive': 60, 'away_temp': 15, 'pair': True}, result is {}; BleakError: No device found for address None
2022-09-25 12:28:37.359 ERROR (MainThread) [custom_components.ha_tion_btle.config_flow] Could not get data from breezer. result is {}, error: No device found for address None

Как можно воспроизвести вашу проблему

  1. Попытаться добавить бризер.
@IATkachenko
Copy link
Contributor

Прям сразу-сразу, ничего нажать не успели, только добавляете интеграцию и первым шагом сообщение?

Из приватного окна браузера попробуйте, пожалуйста: то что вы видите на первом шаге, по дизайну HA, происходить не должно и у себя я воспроизвести это не могу. Правда на 2022.9.4 -- если и в приватном окне тоже самое -- обновлюсь, проверю на 9.6.

Первое сообщение, кстати, тоже весьма занятное, но я подозреваю что это из-за того что mac приходит None.

@UnnamedHero
Copy link
Author

Ошибка возникает после нажатия "Подтвердить" в диалоге добавления бризера. В приватном окне тоже самое.

@fishenebelny
Copy link

У меня тоже самое.
Даже по лругому было оьновил компонент до 4.1.1 с 4.1.0 на 2022.8.7 и бризеры пропали.
Обновился на 2022.9.6, ситуация нк поменялась. Устройство не доьавляется.

@IATkachenko
Copy link
Contributor

Ага, значит не "сразу", а после того как все ввели и нажали подтвердить.
Тогда все проясняется.

После старта HA сколько времени проходит?

@fishenebelny
Copy link

После танцев с бубнами он завелся. При это в bluetoothctl юыли странные сообщения. Не было сканирования бт. Потом когда вручную попробовал его подконнектить, что тотзавелось, он начал сканировать и после бризер добавился.

@fishenebelny
Copy link
fishenebelny commented 8000 Sep 25, 2022

Ага, значит не "сразу", а после того как все ввели и нажали подтвердить.
Тогда все проясняется.

После старта HA сколько времени проходит?

Немного прошло, но, по моим ощущениям, бризеры уже работали к этому времени обычно.

@IATkachenko
Copy link
Contributor

Там идея в том, что чтобы все хорошо отработало бризер должен увидеть и опознать bluetooth компонент HA.

Сейчас добавлю exception если он не может найти бризер.

IATkachenko added a commit that referenced this issue Sep 25, 2022
@IATkachenko IATkachenko added Bluetooth BT related and removed need more info labels Sep 25, 2022
@IATkachenko
Copy link
Contributor

В v4.1.2 теперь будет штатно с ошибкой вываливаться и писать в лог.

Фиксом назвать не могу, но и что-то сделать особо не получится. Общая рекомендация -- подождать. У меня bluetooth замечает бризер через 30-40 секунд после рестарта. Абсолютный рекорд -- 2 минуты.

Ну и все шаманство с BT стеком в полный рост работает, вроде проверки возможности подключения через bluettothctl, проверка того что после старта HA работает сканирование итд...

@UnnamedHero
Copy link
Author

После старта HA прошло 16 минут, ещё раз попробовал добавить бризер. Та же ошибка. dmesg на Bluetooth не ругался.

@IATkachenko
Copy link
Contributor
IATkachenko commented Sep 25, 2022

Тогда включаем debug логи интеграции, модуля tion_btle, интеграции bluetooth и bleak, первые 5 минут работы и ошибку после них на v4.1.2 скидываем сюда (лог может большим оказаться, можно файлом).

ps. Для bluetooth и bleak логи включаются вот так:

logger:
  default: warning
  logs:
    homeassistant.components.bluetooth: debug
    bleak: debug
    bleak.backends.bluezdbus.manager: info

@IATkachenko IATkachenko reopened this Sep 25, 2022
@UnnamedHero
Copy link
Author

Что-то в логах ничего нового и интересного.
логгер настроен так:

logger:
  default: warning
  logs:
    custom_components.tion: debug
    tion_blte.TionLite: debug
    custom_components.tion.config_flow: debug
    homeassistant.components.bluetooth: debug
    bleak: debug
    bleak.backends.bluezdbus.manager: debug

В логах тишина.

2022-09-25 15:02:16.357 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration ha_tion_btle which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2022-09-25 15:02:46.964 DEBUG (MainThread) [homeassistant.components.bluetooth] Triggering bluetooth usb discovery
2022-09-25 15:02:51.980 DEBUG (MainThread) [homeassistant.components.bluetooth] Rediscovered adapters: {'hci0': {'address': '00:E0:4C:CC:06:03', 'sw_version': 'mysecret.domian', 'hw_version': 'usb:v1D6Bp0246d0540', 'passive_scan': False}}
^[`2022-09-25 15:07:50.457 DEBUG (MainThread) [homeassistant.components.bluetooth] Triggering bluetooth usb discovery
2022-09-25 15:07:55.472 DEBUG (MainThread) [homeassistant.components.bluetooth] Rediscovered adapters: {'hci0': {'address': '00:E0:4C:CC:06:03', 'sw_version': 'mysecret.domian', 'hw_version': 'usb:v1D6Bp0246d0540', 'passive_scan': False}}
2022-09-25 15:08:56.307 CRITICAL (MainThread) [custom_components.ha_tion_btle.config_flow] getTion: Could not find device with mac='d5:66:95:e5:3d:8c'
2022-09-25 15:08:56.317 ERROR (MainThread) [custom_components.ha_tion_btle.config_flow] Could not get data from breezer. result is {}, error: Could not find device with mac='d5:66:95:e5:3d:8c'

Triggering bluetooth usb discovery судя по всему происходит при заходе в меню настройки интеграций.
В консоли bluetoothctl можно спокойной соединиться с бризерами. Там всё по-старому.

@IATkachenko
Copy link
Contributor

@UnnamedHero
Copy link
Author
UnnamedHero commented Sep 25, 2022

У вас проблемы с bluetooth.
Так, проверяем очевидное:

  1. интеграция bluetooth у вас в HA добавлена?
  2. используемый адаптер в списке совместимых?

Если коротко - и работает и не работает. Круто, правда? Но к интеграции это не имеет отношение.
Добавил интеграцию Bluetooth (в прошлый раз наоборот её выключали) . Два из трёх бризеров добавил. На третьем интеграция висит в инициализации. Добавленные бризеры отвечают на команды медленнее на порядок. Думаю, надо подождать, пока вся эта блютузобратия пообщается. В логах HA постоянные сообщения от кучи Bluetooth девайсов, до которых дотянулся адаптер.
В целом, адаптер у меня не в списке, на популярном RTL8761B. Как раз про него: бага в убунте
Но блин, раньше работало :) Один раз адаптер отвалился. Вероятно, не справляется с такой нагрузкой.

Пока всё работает крайне нестабильно.

@IATkachenko
Copy link
Contributor

Раньше оно работало по другим "принципам", которые теперь в HA не работают (и текущая версия, не смотря на все проблемы гораздо лучше).

Могу только рекомендовать EPS-tion -- там нет заморочек с аппаратным bluetooth: при физическом подключении модулей все вообще хорошо -- в HA попадает ESPHome-устройство. По BT ESP тоже с бризерами нормально общается.

@UnnamedHero
Copy link
Author

Заказал на пробу один из "рекомендуемых" адаптеров на али на всякий случай. Мой, судя по логам после пары часов сканирования банально впадает в кому и не выходит их неё до физического перевключения в порт.
Я же правильно понимаю, что теперь для работы интеграции необходимо включать интеграцию bluetoooth. А включение этой интеграции автоматически приводит к постоянному сканированию устройств, что и вводит мой адаптер в кому. Проведу раунд исследований, может проблема именно в самом устройстве.

@UnnamedHero
Copy link
Author

И да, судя по всему пора обновлять доку по настройке интеграции?

@IATkachenko
Copy link
Contributor

Мой, судя по логам после пары часов сканирования банально впадает в кому и не выходит их неё до физического перевключения в порт.

Я в HA вроде видел коммит про лечение этой проблемы.

Да, теперь bluetooth -- необходимая интеграция, поскольку сейчас вся работа с BT в НА построена через нее.
Да, документацию надо будет обновить... Как только пляски с BT и прочая фигня закончатся...

@UnnamedHero
Copy link
Author

Заметил, что HA теперь сам и bluetooth перегружает. Уронил адаптер, погасил, поднял. В dmesg это видно. Бризеры вроде как цепляются. Даже можно управлять ими. Но работают нестабильно. В логах просто шквал сообщений от других устройств. Но вот бризеры управляются туго.
Позже поиграюсь с уровнем логов.
Пока из интересного только

022-09-26 19:10:29.764 DEBUG (MainThread) [bleak.backends.bluezdbus.client] Connecting to device @ D5:66:95:E5:3D:8C
2022-09-26 19:10:29.768 ERROR (MainThread) [homeassistant.core] Error executing service: <ServiceCall climate.set_hvac_mode (c:01GDXKA5357W53EBTJ5RG0X39P): entity_id=['climate.brizer_gostinaia'], hvac_mode=off>
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 168, in connect
    reply = await self._bus.call(
  File "/usr/local/lib/python3.10/site-packages/dbus_fast/aio/message_bus.py", line 337, in call
    await future
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/core.py", line 1756, in catch_exceptions
    await coro_or_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 1775, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 204, in handle_service
    await service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 676, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 931, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 713, in _handle_entity_call
    await result
  File "/config/custom_components/ha_tion_btle/climate.py", line 117, in async_set_hvac_mode
    await self._async_set_state(is_on=False)
  File "/config/custom_components/ha_tion_btle/climate.py", line 239, in _async_set_state
    await self.coordinator.set(**kwargs)
  File "/config/custom_components/ha_tion_btle/__init__.py", line 154, in set
    await self.__tion.set(kwargs)
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 248, in set
    await self.connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 509, in connect
    await self._connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 303, in _connect
    await self._try_connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 31, in wrapper
    return await f(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 296, in _try_connect
    return await self._btle.connect()
  File "/usr/local/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 167, in connect
    async with async_timeout.timeout(timeout):
  File "/usr/local/lib/python3.10/site-packages/async_timeout/__init__.py", line 129, in __aexit__
    self._do_exit(exc_type)
  File "/usr/local/lib/python3.10/site-packages/async_timeout/__init__.py", line 212, in _do_exit
    raise asyncio.TimeoutError
asyncio.exceptions.TimeoutError
2022-09-26 19:10:39.782 DEBUG (MainThread) [bleak.backends.bluezdbus.client] _cleanup_all(/org/bluez/hci0/dev_D5_66_95_E5_3D_8C)
2022-09-26 19:10:39.785 ERROR (MainThread) [homeassistant.core] Error executing service: <ServiceCall climate.set_hvac_mode (c:01GDXKA6HHH1R2F1SSX3MD8TSQ): entity_id=['climate.brizer_gostinaia'], hvac_mode=off>
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 168, in connect
    reply = await self._bus.call(
  File "/usr/local/lib/python3.10/site-packages/dbus_fast/aio/message_bus.py", line 337, in call
    await future
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/core.py", line 1756, in catch_exceptions
    await coro_or_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 1775, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 204, in handle_service
    await service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 676, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 931, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 713, in _handle_entity_call
    await result
  File "/config/custom_components/ha_tion_btle/climate.py", line 117, in async_set_hvac_mode
    await self._async_set_state(is_on=False)
  File "/config/custom_components/ha_tion_btle/climate.py", line 239, in _async_set_state
    await self.coordinator.set(**kwargs)
  File "/config/custom_components/ha_tion_btle/__init__.py", line 154, in set
    await self.__tion.set(kwargs)
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 248, in set
    await self.connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 509, in connect
    await self._connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 303, in _connect
    await self._try_connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 31, in wrapper
    return await f(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 296, in _try_connect
    return await self._btle.connect()
  File "/usr/local/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 167, in connect
    async with async_timeout.timeout(timeout):
  File "/usr/local/lib/python3.10/site-packages/async_timeout/__init__.py", line 129, in __aexit__
    self._do_exit(exc_type)
  File "/usr/local/lib/python3.10/site-packages/async_timeout/__init__.py", line 212, in _do_exit
    raise asyncio.TimeoutError
asyncio.exceptions.TimeoutError
2022-09-26 19:21:53.175 CRITICAL (MainThread) [tion_btle.tion] Retry limit (1) exceeded for _try_connect((<tion_btle.lite.TionLite object at 0x7fcd8baab040>,), {})
2022-09-26 19:21:53.177 CRITICAL (MainThread) [custom_components.ha_tion_btle] Got exception
2022-09-26 19:21:53.179 CRITICAL (MainThread) [custom_components.ha_tion_btle] Will delay next check
2022-09-26 19:21:53.181 ERROR (MainThread) [custom_components.ha_tion_btle] Error fetching Бризер спальня data: MaxTriesExceededError

@IATkachenko
Copy link
Contributor

А вы можете в /usr/local/lib/python3.10/site-packages/tion_btle/tion.py:296 (внутри контейнера) в self._btle.connect() аргументом передать 15 или даже 20, например? Это собственно tiemeout для подключения.

Но учитывая что он случается, а бризеры управляются "туго" -- маловероятно что это поможет.

@UnnamedHero
Copy link
Author

Да, в ближайщие сутки сделаю. До этого хочу стабилизировать свой BT-адаптер. Мне кажется, все проблемы из-за него. Он впадает в кому после двух-трёх часов работы из-за постоянной нагрузки.

@UnnamedHero
Copy link
Author
UnnamedHero commented Sep 30, 2022

Научил свой bluetooth адаптер пассивно слушать. Для этого надо иметь последний Bluez и bluetooth сервис должен запускаться с ключом --experimental. После этого в настройках интеграции bluetooth в HA можно поставить галочку "пассивное слушание". Что мне это дало: адаптер не зависает уже около 5 часов. Раньше умирал меньше чем за час. Из минусов. Если перегрузить HA с включенным режимом пассивного слушания, то при старте интеграции бризеры не подхватываются. В логах

2022-09-30 21:36:26.497 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration ha_tion_btle which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2022-09-30 21:36:47.769 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Бризер спальня' for ha_tion_btle integration not ready yet: None; Retrying in background
2022-09-30 21:36:47.775 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Бризер детская' for ha_tion_btle integration not ready yet: None; Retrying in background
2022-09-30 21:36:47.778 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Бризер гостиная' for ha_tion_btle integration not ready yet: None; Retrying in background

Если включить пассивное слушание, то всё равно ничего не происходит. Если перегрузить HA с выключенным пассивным слушанием, то бризеры минут через 5 подхватываются. Но в логах примерно такое

2022-09-30 21:39:30.485 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration ha_tion_btle which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2022-09-30 21:39:44.624 WARNING (MainThread) [bleak.backends.bluezdbus.client] Failed to cancel connection (/org/bluez/hci0/dev_D5_66_95_E5_3D_8C):
2022-09-30 21:39:44.631 WARNING (MainThread) [tion_btle.tion] Got exception: [org.bluez.Error.Failed] le-con
8000
nection-abort-by-local. Will try again
2022-09-30 21:39:46.816 CRITICAL (MainThread) [custom_components.ha_tion_btle] response={}, e=TimeoutError()
2022-09-30 21:39:46.819 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Бризер детская' for ha_tion_btle integration not ready yet; Retrying in background
2022-09-30 21:39:53.719 WARNING (MainThread) [tion_btle.tion] Got exception: [org.bluez.Error.Failed] le-connection-abort-by-local. Will not try again
2022-09-30 21:39:55.724 CRITICAL (MainThread) [tion_btle.tion] Retry limit (1) exceeded for _try_connect((<tion_btle.lite.TionLite object at 0x7fe15b48c3a0>,), {})
2022-09-30 21:39:55.728 CRITICAL (MainThread) [custom_components.ha_tion_btle] Got exception
2022-09-30 21:39:55.729 CRITICAL (MainThread) [custom_components.ha_tion_btle] Will delay next check
2022-09-30 21:39:55.731 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Бризер гостиная' for ha_tion_btle integration not ready yet: MaxTriesExceededError; Retrying in background
2022-09-30 21:41:04.572 WARNING (MainThread) [bleak.backends.bluezdbus.client] Failed to cancel connection (/org/bluez/hci0/dev_D5_66_95_E5_3D_8C):
2022-09-30 21:41:04.573 WARNING (MainThread) [tion_btle.tion] Got exception: [org.bluez.Error.Failed] le-connection-abort-by-local. Will try again
2022-09-30 21:41:53.647 WARNING (MainThread) [bleak.backends.bluezdbus.client] Failed to cancel connection (/org/bluez/hci0/dev_CA_8A_87_2A_88_9D):
2022-09-30 21:41:53.649 WARNING (MainThread) [tion_btle.tion] Got exception: [org.bluez.Error.Failed] le-connection-abort-by-local. Will try again
2022-09-30 21:41:56.189 WARNING (MainThread) [bleak.backends.bluezdbus.client] Failed to cancel connection (/org/bluez/hci0/dev_CA_8A_87_2A_88_9D):
2022-09-30 21:41:56.189 WARNING (MainThread) [tion_btle.tion] Got exception: [org.bluez.Error.Failed] le-connection-abort-by-local. Will not try again
2022-09-30 21:41:58.192 CRITICAL (MainThread) [tion_btle.tion] Retry limit (1) exceeded for _try_connect((<tion_btle.lite.TionLite object at 0x7fe15b4071c0>,), {})
2022-09-30 21:41:58.195 CRITICAL (MainThread) [custom_components.ha_tion_btle] Got exception
2022-09-30 21:41:58.198 CRITICAL (MainThread) [custom_components.ha_tion_btle] Will delay next check
2022-09-30 21:41:58.201 ERROR (MainThread) [custom_components.ha_tion_btle] Error fetching Бризер спальня data: MaxTriesExceededError
2022-09-30 21:42:17.042 WARNING (MainThread) [tion_btle.tion] Got exception [org.bluez.Error.Failed] Operation failed with ATT error: 0x0e (Unlikely Error) while enabling notifications!
2022-09-30 21:42:17.045 CRITICAL (MainThread) [custom_components.ha_tion_btle] response={}, e=BleakDBusError('org.bluez.Error.Failed', 'Operation failed with ATT error: 0x0e')
2022-09-30 21:42:17.047 ERROR (MainThread) [custom_components.ha_tion_btle] Unexpected error fetching Бризер детская data: [org.bluez.Error.Failed] Operation failed with ATT error: 0x0e (Unlikely Error)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 205, in _async_refresh
    self.data = await self._async_update_data()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 164, in _async_update_data
    return await self.update_method()
  File "/config/custom_components/ha_tion_btle/__init__.py", line 124, in async_update_state
    raise e
  File "/config/custom_components/ha_tion_btle/__init__.py", line 114, in async_update_state
    response = await self.__tion.get()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 209, in get
    await self.get_state_from_breezer()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 189, in get_state_from_breezer
    await self.connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 509, in connect
    await self._connect()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 309, in _connect
    await self._enable_notifications()
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 341, in _enable_notifications
    raise e
  File "/usr/local/lib/python3.10/site-packages/tion_btle/tion.py", line 338, in _enable_notifications
    await self._btle.start_notify(self.uuid_notify, self._delegation.handleNotification)
  File "/usr/local/lib/python3.10/site-packages/bleak/backends/bluezdbus/client.py", line 851, in start_notify
    assert_reply(reply)
  File "/usr/local/lib/python3.10/site-packages/bleak/backends/bluezdbus/utils.py", line 22, in assert_reply
    raise BleakDBusError(reply.error_name, reply.body)
bleak.exc.BleakDBusError: [org.bluez.Error.Failed] Operation failed with ATT error: 0x0e (Unlikely Error)

Если после старта с активным слушанием включить пассивное, то бризеры остаются управляемыми, и даже отвечают за вменяемое время. Продолжаю собирать статистику.
Если в врубить дебаг bluetooth подсистемы, то логи засираются с приличной скоростью.

@IATkachenko
Copy link
Contributor

Угу. Там от bleak очень много шума.
Я некоторые компоненты bleak, которые сильно шумят бесполезным выключаю в info.

    bleak.backends.bluezdbus.manager: info

Пассивный режим -- вроде фишка какого-то ближайшего обновления HA. Возможно он там штатно будет.
Но с ним, действительно, есть неприятность: чтобы найти бризер нужно чтобы бризер сам вышел в эфир, а не ответил на запрос "есть кто живой?".

@UnnamedHero
Copy link
Author

Тестирую 2022.10.3 и 4.1.4, если сутки проработает стабильно - будет успех.

@IATkachenko
Copy link
Contributor

Не проработает.
У меня отваливается часов через 6-12: bleak зависает в clean_all() на стадии дисконекта.
Подумываю о настрйоке "поддерживать постоянное содинение с бризером"...

@UnnamedHero
Copy link
Author

Шаман, однако. И правда, не работает. Бризеры отваливаются независимо друг от друга. Один может управляться, второй отвалится. Пока что создал триггер, который будет перезапускать HA раз в три часа.

@IATkachenko
Copy link
Contributor
IATkachenko commented Oct 13, 2022

Я где-то выкладывал скрипт, который ничего не делает, но если его вызвать -- все чинится без перезапуска.

import asyncio
#import right your model!!!
from tion_btle.s3 import TionS3 as Breezer

async def main():
    t = Breezer("put_MAC_here")
    print(await t.get())

asyncio.run(main())

У меня он в cron'e гоняется.

@UnnamedHero
Copy link
Author

Констатирую, что перезапуск HA через триггер не решает проблему, эффект очень нестабилен. Беру сутки на тест питоновского скрипта.

@Unnam
9E88
edHero
Copy link
Author

По результатам наблюдений выявил, что один из трёх бризеров "отваливается" и перестаёт реагировать на команды. Это самый дальний от приёмника. Натравил на него питоновский скрипт, и все накопившиеся команды улетели на бризер.

@IATkachenko
Copy link
Contributor

В целом -- ожидаемое поведение.
Когда updater зависает в стадии дисконекта, команды копятся где-то в районе буфера bleak, потому что connect он как-то проглатывает, write работает, но на сам бризер bleak ничего не отсылает.

@UnnamedHero
Copy link
Author

У меня он в cron'e гоняется.

А как часто он запускается?
Я поставил раз в час для самого дальнего бризера, но как оказалось это слишком и устройство перестало отвечать. Пока что поставлю раз в сутки. но по ощущениям дальний бризер примерно раз в 6 часов теряет связь. Ближний ещё ни разу не отвалился, средний отваливался пару раз.

@IATkachenko
Copy link
Contributor

У меня каждые 4 часа запускается.
Но скрипт просто читает данные, как это делает HA. Он не должен как-то ухудшать состояние.

@UnnamedHero
Copy link
Author

У меня каждые 4 часа запускается.
Но скрипт просто читает данные, как это делает HA. Он не должен как-то ухудшать состояние.

Скорее всего мой косяк. Я его доработал, чтобы в случае отвала ещё раз запускался, но допустил ошибку. Скорее всего скрипт просто заспамил бризер.

@UnnamedHero
Copy link
Author

Отключил пассивное слушание в HA, каждые четыре часа в кроне программно перегружаю USB адаптер
sudo usb_modeswitch -v 0x0bda -p 0x8771 --reset-usb
и через внутреннюю реализацию перезапускаю сам HA.
Без перезапуска HA не работает. Оно в какой-то момент перестаёт реагировать на команды для определённого бризера. В пассивном режиме не вышло стабильной работы.
Питоновский скрипт при определённых условиях уходит в вечное ожидание.

@UnnamedHero
Copy link
Author
UnnamedHero commented Oct 24, 2022

Беру свои слова обратно. Питоновский скрипт чинит соединение с бризером лучше. Единственный минус - может свалиться в

DEBUG:bleak.backends.bluezdbus.client:already disconnected (/org/bluez/hci0/dev_DF_6A_B6_9B_0F_CC)
WARNING:tion_btle.tion:Got exception: [org.bluez.Error.Failed] le-connection-abort-by-local. Will not try again
CRITICAL:tion_btle.tion:Retry limit (1) exceeded for _try_connect((<tion_btle.lite.TionLite object at 0x7f93037c7190>,), {})
DEBUG:tion_btle.tion:Disconnecting. self.connection_status='disc'.
DEBUG:tion_btle.tion:_disconnect done. self.connection_status='disc'
Traceback (most recent call last):
  File "/opt/ha/breezer.py", line 60, in <module>
    asyncio.run(main(sys.argv[1:]))
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/opt/ha/breezer.py", line 49, in main
    print(await breezer.get())
  File "/usr/local/lib/python3.10/dist-packages/tion_btle/tion.py", line 209, in get
    await self.get_state_from_breezer()
  File "/usr/local/lib/python3.10/dist-packages/tion_btle/tion.py", line 189, in get_state_from_breezer
    await self.connect()
  File "/usr/local/lib/python3.10/dist-packages/tion_btle/tion.py", line 509, in connect
    await self._connect()
  File "/usr/local/lib/python3.10/dist-packages/tion_btle/tion.py", line 303, in _connect
    await self._try_connect()
  File "/usr/local/lib/python3.10/dist-packages/tion_btle/tion.py", line 46, in wrapper
    raise MaxTriesExceededError
tion_btle.tion.MaxTriesExceededError

@IATkachenko
Copy link
Contributor

Он его не то чтобы чинит: он перезапускает все то что bleak делает при дисконекте и это возвращает bleak из комы.
Там можно даже get() не делать. Просто connect()-disconnect().

@UnnamedHero
Copy link
Author

Пришёл мне "рекомендованный" адаптер UGREEN CM390. Работает так же, как и старый адаптер, отваливается с той же периодичностью. Пробую связку из пассивного режима, сброса адаптера раз в 6 часов, и запуск питоновского скрипта на коннект-дисконнект в двум бризерам раз в 4 часа.

@UnnamedHero
Copy link
Author

Опишу свой костыль, который более-менее автономно работает. Итак. все команды от рута. Раз в час программно сбрасываю USB BT адаптер
usb_modeswitch -v 0x0bda -p 0x8771 --reset-usb
в параметрах -v и -p указываю параметры моего адаптера. Беру их из

lsusb
Bus 004 Device 002: ID 0bda:8771 Realtek Semiconductor Corp. Bluetooth Radio

Иногда после такого насилия адаптер отваливается полностью. Происходит примерно раз в двое суток.
Перегружаю программно usb-контентратор на материнской плате.
команда

echo -n '0000:00:12.0' | tee /sys/bus/pci/drivers/ohci-pci/unbind && echo -n '0000:00:12.0' | tee /sys/bus/pci/drivers/ohci-pci/bind

Как найти номер хаба usb '0000:00:12.0.
даём lsusb -v -t
ищем знакомые vendor id, у меня это 0bda

/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
    ID 1d6b:0001 Linux Foundation 1.1 root hub
    |__ Port 3: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
        ID 0bda:8771 Realtek Semiconductor Corp.

Видно, что оно входит в root hub 1d6b:0001
даём команду

lsusb -v

получаем длинную портянку, в ней ищем 1d6b:0001 (у многих графических эмуляторов терминала есть поиск по тексту).

Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0001 1.1 root hub
  bcdDevice            5.19
  iManufacturer           3 Linux 5.19.0-23-generic ohci_hcd
  iProduct                2 OHCI PCI host controller
  iSerial                 1 0000:00:12.0

Наше поле - iSerial. Адрес хаба 0000:00:12.0

Я это всё пихнул в крон от рута.

15 */1 * * * usb_modeswitch -v 0x0bda -p 0x8771 --reset-usb
30 */2 * * * /opt/ha/breezer.py -b <breezer mac1>
40 */1 * * * /opt/ha/breezer.py -b <breezer mac2>
50 */12 * * * /opt/ha/breezer.py -b <breezer mac3>
01 0 */2 * * echo -n '0000:00:12.0' | tee /sys/bus/pci/drivers/ohci-pci/unbind && echo -n '0000:00:12.0' | tee /sys/bus/pci/drivers/ohci-pci/bind

@UnnamedHero
Copy link
Author
UnnamedHero commented Nov 7, 2022

@IATkachenko может, пора закрыть этот баг? В целом, изначальная проблема решилась. А проблема стабильности - это уже ближе к философии.

@IATkachenko
Copy link
Contributor

Я примерно сразу это за баг особо не держал... В обсуждения перекину сейчас, что б не терялось.

@TionAPI TionAPI locked and limited conversation to collaborators Nov 7, 2022
@IATkachenko IATkachenko converted this issue into discussion #119 Nov 7, 2022

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
Bluetooth BT related bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants
0