TionAPI / HA-tion

Home assistant integration for Tion breezers
Apache License 2.0
70 stars 5 forks source link

v1.8.1 перестал подключаться к Tion Lite #51

Closed UnnamedHero closed 3 years ago

UnnamedHero commented 3 years ago

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

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

Сопряжение проходит, но добавить в HA бризер не получается Единственное, что расходится с faq - запуск bluetooth с --compat больше не порождает /var/run/sdp (ядро 5.11.0, bluez 5.56-0ubuntu4.1) Раньше всё работало. Единственное, что менялось - обновлялась ОС.

Перед сопряжением сношу бризер из системы через bluetoothctl Сбрасываю сам бризер кнопками.

При сопрядежении из HA в консоли bluetoothctl задаётся вопрос - pair? Если успеть напечатать yes, то сопряжение проходит, но девайс не добавляется. Если сопрягаться из bluetoothctl, то всё тоже самое. Вот логи из теста, логи с попыткой сопряжения - ниже.

Debug-log из TionAPI/tion_python/tests/lite.py

python3 ./lite.py ca:8a:87:2a:88:9d
DEBUG:tion_btle.tion:Connecting
WARNING:tion_btle.tion:Got BTLEDisconnectError:Failed to connect to peripheral ca:8a:87:2a:88:9d, addr type: random
DEBUG:tion_btle.tion:Will try again.
DEBUG:tion_btle.tion:Connecting
DEBUG:tion_btle.tion:Enabling notification
DEBUG:tion_btle.tion:Notify handler is 18
DEBUG:tion_btle.tion:Will write b'\x01\x00' to 19 handle
DEBUG:tion_btle.tion:Result is {'rsp': ['wr']}
DEBUG:tion_btle.tion:Delegation enabled
DEBUG:tion_btle.tion:First read done. Data is c000000000000a14190204060600008f97
DEBUG:tion_btle.tion:enable_notification is done
DEBUG:tion_btle.tion:Doing _try_write. Attempt 1/3
DEBUG:tion_btle.tion:Writing 8010003a0232120dd71f8f48d3c31abbaa to 98f00002-3788-83ea-453e-f52244709ddb
DEBUG:tion_btle.light_family:Collecting data
DEBUG:tion_btle.light_family:Waiting too long for data
DEBUG:tion_btle.tion:Disabling notifications
DEBUG:tion_btle.tion:Notify handler is 18
DEBUG:tion_btle.tion:Will write b'\x00\x00' to 19 handle
DEBUG:tion_btle.tion:Result is {'rsp': ['wr']}
DEBUG:tion_btle.tion:disable_notification is done
Traceback (most recent call last):
  File "/root/./lite.py", line 18, in <module>
    result = device.get()
  File "/usr/local/lib/python3.9/dist-packages/tion_btle/tion.py", line 223, in get
    response = self._get_data_from_breezer()
  File "/usr/local/lib/python3.9/dist-packages/tion_btle/light_family.py", line 137, in _get_data_from_breezer
    raise TionException("Lite _get_data_from_breezer", "Could not get breezer state")
tion_btle.tion.TionException: ('Lite _get_data_from_breezer', 'Could not get breezer state')

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

Дополнительное описание

Вот лог, если сопряжение делать из HA

021-06-20 11:17:54 DEBUG (MainThread) [tion_btle.tion] Pairing
2021-06-20 11:17:54 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:17:54 WARNING (MainThread) [tion_btle.tion] Got BTLEDisconnectError:Failed to connect to peripheral d5:66:95:e5:3d:8c, addr type: random
2021-06-20 11:17:54 DEBUG (MainThread) [tion_btle.tion] Will try again.
2021-06-20 11:17:56 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] Notifications was not requested
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] Connected. BT pairing ...
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [19], 'emsg': ['Already Paired']}
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] Already Paired
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] Device-specific pairing ...
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] Device pair is done
2021-06-20 11:17:57 DEBUG (MainThread) [tion_btle.tion] disconnected
2021-06-20 11:18:00 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:18:09 WARNING (MainThread) [tion_btle.tion] Got BTLEDisconnectError:Failed to connect to peripheral d5:66:95:e5:3d:8c, addr type: random
2021-06-20 11:18:09 DEBUG (MainThread) [tion_btle.tion] Will try again.
2021-06-20 11:18:11 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:18:12 DEBUG (MainThread) [tion_btle.tion] Enabling notification
2021-06-20 11:18:12 DEBUG (MainThread) [tion_btle.tion] Notify handler is 18
2021-06-20 11:18:12 DEBUG (MainThread) [tion_btle.tion] Will write b'\x01\x00' to 19 handle
2021-06-20 11:18:12 DEBUG (MainThread) [tion_btle.tion] Result is {'rsp': ['wr']}
2021-06-20 11:18:12 DEBUG (MainThread) [tion_btle.tion] Delegation enabled
2021-06-20 11:18:13 DEBUG (MainThread) [tion_btle.tion] First read done. Data is c000000000000a1419020406060000ca9d
2021-06-20 11:18:13 DEBUG (MainThread) [tion_btle.tion] enable_notification is done
2021-06-20 11:18:13 DEBUG (MainThread) [tion_btle.tion] Doing _try_write. Attempt 1/3
2021-06-20 11:18:13 DEBUG (MainThread) [tion_btle.tion] Writing 8010003a0232120dd71f8f48d3c31abbaa to 98f00002-3788-83ea-453e-f52244709ddb
2021-06-20 11:18:25 DEBUG (MainThread) [tion_btle.tion] Disabling notifications
2021-06-20 11:18:25 DEBUG (MainThread) [tion_btle.tion] Notify handler is 18
2021-06-20 11:18:25 DEBUG (MainThread) [tion_btle.tion] Will write b'\x00\x00' to 19 handle
2021-06-20 11:18:25 ERROR (MainThread) [custom_components.tion.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 {}; BTLEException: Error from bluepy-helper (badstate)

Либо такое

2021-06-20 11:24:03 DEBUG (MainThread) [custom_components.tion.config_flow] Showing pair info
2021-06-20 11:24:04 DEBUG (MainThread) [custom_components.tion.config_flow] Real pairing step
2021-06-20 11:24:04 DEBUG (MainThread) [custom_components.tion.config_flow] {'model': 'Lite', 'name': 'Tion Breezer', 'mac': 'd5:66:95:e5:3d:8c', 'keep_alive': 60, 'away_temp': 15, 'pair': True}
2021-06-20 11:24:04 DEBUG (MainThread) [tion_btle.tion] Pairing
2021-06-20 11:24:04 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:24:09 WARNING (MainThread) [tion_btle.tion] Got BTLEDisconnectError:Failed to connect to peripheral d5:66:95:e5:3d:8c, addr type: random
2021-06-20 11:24:09 DEBUG (MainThread) [tion_btle.tion] Will try again.
2021-06-20 11:24:11 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:24:12 DEBUG (MainThread) [tion_btle.tion] Notifications was not requested
2021-06-20 11:24:12 DEBUG (MainThread) [tion_btle.tion] Connected. BT pairing ...
2021-06-20 11:24:23 DEBUG (MainThread) [tion_btle.tion] Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['success']}
2021-06-20 11:24:23 DEBUG (MainThread) [tion_btle.tion] success
2021-06-20 11:24:23 DEBUG (MainThread) [tion_btle.tion] Device-specific pairing ...
2021-06-20 11:24:23 DEBUG (MainThread) [tion_btle.tion] Device pair is done
2021-06-20 11:24:23 DEBUG (MainThread) [tion_btle.tion] disconnected
2021-06-20 11:24:26 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Enabling notification
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Notify handler is 18
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Will write b'\x01\x00' to 19 handle
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Result is {'rsp': ['wr']}
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Delegation enabled
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] First read done. Data is c000000000000a141902040606000072bd
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] enable_notification is done
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Doing _try_write. Attempt 1/3
2021-06-20 11:24:27 DEBUG (MainThread) [tion_btle.tion] Writing 8010003a0232120dd71f8f48d3c31abbaa to 98f00002-3788-83ea-453e-f52244709ddb
2021-06-20 11:24:41 ERROR (MainThread) [custom_components.tion.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 {}; BTLEDisconnectError: Device disconnected
2021-06-20 11:24:53 DEBUG (MainThread) [custom_components.tion.config_flow] Pair failed. Returning to first step
2021-06-20 11:24:55 DEBUG (MainThread) [custom_components.tion.config_flow] Going create entry with name Tion Breezer
2021-06-20 11:24:55 DEBUG (MainThread) [custom_components.tion.config_flow] {'model': 'Lite', 'name': 'Tion Breezer', 'mac': 'd5:66:95:e5:3d:8c', 'keep_alive': 60, 'away_temp': 15, 'pair': False}
2021-06-20 11:24:55 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:24:59 WARNING (MainThread) [tion_btle.tion] Got BTLEDisconnectError:Failed to connect to peripheral d5:66:95:e5:3d:8c, addr type: random
2021-06-20 11:24:59 DEBUG (MainThread) [tion_btle.tion] Will try again.
2021-06-20 11:25:01 DEBUG (MainThread) [tion_btle.tion] Connecting
2021-06-20 11:25:02 WARNING (MainThread) [tion_btle.tion] Got BTLEDisconnectError:Failed to connect to peripheral d5:66:95:e5:3d:8c, addr type: random
2021-06-20 11:25:02 ERROR (MainThread) [custom_components.tion.config_flow] Could not get data from breezer. result is {}, error: Failed to connect to peripheral d5:66:95:e5:3d:8c, addr type: random
IATkachenko commented 3 years ago

Шаг сопряжения, судя по логам, вам не требутся. "Раньше всё работало" -- означает ли что до обновления OS версия 1.8.1 работала корректно?

Собственно tests/lite.py показывает чт опроисходит: бризер ничего не посылает в ответ на зпрос данных, но при это BT-соединение не рвется.

UnnamedHero commented 3 years ago

Да, до обновения ОС была возможность добавить бризер. Но версия компонента была 1.7.2. После этого у меня началась эпопея с отвалом компонента из-за введения версии #48 Версия обновилась и вот я пытаюсь добавить свои бризеры Я пробовал несколько подходов - сопряжение через HA (с подверждением в консоли bluetoothctl), сопряжение непосредственно через консоль bluetoothctl, добавить бризер в HA после сопряжения. Но в логах - не могу получить state Хочу понять, где сломалось - bluetooth в убунте или что-то на стороне HA.

IATkachenko commented 3 years ago

Сейчас посмотрю нет ли между 1.7.2 и 1.8.1 (не зря же я версии использую) чего-то что могло повлиять. Я помню что похожая пробелма с Lite была...

IATkachenko commented 3 years ago

Еще раз: сопряжение сейчас не нужно (галочку при добавлении интеграции можно не ставить). Компонент успешно к бризеру подключается.

Принципиальных отличий между версиями не вижу, но, тем не менее, можете откатиться до 1.7.2 / 1.7.3 поправить манифест, если нужно, и проверить работоспособность? В 1.8 была добавлена поддержка 4S и частично переписан код модуля, отвечающий за работу Lite, поскольку с 4S они работают по одному принципу.

IATkachenko commented 3 years ago

Да, для тестов лучше использовать tests/lite.py

UnnamedHero commented 3 years ago

На 1.7.2 всё работает

IATkachenko commented 3 years ago

Понятно... Спасибо. Буду значит пытаться понять что поменялось для Lite.

IATkachenko commented 3 years ago

А вы можете для версии 1.8.1 отредактировать tion_btle/tion.py? 371 строку (внутри функции def __write_to_notify_handle) нужно привести к виду:

result = self._btle.writeCharacteristic(notify_handle, data, withResponse=True)

Это -- похоже единственно отличие в части BT стека.

UnnamedHero commented 3 years ago

Да, замена False на True в либе tion_btle помогло. Всё работает.

IATkachenko commented 3 years ago

Отлично, большое спасибо за тесты.

Тионы не перестают меня удивлять: бризер 4S, очень похожий на Lite, с точки зрения протокола, с withResponse=True работать отказывается вообще.

В ближайшее время будет fix-релиз.

IATkachenko commented 3 years ago

Исправлено в v1.8.2.