Python+D-Bus+BlueZ 5:无法读取对象的属性?
Posted
技术标签:
【中文标题】Python+D-Bus+BlueZ 5:无法读取对象的属性?【英文标题】:Python+D-Bus+BlueZ 5: can't read property of object? 【发布时间】:2014-06-22 05:20:58 【问题描述】:这是在 Gentoo Linux 上。
我正在尝试让 BlueZ 5 告诉我我的蓝牙耳机是否已连接。
我已经阅读并重新阅读了 freedesktop.org 上的 D-Bus «文档»,但它似乎已经过时(或不完整,或两者兼而有之)。我也尝试了解 bluez.org 上的微薄信息,但运气不佳。
我尝试了以下方法:
Python 2.7.6 (default, Apr 26 2014, 11:38:54)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dbus
>>> bus = dbus.SystemBus()
>>> obj = bus.get_object( "org.bluez", '/org/bluez/hci0/dev_00_18_91_D0_7A_24' )
>>> iface = dbus.Interface( obj, "org.bluez.Device1" )
>>> print iface.Connected
<dbus.proxies._DeferredMethod instance at 0x236e2d8>
我认为 Connected 是设备的属性,但它是 _DeferredMethod?那我怎样才能得到这个属性的值呢?
【问题讨论】:
看来你需要调用它:print iface.Connected()
.
【参考方案1】:
以下是通过 D-Bus API 从蓝牙设备读取属性的方法:
#!/usr/bin/env python3
import dbus
bus = dbus.SystemBus()
adapter_object = bus.get_object('org.bluez', '/org/bluez/hci0')
adapter = dbus.Interface(adapter_object, 'org.bluez.Adapter1')
device_object = bus.get_object("org.bluez", "/org/bluez/hci0/dev_FC_52_6E_8E_87_06")
device = dbus.Interface(device_object, "org.bluez.Device1")
device_properties = dbus.Interface(device, "org.freedesktop.DBus.Properties")
print(device_properties.Get("org.bluez.Device1", "Name"))
print(device_properties.Get("org.bluez.Device1", "Connected"))
【讨论】:
【参考方案2】:DBus 属性通过对 Get 方法的 dbus 方法调用间接访问。见this
【讨论】:
以上是关于Python+D-Bus+BlueZ 5:无法读取对象的属性?的主要内容,如果未能解决你的问题,请参考以下文章
蓝牙问题使用 D-Bus (qdbus) 发送 AVRCP 卷更改发送与 org.bluez.MediaTransport1