使用Python通过dbus解析来自BLE模块的数据

使用Python通过dbus解析来自BLE模块的数据,python,dictionary,parsing,bluetooth,dbus,Python,Dictionary,Parsing,Bluetooth,Dbus,目前,我正在努力使用此sdk与蓝牙模块进行交互: 其目的是使用蓝牙模块扫描范围内的所有设备,并连接到以某个设备名称开头的任何设备(例如“dev001”、“dev002”,设备将在其中查找“dev”)。我有这样一个脚本的开始,在这里我可以扫描设备并看到数据进入,我只是不知道如何解析每个设备产生的dbus字典 脚本开头: def discoveryCallback(x, y): print("found a device!") print(str(x))

目前,我正在努力使用此sdk与蓝牙模块进行交互:

其目的是使用蓝牙模块扫描范围内的所有设备,并连接到以某个设备名称开头的任何设备(例如“dev001”、“dev002”,设备将在其中查找“dev”)。我有这样一个脚本的开始,在这里我可以扫描设备并看到数据进入,我只是不知道如何解析每个设备产生的dbus字典

脚本开头:

def discoveryCallback(x, y): 
    print("found a device!")
    print(str(x))
    print(":")
    global lastDevice
    lastDevice = y

def propertyChanged():
    print("a property has changed")

manager = bt_module.BtMgr(discoveryCallback, propertyChanged)
manager.start_discovery()
作为测试,我将扫描回调的输出存储在lastDevice中,它具有以下内容:

dbus.Dictionary({dbus.String('org.freedesktop.DBus.Introspectable'): dbus.Dictionary({}, signature=dbus.Signature('svluez.Device1'): dbus.Dictionary({dbus.String('Address'): dbus.String('4A:AA:2D:FF:48:87', variant_level=1), dbus.Stri.String('random', variant_level=1), dbus.String('Alias'): dbus.String('4A-AA-2D-FF-48-87', variant_level=1), dbus.Strlean(False, variant_level=1), dbus.String('Trusted'): dbus.Boolean(False, variant_level=1), dbus.String('Blocked'): dant_level=1), dbus.String('LegacyPairing'): dbus.Boolean(False, variant_level=1), dbus.String('RSSI'): dbus.Int16(-10us.String('Connected'): dbus.Boolean(False, variant_level=1), dbus.String('UUIDs'): dbus.Array([], signature=dbus.Sigvel=1), dbus.String('Adapter'): dbus.ObjectPath('/org/bluez/hci0', variant_level=1), dbus.String('ManufacturerData'):UInt16(76): dbus.Array([dbus.Byte(16), dbus.Byte(5), dbus.Byte(93), dbus.Byte(28), dbus.Byte(31), dbus.Byte(107), dbu=dbus.Signature('y'), variant_level=1)}, signature=dbus.Signature('qv'), variant_level=1), dbus.String('TxPower'): dbvel=1), dbus.String('ServicesResolved'): dbus.Boolean(False, variant_level=1)}, signature=dbus.Signature('sv')), dbusp.DBus.Properties'): dbus.Dictionary({}, signature=dbus.Signature('sv'))}, signature=dbus.Signature('sa{sv}'))

要连接,我需要从这个对象中提取设备名和MAC地址,但我无法解析它。有人能帮忙吗?

当我尝试使用您为
lastDevice发布的值时,我得到一个
语法错误:无效语法。复制粘贴时有什么东西坏了吗

通常,这些值可以像python字典一样处理。以下是一个例子:

def新建iface(路径、iface道具):
“”“如果新的dbus接口是设备,请将其添加到要监视的设备”“”
device_addr=iface_props.get('org.bluez.Device1',{}.get('Address'))
如果设备地址:
设备监视器(路径)
这是示例的一部分,发布在:

Hm,我想尝试一下你的链接示例,但我不确定在我自己的代码环境下,iface_道具会是什么。如果你能从你的
discoveryCallback
中用
x
y
的值更新问题,我可以试着用代码来阅读它。