Closed crimean-celica closed 3 years ago
Спасибо за подробную диагностику. Notification не приходит. Вот тут https://github.com/TionAPI/tion_python/commit/047158d2ff26dcc1b96c060edbddee28250601d1 был упрощен механизм подписки на уведомления (и на моем бризере проблем не возникает). Попробуйте откатить эту правку (если с этим возникнут трудности, завтра сделаю тестовый релиз). Если не поможет, то, пожалуйста, добавьте в /usr/local/lib/python3.7/dist-packages/tion_btle/s3.py в _get_data_from_breezer в ветке else немного дебага:
def _get_data_from_breezer(self) -> bytearray:
...
else:
_LOGGER.debug("Waiting too long for data")
result = self.notify.read()
_LOGGER.debug(result)
return result
Кстати, про сопряжение вопрос: обычного s3.pair() не хватило или его от рута даже не запускали? Пользователь от которого запускали в группе пользователей bluetooth состоял? (вопрос в связи с тем что модуль используется в компоненте для Home Assistant и там нужно как-то реализовывать процедуру сопряжения. У некоторых, кто пользуется HA сопряжение прошло корректно без привлечения bluetoothctl. Правда я не знаю: может быть HA запущен от рута)
setcap нужно настроить, если HA не от рута запущен. Не уверен, нужно ли на bluepy-helper права.
sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\``
sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
sudo setcap 'cap_net_raw,cap_net_admin+eip' /usr/local/lib/python3/site-packages/bluepy/bluepy-helper
@crimean-celica, попробуйте, пожалуйста tion-btle==1.1.2a1
. В этой версии подозрительный коммит откачен.
@stsergo, HA говорит что helper не нужен
sudo apt-get install libcap2-bin
sudo setcap 'cap_net_raw,cap_net_admin+eip' $(readlink -f $(which python3))
sudo setcap 'cap_net_raw+ep' $(readlink -f $(which hcitool))
Кстати, про сопряжение вопрос: обычного s3.pair() не хватило или его от рута даже не запускали? Пользователь от которого запускали в группе пользователей bluetooth состоял?
я работаю от имени "pi" (лень, да). он в указанной группе не состоял (уже добавил). с сопряжением были проблемы, пробовал и так и так в итоге, если не путаю, от рута прошло (что теперь выглядит логично)
попробуйте, пожалуйста tion-btle==1.1.2a1.
не нашел способа взять указанную версию. если что, "я не настоящий сварщик", я из другой песочницы (базы данных). буду признателен, если "ткнете пальцем" (ссылочку, скрин или более подробное описание как взять)
@crimean-celica, pip3 install tion-btle==1.1.2a1
или сырцы с PyPi забрать https://files.pythonhosted.org/packages/18/39/7c6a58b6668f7c6a34217ac780615bac5788420a2484c17e7f8b64f29c1d/tion_btle-1.1.2a1.tar.gz распаковать и заменить файлы из папки модуля в /usr/local/lib/python3.7/dist-packages/tion_btle
заработало. но нестабильно. могу получить "чистое" выполнение:
pi@Mini:~/projects $ python3 p1.py
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 b31023140b001416040e011210003c26003c005a
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 b31023140b001416040e011211003c26003c005a
DEBUG:tion_btle.s3:Data is b31023140b001416040e011211003c26003c005a
{'state': 'on', 'heater': 'on', 'heating': 'on', 'sound': 'on', 'mode': 'outside', 'out_temp': 22, 'in_temp': 4, 'heater_temp': 20, 'fan_speed': 3, 'filter_remain': 270, 'time': '18:17', 'request_error_code': 0, 'model': 'S3', 'code': 200, 'timer': 'off', 'productivity': 60, 'fw_version': '003c'}
но чаще получаю такое:
pi@Mini:~/projects $ python3 p1.py
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
WARNING:tion_btle.tion:Got Device disconnected exception
Traceback (most recent call last):
File "p1.py", line 9, in <module>
print(s3.get())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 217, in get
self._connect()
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 311, in _connect
raise e
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 307, in _connect
self._enable_notifications()
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 354, in _enable_notifications
result = self._btle.writeCharacteristic(notify_handle, setup_data, withResponse=True)
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 543, in writeCharacteristic
return self._getResp('wr')
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 407, in _getResp
resp = self._waitResp(wantType + ['ntfy', 'ind'], timeout)
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 362, in _waitResp
raise BTLEDisconnectError("Device disconnected", resp)
bluepy.btle.BTLEDisconnectError: Device disconnected
или даже так:
pi@Mini:~/projects $ python3 p1.py
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
WARNING:tion_btle.tion:Got exception '[Errno 32] Broken pipe' while first read, but it is OK and we may ignore it
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
WARNING:tion_btle.tion:Got exception while _try_write: [Errno 32] Broken pipe
DEBUG:tion_btle.tion:Doing _try_write. Attempt 2/3
DEBUG:tion_btle.tion:Writing 3d0100000000000000000000000000000000005a to 6e400002-b5a3-f393-e0a9-e50e24dcca9e
WARNING:tion_btle.tion:Got exception while _try_write: [Errno 32] Broken pipe
DEBUG:tion_btle.tion:Doing _try_write. Attempt 3/3
DEBUG:tion_btle.tion:Writing 3d0100000000000000000000000000000000005a to 6e400002-b5a3-f393-e0a9-e50e24dcca9e
WARNING:tion_btle.tion:Got exception while _try_write: [Errno 32] Broken pipe
Traceback (most recent call last):
File "p1.py", line 9, in <module>
print(s3.get())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 218, in get
response = self._get_data_from_breezer()
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/s3.py", line 68, in _get_data_from_breezer
self._do_action(self._try_write, request=self.get_status_command)
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 342, in _do_action
raise TionException(action.__name__, message)
tion_btle.tion.TionException: ('_try_write', 'Could not do _try_write')
Exception ignored in: <function Peripheral.__del__ at 0xb65e6810>
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 630, in __del__
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 453, in disconnect
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 305, in _writeCmd
BrokenPipeError: [Errno 32] Broken pipe
А на сколько удален бризер от той штуки, с которой управляете? В разных issue делали наблюдение что 3 метра и/или стена -- уже много.
малина рядом с телефоном. с телефона - уверенное управление. стена - в наличии. реальное расстояние - около 2 метров. успешных получений данных "подряд" у меня не бывает. через 1 ошибку - да. есть внешний BT модуль, если заведется - попробую с него.
Телефон не показатель от слова вообще. Кстати, закономерности нет в проблеме: условно, после двух неудач всегда нормальный запуск или после одного нормального всегда провал. Ошибки которые я вижу -- разрыв связи (причем при передаче данных в обе стороны). btmon, кстати, может что-нибудь еще подскажет/покажет.
Еще есть такая особенность, что бризер не любит частые дерганья (у меня уже на 30 секундных интервалах начинают проявляться проблемы, но редко).
А еще я не знаю как объясните bluepy использовать правильный адаптер -- возможно для теста придется отключать основной адаптер на малине.
пробую 1.1.2a1
малину положил в пределах прямой видимости от бризера
группы для пользователя, под которым пробую:
root@Mini:/home/pi/projects# groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev bluetooth spi i2c gpio
сопряжение без рута, неудачное:
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
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
WARNING:tion_btle.tion:Got exception 'Device disconnected' while first read, but it is OK and we may ignore it
DEBUG:tion_btle.tion:enable_notification is done
DEBUG:tion_btle.tion:Connected. BT pairing ...
CRITICAL:tion_btle.tion:Got exception while pair BTLEInternalError: Helper not started (did you call connect()?)
DEBUG:tion_btle.tion:disconnected
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 481, in pair
self._btle._writeCmd('pair' + '\n')
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 302, in _writeCmd
raise BTLEInternalError("Helper not started (did you call connect()?)")
bluepy.btle.BTLEInternalError: Helper not started (did you call connect()?)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "p2.py", line 9, in <module>
print(s3.pair())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 505, in pair
raise TionException('pair', f"{type(e).__name__}: {str(e)}")
tion_btle.tion.TionException: ('pair', 'BTLEInternalError: Helper not started (did you call connect()?)')
сопряжение под рутом, удачное:
pi@Mini:~/projects $ sudo -s
root@Mini:/home/pi/projects# python3 p2.py
DEBUG:tion_btle.tion:Pairing
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:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [19], 'emsg': ['Already Paired']}
DEBUG:tion_btle.tion:Already Paired
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
None
но! на самом деле отключение не происходит:
pi@Mini:~/projects $ bluetoothctl
Agent registered
[Tion Breezer 3S]# devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
понятно, что работы не будет, пока принудительно не отключился. после отключения - все ожидаемо:
[Tion Breezer 3S]# disconnect F1:5A:F4:6E:FB:62
Attempting to disconnect from F1:5A:F4:6E:FB:62
[CHG] Device F1:5A:F4:6E:FB:62 ServicesResolved: no
Successful disconnected
[CHG] Device F1:5A:F4:6E:FB:62 Connected: no
[bluetooth]# quit
pi@Mini:~/projects $ nano p1.py
pi@Mini:~/projects $ pi@Mini:~/projects $ python3 p1.py
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 b31022160b0016150467011528002d01003c005a
DEBUG:tion_btle.s3:Data is b31022160b0016150467011528002d01003c005a
{'state': 'on', 'heater': 'on', 'heating': 'on', 'sound': 'on', 'mode': 'outside', 'out_temp': 21, 'in_temp': 4, 'heater_temp': 22, 'fan_speed': 2, 'filter_remain': 359, 'time': '21:40', 'request_error_code': 0, 'model': 'S3', 'code': 200, 'timer': 'off', 'productivity': 45, 'fw_version': '003c'}
и повторные вызовы отрабатывают достаточно стабильно. то есть, таки да, расстояние решает. возможно, это можно обработать, так как удачные сеансы на большом удалении были. нечасто, но - были.
p.s.
внешний адаптер малина "видит", он "работает", но тионы через него "не живут". пробовал UGREEN 30524, разумеется, ставил его по умолчанию и запрещал встроенный. но - не пошло. в итоге, все описанные эксперименты делались с встроенным.
Значит обычной группы bluetooth не достаточно, как говорил @stsergo нужны, видимо, setcap.
Дисконнект у себя половлю -- это должно воспроизводиться.
Наличие caps можно проверить командой getcap:
getcap $(readlink -f $(which python3))
getcap $(readlink -f $(which hcitool))
@crimean-celica, нет, не воспроизводится.
Отключается 10 из 10. С задержкой в пару секунд, но отключается.
В 1.1.2a2
добавил побольше дебага в disconnect. Давайте смотреть что у вас происходит.
версии модулей:
pi@Mini:~/projects $ pip3 list
Package Version
------------- ---------
asn1crypto 0.24.0
bluepy 1.3.0
certifi 2018.8.24
chardet 3.0.4
cryptography 2.6.1
entrypoints 0.3
idna 2.6
keyring 17.1.1
keyrings.alt 3.1.1
pip 18.1
pycrypto 2.6.1
PyGObject 3.30.4
python-apt 1.8.4.2
pyxdg 0.25
requests 2.21.0
SecretStorage 2.3.1
setuptools 40.8.0
six 1.12.0
ssh-import-id 5.7
tion-btle 1.1.2a2
urllib3 1.24.1
wheel 0.32.3
добавил capabilities
pi@Mini:~/projects $ getcap $(readlink -f $(which python3))
/usr/bin/python3.7 = cap_net_admin,cap_net_raw+eip
pi@Mini:~/projects $ getcap $(readlink -f $(which hcitool))
/usr/bin/hcitool = cap_net_raw+ep
сопряжение идет без рута, но дает ошибку и все еще оставляет законнекченным.
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
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:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Unexpected response: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Got exception while pair TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
DEBUG:tion_btle.tion:disconnected
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 503, in pair
raise TionException('pair', rsp)
tion_btle.tion.TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "p2.py", line 9, in <module>
print(s3.pair())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 510, in pair
raise TionException('pair', f"{type(e).__name__}: {str(e)}")
tion_btle.tion.TionException: ('pair', "TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})")
pi@Mini:~/projects $ bluetoothctl
Agent registered
[Tion Breezer 3S]# quit
pi@Mini:~/projects $
получение данных (после disconnect) идет стабильно (устройства теперь рядом) сопрягать пытался несколько раз, стабильно получаю ошибку и подключенное устройство под рутом (tion-btle обновлена до 1.1.2a2) - ошибок сопряжения нет, устройство остается "connected":
root@Mini:/home/pi/projects# python3 p2.py
DEBUG:tion_btle.tion:Pairing
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:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [19], 'emsg': ['Already Paired']}
DEBUG:tion_btle.tion:Already Paired
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
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
root@Mini:/home/pi/projects# bluetoothctl
Agent registered
[Tion Breezer 3S]# quit
получение данных (после disconnect) идет без проблем
По поводу проблем не под рутом: у вас система не позволяет не руту сопрягать новые устройства. Вам примерно сюда
Под рутом, за исключением того что вы остаетесь подключенным, все идет правильно. И даже disconnect из bluepy вызывается. Почему соединение не разрывается я пока не понимаю... Хотя нет, понимаю.
Сейчас alpha-3 сделаю и проверим.
у вас система не позволяет не руту сопрягать новые устройства.
почему? выше в логе идет сопряжения от имени "pi" и после сопряжения сразу вызов "bluetoothctl" который показывает, что устройство сопряжено и подключено. p.s. если удобно и если есть смысл - можно попробовать skype/telegram/... для оперативной отладки. так-то у меня моя главная проблема уже решена - данные получаются стабильно, но я не против потратить еще времени, раз у меня стабильно воспроизводятся проблемы
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
Permission Denied -- правов не хватает на. И это явно не бризер нам говорит.
Устройство сопряжено, потому что до этого было успешное сопряжение от рута:
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [19], 'emsg': ['Already Paired']}
DEBUG:tion_btle.tion:Already Paired
Already Paired -- это как раз оно.
А висит соедние, как я сейчас думаю, потому что мы подписались на уведомления и тут же отключились. А нам пришло уведомление, которое мы не обработали и все дисциплинированно ждут когда же это случится.
tion-btle==1.1.2a3
, попробуйте, пожалуйста. Там pairing происходит без подписки на уведомления.
issue -- достаточно удобно. Все история в одном месте и это позволяет заниматься проблемой тогда, когда это удобно.
я просто покажу (это еще версия 2a2):
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
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:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Unexpected response: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Got exception while pair TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
DEBUG:tion_btle.tion:disconnected
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 503, in pair
raise TionException('pair', rsp)
tion_btle.tion.TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "p2.py", line 9, in <module>
print(s3.pair())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 510, in pair
raise TionException('pair', f"{type(e).__name__}: {str(e)}")
tion_btle.tion.TionException: ('pair', "TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})")
pi@Mini:~/projects $ bluetoothctl
Agent registered
[Tion Breezer 3S]#
обновил версию (2a3):
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was not requested
DEBUG:tion_btle.tion:Connected
DEBUG:tion_btle.tion:BT pairing ...
DEBUG:tion_btle.tion: Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:__bt_pair: could not pair! Permission denied. Check permissions at host
DEBUG:tion_btle.tion:BT pairing is done
DEBUG:tion_btle.tion:pair: disconnecting
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]#
оу. второй запуск, "подряд":
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was not requested
DEBUG:tion_btle.tion:Connected
DEBUG:tion_btle.tion:BT pairing ...
DEBUG:tion_btle.tion: Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:__bt_pair: could not pair! Permission denied. Check permissions at host
DEBUG:tion_btle.tion:BT pairing is done
DEBUG:tion_btle.tion:pair: disconnecting
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
pi@Mini:~/projects $ bluetoothctl
Agent registered
[CHG] Device F1:5A:F4:6E:FB:62 Connected: no
[DEL] Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
[bluetooth]# devices
[bluetooth]#
Видимо, ему не нравился exception во время обработки exception'a. Надо будет внимательно эту часть переработать.
Отлично, теперь и в случае проблем отключается правильно.
Как я понимаю, теперь у вас все работает корректно и стабильно. И, как только будет разрешена проблема с правами доступа к bluetooth, все заработает и от непривилегированного пользователя.
так оно и так работало для обычного пользователя. версия 2a2 (уже после реализации инструкции https://stackoverflow.com/questions/34599703/rfcomm-bluetooth-permission-denied-error-raspberry-pi)
под обычным пользователем сопрягается несмотря на ошибку и (после ручного отключения) отдает данные
tion-btle 1.1.2a2
urllib3 1.24.1
wheel 0.32.3
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
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:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Unexpected response: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Got exception while pair TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
DEBUG:tion_btle.tion:disconnected
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 503, in pair
raise TionException('pair', rsp)
tion_btle.tion.TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "p2.py", line 9, in <module>
print(s3.pair())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 510, in pair
raise TionException('pair', f"{type(e).__name__}: {str(e)}")
tion_btle.tion.TionException: ('pair', "TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})")
pi@Mini:~/projects $ bluetoothctl
Agent registered
[Tion Breezer 3S]# devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
[Tion Breezer 3S]# disconnect F1:5A:F4:6E:FB:62
Attempting to disconnect from F1:5A:F4:6E:FB:62
[CHG] Device F1:5A:F4:6E:FB:62 ServicesResolved: no
Successful disconnected
[CHG] Device F1:5A:F4:6E:FB:62 Connected: no
[bluetooth]# quit
получение данных:
pi@Mini:~/projects $ python3 p1.py
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 b31022160b001616046601122d002d02003c005a
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
DEBUG:tion_btle.s3:Data is b31022160b001616046601122d002d02003c005a
{'state': 'on', 'heater': 'on', 'heating': 'on', 'sound': 'on', 'mode': 'outside', 'out_temp': 22, 'in_temp': 4, 'heater_temp': 22, 'fan_speed': 2, 'filter_remain': 358, 'time': '18:45', 'request_error_code': 0, 'model': 'S3', 'code': 200, 'timer': 'off', 'productivity': 45, 'fw_version': '003c'}
pi@Mini:~/projects $
обновляю на 2a3, там все "хуже"
tion-btle 1.1.2a3
urllib3 1.24.1
wheel 0.32.3
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was not requested
DEBUG:tion_btle.tion:Connected
DEBUG:tion_btle.tion:BT pairing ...
DEBUG:tion_btle.tion: Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:__bt_pair: could not pair! Permission denied. Check permissions at host
DEBUG:tion_btle.tion:BT pairing is done
DEBUG:tion_btle.tion:pair: disconnecting
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $
то есть сопряжения нет. итого, 2a3 не сопрягается под обычным пользователем в отличие от 2a2
пробую 2a3 под рутом - работает. то есть в 2a3 сопряжение у меня работает только под рутом. а вот в 2a2 спокойно работает под обычным пользователем. и в обоих версиях нужно вручную отключаться после сопряжения (ну или, наверное, долго ждать отключения, не пробовал "долго" ждать)
tion-btle 1.1.2a3
urllib3 1.24.1
wheel 0.32.3
root@Mini:/home/pi/projects# bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
root@Mini:/home/pi/projects# python3 p2.py
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was not requested
DEBUG:tion_btle.tion:Connected
DEBUG:tion_btle.tion:BT pairing ...
DEBUG:tion_btle.tion: Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['success']}
DEBUG:tion_btle.tion:__bt_pair: success
DEBUG:tion_btle.tion:BT pairing is done
DEBUG:tion_btle.tion:pair: disconnecting
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
root@Mini:/home/pi/projects# bluetoothctl
Agent registered
[Tion Breezer 3S]# devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
[Tion Breezer 3S]# disconnect F1:5A:F4:6E:FB:62
Attempting to disconnect from F1:5A:F4:6E:FB:62
[CHG] Device F1:5A:F4:6E:FB:62 ServicesResolved: no
Successful disconnected
[CHG] Device F1:5A:F4:6E:FB:62 Connected: no
[bluetooth]# quit
root@Mini:/home/pi/projects# python3 p1.py
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was requested
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 b31022160b0016160466011238002d02003c005a
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
DEBUG:tion_btle.s3:Data is b31022160b0016160466011238002d02003c005a
{'state': 'on', 'heater': 'on', 'heating': 'on', 'sound': 'on', 'mode': 'outside', 'out_temp': 22, 'in_temp': 4, 'heater_temp': 22, 'fan_speed': 2, 'filter_remain': 358, 'time': '18:56', 'request_error_code': 0, 'model': 'S3', 'code': 200, 'timer': 'off', 'productivity': 45, 'fw_version': '003c'}
root@Mini:/home/pi/projects#
a2 и a3 отличаются подпиской на уведомления и тем, что в a3 если не проходит bluetooth сопряжение, то и не выполняется тинон-специфичное сопряжение.
Логи в части BT сопряжения у a2 и a3 идентичные.
Давайте попробуем merge: выполнять тион-сопряжение даже если BT не прошло, но не подписываться на уведомления.
tion-btle==1.1.2a4
доступна
пробую 2a4 под обычным:
tion-btle 1.1.2a4
urllib3 1.24.1
wheel 0.32.3
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was not requested
DEBUG:tion_btle.tion:Connected
DEBUG:tion_btle.tion:BT pairing ...
DEBUG:tion_btle.tion: Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:__bt_pair: could not pair! Permission denied. Check permissions at host
DEBUG:tion_btle.tion:BT pairing is failed
DEBUG:tion_btle.tion:pair: 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:pair: device pair is done
DEBUG:tion_btle.tion:pair: disconnecting
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: current status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
pi@Mini:~/projects $
p.s. попробовал 3 раза. результат одинаковый. сопряжения нет.
под рутом - поведение все то же. сопряжение есть, дисконнекта нет:
tion-btle 1.1.2a4
urllib3 1.24.1
wheel 0.32.3
root@Mini:/home/pi/projects# bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# quit
root@Mini:/home/pi/projects# python3 p2.py
DEBUG:tion_btle.tion:Pairing
DEBUG:tion_btle.tion:_connect: connected
DEBUG:tion_btle.tion:_connect: notification was not requested
DEBUG:tion_btle.tion:Connected
DEBUG:tion_btle.tion:BT pairing ...
DEBUG:tion_btle.tion: Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['success']}
DEBUG:tion_btle.tion:__bt_pair: success
DEBUG:tion_btle.tion:BT pairing is failed
DEBUG:tion_btle.tion:pair: 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:pair: device pair is done
DEBUG:tion_btle.tion:pair: disconnecting
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: current status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
None
root@Mini:/home/pi/projects# bluetoothctl
Agent registered
[Tion Breezer 3S]# devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
[Tion Breezer 3S]# quit
root@Mini:/home/pi/projects#
может разделить issue? по сути, "невозможно считать информацию" было решено в 1.1.2a2. а дальше мы занимаемся сопряжением. которое, в принципе, было рабочее под обычным пользователем в той же 2a2 (но у меня требовало отключения и писало лишние сообщения), а в последующих версиях сопряжение уже работает только под рутом и все равно требует ручного отключения
Видимо да, по результатам я возьму 2a2 как рабочую. А дальше буду думать как сделать правильно отключение. Но я не понимаю за счет чего в 2a3 сломалось сопряжение...
@crimean-celica, не могли бы вы еще раз проверить 2a2 на тему сопряжения. Интересует следующий тест:
pip3 list | grep tion-btle
bluetoothctl paired-devices
# тут мы удаляем всю информацию о сопряжении с бризером из системы
sudo rm -rf '/var/lib/bluetooth/*/F1:5A:F4:6E:FB:62'
# после этого нужен рестарт bluetooth
sudo systemctl restart bluetooth
# убеждаемся что сопряжения нет
bluetoothctl paired-devices
python3 p2.py
# если нужно bluetoothctl disconnect
# узнаем есть ли сопряжение
bluetoothctl paired-devices
# если бризер вышел из режима сопряжения получаем данные
python3 p1.py
Если это сработает -- выкачу 1.1.2 на основе 2a2 и буду решать проблему disconnect. Если нет -- на основе результата сделаем еще одно issue, а в примечаниях напишем что нужен root и все трюки не помогли.
внимание! я делал вот это вот "до того, как": https://www.raspberrypi.org/forums/viewtopic.php?t=108581 "как оказалось" (ц) (тм) без "этого" сопряжение не под рутом не работает. как минимум у меня. вернул. дальше - "по инструкции":
pi@Mini:~/projects $ pip3 list | grep tion-btle
etoothctl paired-devices
# тут мы удаляем всю информацию о сопряжении с бризером из системы
sudo rm -rf '/var/lib/bluetooth/*/F1:5A:F4:6E:FB:62'
# после этого нужен рестарт bluetooth
sudo systemctl restart bluetooth
# убеждаемся что сопряжения нет
bluetoothctl paired-devicestion-btle 1.1.2a2
pi@Mini:~/projects $ bluetoothctl paired-devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
pi@Mini:~/projects $ # тут мы удаляем всю информацию о сопряжении с бризером из системы
pi@Mini:~/projects $ sudo rm -rf '/var/lib/bluetooth/*/F1:5A:F4:6E:FB:62'
pi@Mini:~/projects $ # после этого нужен рестарт bluetooth
pi@Mini:~/projects $ sudo systemctl restart bluetooth
pi@Mini:~/projects $ # убеждаемся что сопряжения нет
pi@Mini:~/projects $ bluetoothctl paired-devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
pi@Mini:~/projects $ bluetoothctl paired-devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# remove F1:5A:F4:6E:FB:62
[DEL] Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
Device has been removed
[bluetooth]# quit
итого, на этот момент у нас точно нет устройств. первое спаривание:
pi@Mini:~/projects $ bluetoothctl devices
pi@Mini:~/projects $ sudo systemctl restart bluetooth
pi@Mini:~/projects $ bluetoothctl devices
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
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
WARNING:tion_btle.tion:Got exception 'Device disconnected' while first read, but it is OK and we may ignore it
DEBUG:tion_btle.tion:enable_notification is done
DEBUG:tion_btle.tion:Connected. BT pairing ...
CRITICAL:tion_btle.tion:Got exception while pair BTLEInternalError: Helper not started (did you call connect()?)
DEBUG:tion_btle.tion:disconnected
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is disc
DEBUG:tion_btle.tion:_disconnect: done
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 486, in pair
self._btle._writeCmd('pair' + '\n')
File "/home/pi/.local/lib/python3.7/site-packages/bluepy/btle.py", line 302, in _writeCmd
raise BTLEInternalError("Helper not started (did you call connect()?)")
bluepy.btle.BTLEInternalError: Helper not started (did you call connect()?)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "p2.py", line 9, in <module>
print(s3.pair())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 510, in pair
raise TionException('pair', f"{type(e).__name__}: {str(e)}")
tion_btle.tion.TionException: ('pair', 'BTLEInternalError: Helper not started (did you call connect()?)')
pi@Mini:~/projects $
вторая попытка:
pi@Mini:~/projects $ python3 p2.py
DEBUG:tion_btle.tion:Pairing
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:Connected. BT pairing ...
DEBUG:tion_btle.tion:Got response while sending pair command: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Unexpected response: {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']}
CRITICAL:tion_btle.tion:Got exception while pair TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
DEBUG:tion_btle.tion:disconnected
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 503, in pair
raise TionException('pair', rsp)
tion_btle.tion.TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "p2.py", line 9, in <module>
print(s3.pair())
File "/home/pi/.local/lib/python3.7/site-packages/tion_btle/tion.py", line 510, in pair
raise TionException('pair', f"{type(e).__name__}: {str(e)}")
tion_btle.tion.TionException: ('pair', "TionException: ('pair', {'rsp': ['mgmt'], 'code': ['mgmterr'], 'estat': [20], 'emsg': ['Permission Denied']})")
pi@Mini:~/projects $ bluetoothctl devices
Device F1:5A:F4:6E:FB:62 Tion Breezer 3S
pi@Mini:~/projects $ bluetoothctl
Agent registered
[bluetooth]# quit
pi@Mini:~/projects $
то есть, мы сопряжены и отключены. мистика. проверка получения данных:
pi@Mini:~/projects $ python3 p1.py
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 b31022160b001616056501001a002d03003c005a
DEBUG:tion_btle.tion:_disconnect: disconnecting
DEBUG:tion_btle.tion:_disconnect: status is conn
DEBUG:tion_btle.tion:_disconnect: calling disconnect()
DEBUG:tion_btle.tion:_disconnect: done
DEBUG:tion_btle.s3:Data is b31022160b001616056501001a002d03003c005a
{'state': 'on', 'heater': 'on', 'heating': 'on', 'sound': 'on', 'mode': 'outside', 'out_temp': 22, 'in_temp': 5, 'heater_temp': 22, 'fan_speed': 2, 'filter_remain': 357, 'time': '0:26', 'request_error_code': 0, 'model': 'S3', 'code': 200, 'timer': 'off', 'productivity': 45, 'fw_version': '003c'}
pi@Mini:~/projects $
все работает p.s. вообще это сопряжение как-то "волшебно" работает. если начинать с рестарта синезуба, то (вроде как пока) со второй попытки есть сопряжение и устройство отключено, то есть, готово к работе "накануне" было не так. но я НЕ делал рестарт синезубому сервису
оставлю это тут "на всякий случай" https://www.raspberrypi.org/forums/viewtopic.php?p=746917#p746917 step.1.
sudo nano /etc/dbus-1/system.d/bluetooth.conf
step.2.
<policy user="pi">
<allow send_destination="org.bluez"/>
<allow send_interface="org.bluez.Agent1"/>
<allow send_interface="org.bluez.GattCharacteristic1"/>
<allow send_interface="org.bluez.GattDescriptor1"/>
<allow send_interface="org.freedesktop.DBus.ObjectManager"/>
<allow send_interface="org.freedesktop.DBus.Properties"/>
</policy>
некропостинг, извините. но. еще информация на RPi4 были и (пока) есть вопросы установки bluepy (и зависимых компонент, того же bluez). на RPi Zero все ставится "чисто" с первого раза и без вопросов. работает аналогично. то есть как и должно, без вопросов все тестирование выше делалось только с RPi4. при повторной "чистой" установке на тот же RPi4 1.1.2a2 стала давать очень быстрый disconnect после сопряжения в ранних установках я ставил руками libglib2.0-dev в финальной установке делал ручное "sudo pip3 install bluepy" перед установкой "tion-btle" и проблем не возникло итого - похоже, часть проблем связано со спецификой зависимостей на RPi4
Версия модуля: 1.1.1 Модель бризера: S3 Версия прошивки (если известна): 003C
Описание проблемы
не получается прочитать состояние бризера
Порядок действий, которые приводят к проявлению проблемы
rpi4 8GB. свежий, обновленный инстал. ставился из "2020-12-02-raspios-buster-armhf-lite.img" минимум настроек: разрешен SSH + настроена работа по WiFi, вся работа идет по SSH запускаю напрямую тестовый пример (открываю нужные строки в зависимости от того, что нужно сделать):
тестовый пример:
спарить получилось с повышением привилегий (sudo) после чего бризер показывается как спареный через "bluetoothctl"
спаривание:
после чего попытка использовать .get успехом не завершается ни под обычным пользователем ни с повышением привилегий. под обычным:
Логи
с повышением привилений: