macOS client.start_notify fails after reconnect
- bleak version: 0.22.2
- Python version: 3.9
- Operating System: macOS sonoma 14.4.1
- BlueZ version (
bluetoothctl -v) in case of Linux:
Description
When running client.start_notify on a device that has previously been connected to and that disconnected and connected again, it throws the exception ValueError: Characteristic notifications already started.
Not calling the function a second time causes no notifications to arrive.
Can you give an example program and the exact steps to reproduce the problem?
Yep, sorry. Attached is a minimal demo program. Somehow, bleak or some other component seems to remember a notification subscription, even if the device disconnected...
import bleak
import asyncio
# replace this with anything suiting on your device
notify_uuid = '00002a56-0000-1000-8000-00805f9b34fb'
async def main():
scanner = bleak.BleakScanner()
disconnect_event = asyncio.Event()
client = bleak.BleakClient(
await scanner.find_device_by_name('BLEnky demo'),
lambda client: disconnect_event.set()
)
await client.connect()
await client.start_notify(notify_uuid, print)
print('connected, please restart device')
await disconnect_event.wait()
print('reconnecting...')
await client.connect()
# this will throw on macOS, not on linux
await client.start_notify(notify_uuid, print)
print('reconnected.')
asyncio.run(main())
Steps to reproduce:
- Put in the name of a test device you can connect to and restart
- Put in the UUID of some notification that can be subscribed to
- Run script
- When prompted, restart device
- Watch exception get thrown, but only on mac
Besides, great work on this! This library is a pleasure to use, I wish there was something comperable for js! Thank you!
I experience this too for v0.22.3 on macOS 15.0.1
Calling connect() a second time on the same BleakClient object is something that has never worked well in Bleak. We recommend to create a new BleakClient object in order to connect again.
Thanks David for this hint! Not reusing that client resolves the reconnect issues for me. Keep going!
Closing since it sounds like we have a solution.