GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Auflisten von in der Nähe befindlichen/erkennbaren Bluetooth-Geräten, einschließlich bereits gekoppelter, in Python unter Linux

Ich konnte das Problem selbst lösen. Das folgende Snippet listet Adressen für alle gekoppelten Geräte auf meinem Standard-Bluetooth-Adapter auf:

import dbus

bus = dbus.SystemBus()

manager = dbus.Interface(bus.get_object('org.bluez', '/'), 'org.bluez.Manager')

adapterPath = manager.DefaultAdapter()

adapter = dbus.Interface(bus.get_object('org.bluez', adapterPath), 'org.bluez.Adapter')

for devicePath in adapter.ListDevices():
    device = dbus.Interface(bus.get_object('org.bluez', devicePath),'org.bluez.Device')
    deviceProperties = device.GetProperties()
    print deviceProperties["Address"]

Seit der Verabschiedung der Version 5 der Bluetooth-API wurden die meisten Funktionen, die in den @Micke-Lösungen verwendet wurden, fallen gelassen und die Interaktion mit dem Bus erfolgt über den ObjectManager.GetManagedObjects [1]

import dbus


def proxyobj(bus, path, interface):
    """ commodity to apply an interface to a proxy object """
    obj = bus.get_object('org.bluez', path)
    return dbus.Interface(obj, interface)


def filter_by_interface(objects, interface_name):
    """ filters the objects based on their support
        for the specified interface """
    result = []
    for path in objects.keys():
        interfaces = objects[path]
        for interface in interfaces.keys():
            if interface == interface_name:
                result.append(path)
    return result


bus = dbus.SystemBus()

# we need a dbus object manager
manager = proxyobj(bus, "/", "org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()

# once we get the objects we have to pick the bluetooth devices.
# They support the org.bluez.Device1 interface
devices = filter_by_interface(objects, "org.bluez.Device1")

# now we are ready to get the informations we need
bt_devices = []
for device in devices:
    obj = proxyobj(bus, device, 'org.freedesktop.DBus.Properties')
    bt_devices.append({
        "name": str(obj.Get("org.bluez.Device1", "Name")),
        "addr": str(obj.Get("org.bluez.Device1", "Address"))
    })  

Im bt_device list gibt es Wörterbücher mit den gewünschten Daten:zB

zum Beispiel

[{
    'name': 'BBC micro:bit [zigiz]', 
    'addr': 'E0:7C:62:5A:B1:8C'
 }, {
    'name': 'BBC micro:bit [putup]',
    'addr': 'FC:CC:69:48:5B:32'
}]

Referenz:[1] http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/


Sie könnten es immer als Shell-Befehl ausführen und lesen, was es zurückgibt:

import subprocess as sp
p = sp.Popen(["bt-device", "--list"], stdin=sp.PIPE, stdout=sp.PIPE, close_fds=True)
(stdout, stdin) = (p.stdout, p.stdin)
data = stdout.readlines()

Jetzt data enthält eine Liste aller Ausgabezeilen, die Sie nach Belieben formatieren und damit spielen können.


Linux
  1. So installieren Sie Python unter Linux

  2. So installieren Sie Python unter Linux Mint 20

  3. 3 Möglichkeiten zum Auflisten von Benutzern in Linux

  4. Linux-ls-Befehl - Dateien auflisten

  5. Herunterfahren des Computers (Linux) mit Python

Wie man Cron-Jobs unter Linux auflistet

Lsblk-Befehl in Linux (Blockgeräte auflisten)

So listen Sie installierte Pakete in Linux auf

So listen Sie Festplattenpartitionen unter Linux auf

So listen Sie Festplatten unter Linux auf

So listen Sie Dienste unter Linux auf