TionAPI / tion_python

Python module for Tion
GNU Lesser General Public License v3.0
64 stars 9 forks source link

Pairing не сохраняется #19

Closed timhok closed 3 years ago

timhok commented 3 years ago

Версия модуля: 1.1.2 Модель бризера: S3 Версия прошивки (если известна): 003C

Описание проблемы

Во время спаривания, и само спаривание и остальные функции (например, get) работают. Как только бризер перестает мигать индикатором функции не работают.

Centos 7 Python 3.6 bluez 5.44-7.el7

Порядок действий, которые приводят к проявлению проблемы:

Зажимаю кнопку, начинает мигать индикатор Запускаю пейринг:

[root@lxbox tion-server]# python3 pair.py F3:F7:98:E7:B8:7C
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:Connecting
DEBUG:tion_btle.tion:Notifications was not requested
DEBUG:tion_btle.tion:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['success']}
DEBUG:tion_btle.tion:success
DEBUG:tion_btle.tion:Device-specific pairing ...
DEBUG:tion_btle.s3:Sending pair command
DEBUG:tion_btle.tion:Doing _try_write. Attempt 1/3
DEBUG:tion_btle.tion:Writing 3d0501000000000000000000000000000000005a to 6e400002-b5a3-f393-e0a9-e50e24dcca9e
DEBUG:tion_btle.s3:Done!
DEBUG:tion_btle.tion:Device pair is done
DEBUG:tion_btle.tion:disconnected

Параллельно в bluetoothctl:

[NEW] Controller 5C:F3:70:69:52:0D lxbox [default]
[NEW] Device F3:F7:98:E7:B8:7C Tion Breezer 3S
[CHG] Device F3:F7:98:E7:B8:7C Connected: no
[DEL] Device F3:F7:98:E7:B8:7C Tion Breezer 3S

Получаю данные:

[root@lxbox tion]# python3 test.py F3:F7:98:E7:B8:7C
DEBUG:tion_btle.tion:Connecting
DEBUG:tion_btle.tion:Enabling notification
DEBUG:tion_btle.tion:Notify handler is 11
DEBUG:tion_btle.tion:Will write b'\x01\x00' to 12 handle
DEBUG:tion_btle.tion:Result is {'rsp': ['wr']}
DEBUG:tion_btle.tion:Delegation enabled
DEBUG:tion_btle.tion:First read done. Data is b3
DEBUG:tion_btle.tion:enable_notification is done
DEBUG:tion_btle.tion:Doing _try_write. Attempt 1/3
DEBUG:tion_btle.tion:Writing 3d0100000000000000000000000000000000005a to 6e400002-b5a3-f393-e0a9-e50e24dcca9e
DEBUG:tion_btle.tion:Got data in 11 response b31022008a000505030501130b002d1d003c005a
DEBUG:tion_btle.s3:Data is b31022008a000505030501130b002d1d003c005a
{'state': 'on', 'heater': 'off', 'heating': 'off', 'sound': 'on', 'mode': 'outside', 'out_temp': 5, 'in_temp': 3, 'heater_temp': 0, 'fan_speed': 2, 'filter_remain': 261, 'time': '19:11', 'request_error_code': 0, 'model': 'S3', 'code': 200, 'timer': 'off', 'productivity': 45, 'fw_version': '003c'}

Параллельно в bluetoothctl:

[NEW] Device F3:F7:98:E7:B8:7C Tion Breezer 3S
[CHG] Device F3:F7:98:E7:B8:7C Connected: no
[DEL] Device F3:F7:98:E7:B8:7C Tion Breezer 3S

После того как индикатор перестал мигать, пытаюсь получить данные:

[root@lxbox tion]# python3 test.py F3:F7:98:E7:B8:7C
DEBUG:tion_btle.tion:Connecting
WARNING:tion_btle.tion:Got BTLEDisconnectError:Failed to connect to peripheral F3:F7:98:E7:B8:7C, addr type: random
DEBUG:tion_btle.tion:Will try again.
DEBUG:tion_btle.tion:Connecting
WARNING:tion_btle.tion:Got BTLEDisconnectError:Failed to connect to peripheral F3:F7:98:E7:B8:7C, addr type: random
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/tion_btle/tion.py", line 302, in _connect
    self._btle.connect(self.mac, btle.ADDR_TYPE_RANDOM)
  File "/usr/lib/python3.6/site-packages/bluepy/btle.py", line 445, in connect
    self._connect(addr, addrType, iface)
  File "/usr/lib/python3.6/site-packages/bluepy/btle.py", line 439, in _connect
    raise BTLEDisconnectError("Failed to connect to peripheral %s, addr type: %s" % (addr, addrType), rsp)
bluepy.btle.BTLEDisconnectError: Failed to connect to peripheral F3:F7:98:E7:B8:7C, addr type: random

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    print(s3.get())
  File "/usr/local/lib/python3.6/site-packages/tion_btle/tion.py", line 218, in get
    self._connect()
  File "/usr/local/lib/python3.6/site-packages/tion_btle/tion.py", line 319, in _connect
    self._connect(need_notifications)
  File "/usr/local/lib/python3.6/site-packages/tion_btle/tion.py", line 321, in _connect
    raise e
  File "/usr/local/lib/python3.6/site-packages/tion_btle/tion.py", line 302, in _connect
    self._btle.connect(self.mac, btle.ADDR_TYPE_RANDOM)
  File "/usr/lib/python3.6/site-packages/bluepy/btle.py", line 445, in connect
    self._connect(addr, addrType, iface)
  File "/usr/lib/python3.6/site-packages/bluepy/btle.py", line 439, in _connect
    raise BTLEDisconnectError("Failed to connect to peripheral %s, addr type: %s" % (addr, addrType), rsp)
bluepy.btle.BTLEDisconnectError: Failed to connect to peripheral F3:F7:98:E7:B8:7C, addr type: random

Параллельно в bluetoothctl:

[NEW] Device F3:F7:98:E7:B8:7C Tion Breezer 3S
[CHG] Device F3:F7:98:E7:B8:7C Connected: no
[DEL] Device F3:F7:98:E7:B8:7C Tion Breezer 3S
[NEW] Device F3:F7:98:E7:B8:7C Tion Breezer 3S
[CHG] Device F3:F7:98:E7:B8:7C Connected: no
[DEL] Device F3:F7:98:E7:B8:7C Tion Breezer 3S

Спаренных девайсов нет:

[bluetooth]# paired-devices
[bluetooth]# devices
[bluetooth]#
IATkachenko commented 3 years ago

Те не проходит BT pairing... Скрипт запускается от рута? Если не от рута, то тот пользователь, от которого он запущен может выполнять сопряжение BT устройств?

У проекта интеграции в HomeAssistant, на основе этого модуля, есть wiki про BT. Может быть там получится почерпнуть полезной информации.

timhok commented 3 years ago

Спасибо! Сработало после шагов из статьи:

  • перезапустить bluetooth (systemctl restatr bluetooth)
  • перевести бризер в режим сопряжения
  • запустить bluetoothctl и выполнить:
  • power on
  • agent on

Потом запустил pair.py и вышел из bluetoothctl (не прописывая там pair)

Кстати в "systemctl restatr bluetooth" допущена ошибка :)