无法注销dbus信号以获取ble通知

时间:2019-02-25 07:08:41

标签: python bluetooth-lowenergy dbus

我正在使用python dbus库进行注册,以接收来自设备的ble数据包。但是,在断开连接并重新连接后,我得到了多个回调。我尝试取消注册该单字,但似乎没有任何效果-以下是我目前正在执行的操作-

class Gatt(object):
dbus_if = 'org.bluez.GattCharacteristic1'

    def __init__(self, bus, char_path):
        self.char_path = char_path
        self.bus = bus
        prop_man = dbus.Interface(bus.get_object(BLUEZ_SERV_NAME, self.char_path),
                                  'org.freedesktop.DBus.Properties')
        props = prop_man.GetAll(self.dbus_if)
        self.uuid = props[dbus.String('UUID')]
        self.notifying = props[dbus.String('Notifying')]
        nom = dbus.Interface(bus.get_object(BLUEZ_SERV_NAME, char_path), 'org.freedesktop.DBus.Properties')
        self.signal_on_property_changed = nom.connect_to_signal('PropertiesChanged', self.on_char_property_changed)
        print('New Gatt Device {}'.format(str(self.uuid)))
        self.dbus_if_handle = dbus.Interface(self.bus.get_object(BLUEZ_SERV_NAME, self.char_path),
                       self.dbus_if)

def clear_signal(self):
    self.bus.remove_signal_receiver(self.on_char_property_changed, self.signal_on_property_changed)

在这一点上,我怀疑remove_signal_receiver()的参数错误,因此在没有给我适当结果的情况下默默失败。

任何建议都将不胜感激。 TIA。

1 个答案:

答案 0 :(得分:0)

要删除self.signal_on_property_changed = nom.connect_to_signal(...)创建的信号匹配,您需要保存此函数创建的信号,然后对该信号调用方法remove()

示例:

# Create signal
self.signal_on_property_changed = nom.connect_to_signal(...)
....
# Remove signal
self.signal_on_property_changed.remove()