GNU/Linux >> Belajar Linux >  >> Linux

Buat daftar perangkat bluetooth terdekat/dapat ditemukan, termasuk yang sudah dipasangkan, dengan Python, di Linux

Saya berhasil memecahkan masalah sendiri. Cuplikan berikut mencantumkan alamat untuk semua perangkat yang dipasangkan, pada adaptor bluetooth default saya:

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

Sejak adopsi Bluetooth API versi 5, sebagian besar fungsi yang digunakan dalam solusi @Micke dihentikan dan interaksi dengan bus dilakukan melalui 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"))
    })  

Di bt_device daftar ada kamus dengan data yang diinginkan:yaitu

misalnya

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

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


Anda selalu dapat menjalankannya sebagai perintah shell dan membaca hasilnya:

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

Sekarang data akan menyertakan daftar semua jalur keluaran yang dapat Anda format dan mainkan sesuka Anda.


Linux
  1. Cara menginstal Python di Linux

  2. 3 Cara Mendaftar Pengguna di Linux

  3. Perintah Linux ls - Daftar File

  1. Cara menginstal Python di Linux Mint 20

  2. mematikan komputer (linux) menggunakan python

  3. Di mana letak bluetooth/bluetooth.h di Linux?

  1. Cara Menggunakan Perintah SS Linux

  2. Perbarui python di linux 2.7 ke 3.5

  3. Ambil perangkat Bluetooth yang dipasangkan dari konsol