python-eq3bt
python-eq3bt copied to clipboard
Asyncio errors in bleak
Hi,
I do not know if this issue is related to some of the already open ones since I do not use eq3cli. However, the underlying issue could be the same.
Since the switch to bleak, I can no longer connect to my thermostats. I can simply reproduce the error by executing:
from eq3bt import Thermostat
test = Thermostat("00:1a:22:12:26:ee")
test.update()
The output is the following:
>>> from eq3bt import Thermostat
>>> test = Thermostat("00:1a:22:12:26:ee")
>>> test.update()
Task exception was never retrieved
future: <Task finished name='Task-9' coro=<BleakConnection.on_notification() done, defined at /home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/bleakconnection.py:77> exception=TypeError("unsupported operand type(s) for +: 'BleakGATTCharacteristicBlueZDBus' and 'int'")>
Traceback (most recent call last):
File "/home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/bleakconnection.py", line 119, in make_request
self._loop.run_until_complete(self.wait_for_response(timeout))
File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "/home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/bleakconnection.py", line 101, in wait_for_response
await asyncio.wait_for(self._notifyevent.wait(), timeout)
File "/usr/lib/python3.8/asyncio/tasks.py", line 494, in wait_for
return fut.result()
File "/usr/lib/python3.8/asyncio/locks.py", line 309, in wait
await fut
RuntimeError: Task <Task pending name='Task-7' coro=<Event.wait() running at /usr/lib/python3.8/asyncio/locks.py:309> cb=[_release_waiter(<Future pendi...8e2f51700>()]>)() at /usr/lib/python3.8/asyncio/tasks.py:429]> got Future <Future pending> attached to a different loop
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/bleakconnection.py", line 80, in on_notification
handle = handle + 1
TypeError: unsupported operand type(s) for +: 'BleakGATTCharacteristicBlueZDBus' and 'int'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/eq3btsmart.py", line 217, in update
self._conn.make_request(PROP_WRITE_HANDLE, value)
File "/home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/bleakconnection.py", line 119, in make_request
self._loop.run_until_complete(self.wait_for_response(timeout))
File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "/home/sqall/syncfolder/projekte/alertR/thermostat_service/venv_bleak/lib/python3.8/site-packages/eq3bt/bleakconnection.py", line 101, in wait_for_response
await asyncio.wait_for(self._notifyevent.wait(), timeout)
File "/usr/lib/python3.8/asyncio/tasks.py", line 494, in wait_for
return fut.result()
File "/usr/lib/python3.8/asyncio/locks.py", line 309, in wait
await fut
RuntimeError: Task <Task pending name='Task-7' coro=<Event.wait() running at /usr/lib/python3.8/asyncio/locks.py:309> cb=[_release_waiter(<Future pendi...8e2f51700>()]>)() at /usr/lib/python3.8/asyncio/tasks.py:429]> got Future <Future pending> attached to a different loop
I am running a xubuntu 20.04 machine with Python 3.8.10 (default, Jun 22 2022, 20:18:18)
and have the following packages installed in my python environment:
Package Version
------------- -------
async-timeout 4.0.2
bleak 0.18.1
click 8.1.3
construct 2.10.68
dbus-fast 1.17.0
pip 20.0.2
pkg-resources 0.0.0
python-eq3bt 0.2
setuptools 44.0.0
wheel 0.34.2
Everything works fine if I downgrade to version 0.1.12
which uses bluepy.
Well, since I thought this was a problem in bleak, I got involved in this issue https://github.com/hbldh/bleak/issues/946 However, the maintainer says this is a problem in the asyncio loop of the python-eq3bt
library (see here: https://github.com/hbldh/bleak/issues/946#issuecomment-1264696635 ).
Thanks!