问题描述
我正在使用 bleak 来控制 Python 中的 BLE(蓝牙低功耗)设备。 并且我试图控制一个 BLE 设备,该设备在一个特性中包含通知和指示属性,因此出现了仅指示被激活的问题。
所以当我查看了 bleak 的源代码时,发现如果存在,则将其激活为指示,如果不存在,则检查通知并将其激活为通知,并且 start_notify 有效。
以下是相关源码和链接。
https://github.com/hbldh/bleak/blob/develop/bleak/backends/winrt/client.py
async def start_notify(
self,char_specifier: Union[BleakGATTCharacteristic,int,str,uuid.UUID],callback: Callable[[int,bytearray],None],**kwargs
) -> None:
...
...
characteristic_obj = characteristic.obj
if (
characteristic_obj.characteristic_properties
& GattCharacteristicProperties.INDICATE
):
cccd = GattClientCharacteristicConfigurationDescriptorValue.INDICATE
elif (
characteristic_obj.characteristic_properties
& GattCharacteristicProperties.NOTIFY
):
cccd = GattClientCharacteristicConfigurationDescriptorValue.NOTIFY
else:
cccd = GattClientCharacteristicConfigurationDescriptorValue.NONE
fcn = _notification_wrapper(bleak_callback,asyncio.get_event_loop())
event_handler_token = characteristic_obj.add_value_changed(fcn)
self._notification_callbacks[characteristic.handle] = event_handler_token
status = await characteristic_obj.write_client_characteristic_configuration_descriptor_async(
cccd
)
在这种情况下处理它的最佳方法是什么? 所以我实现了下面的代码来使用“通知”,但它看起来不太好。
async with BleakClient(address,timeout=5.0) as client:
client.set_disconnected_callback(on_disconnect)
services = await client.get_services()
for service in services:
for characteristic in service.characteristics:
if characteristic.uuid == read_write_charcteristic_uuid:
if 'notify' in characteristic.properties:
# if "indicate" is exist remove it
if 'indicate' in characteristic.properties:
characteristic.properties.remove('indicate')
# then "notify" becomes active.
await client.start_notify(notify_charcteristic,callback)
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)