15

Linux で Python を使用して、既にペアリングされているものを含め、近くにある/検出可能なすべての Bluetooth デバイスを一覧表示しようとしています。

アドレスを使用してデバイスのサービスを一覧表示する方法を知っており、正常に接続できます。

services = bluetooth.find_service(address='...')

PyBluez ドキュメントを読むと、条件を指定しない場合、近くのデバイスが表示されることが期待されます。

「基準が指定されていない場合は、検出されたすべての近くのサービスのリストを返します。」

私が今必要としている「唯一の」ことは、オン、オフ、近くにあるかどうかに関係なく、既にペアリングされているデバイスを一覧表示できることです。Ubuntu/Unity の [すべての設定] --> [Bluetooth] で取得しているリストとよく似ています。

ところで、以下は、マシン上にある/近くにある場合でも、マシン上で既にペアリングされているデバイスを一覧表示しません。おそらく、一度ペアリングすると検出できないためです。

import bluetooth
for d in bluetooth.discover_devices(flush_cache=True):
    print d

何か案は ...?

編集:「bluez-tools」を見つけてインストールしました。

bt-device --list

... 必要な情報、つまり追加されたデバイスのアドレスを教えてくれます。

C ソースを調べたところ、思ったほど簡単ではないことがわかりました。

Pythonでこれを行う方法はまだわかりません...

編集: DBUSは、私が読んでおくべきものかもしれないと思います。十分に複雑に思えます。誰かが共有するコードを持っているなら、私は本当に幸せです. :)

4

4 に答える 4

9

私は自分で問題を解決することができました。次のスニペットは、デフォルトの Bluetooth アダプターで、ペアリングされたすべてのデバイスのアドレスを一覧表示します。

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"]
于 2013-01-14T11:27:32.903 に答える
5

いつでもシェル コマンドとして実行し、返される内容を読み取ることができます。

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

dataこれで、必要に応じてフォーマットして再生できるすべての出力行のリストが含まれます。

于 2013-01-10T21:09:44.180 に答える