GNU/Linux >> Tutoriels Linux >  >> Linux

Répertorier les appareils Bluetooth à proximité/détectables, y compris déjà couplés, en Python, sous Linux

J'ai réussi à résoudre le problème moi-même. L'extrait de code suivant répertorie les adresses de tous les appareils couplés, sur mon adaptateur Bluetooth par défaut :

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"]

Depuis l'adoption de la version 5 de l'API Bluetooth, la plupart des fonctions utilisées dans les solutions @Micke ont été supprimées et l'interaction avec le bus s'effectue via l'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"))
    })  

Dans le bt_device lister il y a des dictionnaires avec les données désirées :c'est-à-dire

par exemple

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

Référence :[1] http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/


Vous pouvez toujours l'exécuter en tant que commande shell et lire ce qu'elle renvoie :

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()

Maintenant data inclura une liste de toutes les lignes de sortie que vous pouvez formater et jouer avec comme vous le souhaitez.


Linux
  1. Comment installer Python sur Linux

  2. Commande Linux ls - Lister les fichiers

  3. Où se trouve le bluetooth/bluetooth.h sous Linux ?

  4. Mettre à jour python sur linux 2.7 à 3.5

  5. Récupérer les appareils Bluetooth jumelés de la console

Comment répertorier les tâches Cron sous Linux

Commande Lsblk sous Linux (liste des périphériques de bloc)

Comment répertorier les packages installés sous Linux

Comment répertorier les partitions de disque sous Linux

Comment lister les disques sous Linux

Comment répertorier les services sous Linux