[PYTHON] 이미 페어링 된 것을 포함하여 리눅스에서 가까운 / 발견 가능한 블루투스 장치를 나열합니다.
PYTHON이미 페어링 된 것을 포함하여 리눅스에서 가까운 / 발견 가능한 블루투스 장치를 나열합니다.
이미 페어링 된 것을 포함하여 Linux에서 파이썬을 사용하여 근처 / 발견 가능한 모든 블루투스 장치를 나열하려고합니다.
내가 주소를 사용하여 장치에 대한 서비스를 나열하는 방법을 알고 성공적으로 연결할 수 있습니다 :
services = bluetooth.find_service(address='...')
PyBluez 문서 읽기 필자는 어떤 기준도 지정하지 않으면 근처의 모든 장치가 나타날 것으로 예상합니다.
지금 당장 필요로하는 "유일한 것"은 이미 쌍을 이루고있는 장치를 목록에 표시 할 수 있다는 것입니다. Ubuntu / Unity의 모든 설정 -> 블루투스에있는 목록과 비슷합니다.
Btw, 다음은 내 컴퓨터에 페어링 된 장치가 이미 / 근처에 있더라도 나열하지 않습니다. 아마도 한 번 짝을 지을 때 발견되지 않기 때문일 수 있습니다.
import bluetooth
for d in bluetooth.discover_devices(flush_cache=True):
print d
어떤 아이디어가 ...?
편집 : 발견 및 설치 "bluez - 도구".
bt-device --list
... 필요한 정보, 즉 추가 된 기기의 주소를 알려줍니다.
나는 C 소스를 조사해 보았는데 이것이 생각했던 것처럼 쉽지 않을 수도 있다는 것을 알았다.
아직도 파이썬에서 이것을하는 방법을 모른다 ...
편집 : DBUS 내가 읽고 있어야합니다 수도있을 것 같아요. 충분히 복잡해 보입니다. 누군가 공유 할 코드가 있다면 정말 행복 할 것입니다. :)
해결법
-
==============================
1.Bluetooth API 버전 5의 채택 이후 @Micke 솔루션에 사용 된 대부분의 기능이 중단되고 상호 작용 버스를 통해 ObjectManager.GetManagedObjects [1]
Bluetooth API 버전 5의 채택 이후 @Micke 솔루션에 사용 된 대부분의 기능이 중단되고 상호 작용 버스를 통해 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 in input 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")) })
bt_device 목록에는 원하는 데이터가있는 사전이 있습니다. 즉
예를 들면
[{ 'name': 'BBC micro:bit [zigiz]', 'addr': 'E0:7C:62:5A:B1:8C' }, { 'name': 'BBC micro:bit [putup]', 'addr': 'FC:CC:69:48:5B:32' }]
참고: [1] http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/
-
==============================
2.나는 그 문제를 직접 해결할 수 있었다. 다음 스 니펫에는 기본 블루투스 어댑터에있는 모든 페어링 된 기기의 주소가 나열되어 있습니다.
나는 그 문제를 직접 해결할 수 있었다. 다음 스 니펫에는 기본 블루투스 어댑터에있는 모든 페어링 된 기기의 주소가 나열되어 있습니다.
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"]
-
==============================
3.항상 쉘 명령으로 실행할 수 있으며 반환하는 내용을 읽을 수 있습니다.
항상 쉘 명령으로 실행할 수 있으며 반환하는 내용을 읽을 수 있습니다.
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()
이제 데이터에는 원하는대로 포맷하고 재생할 수있는 모든 출력 선 목록이 포함됩니다.
-
==============================
4.조금 길지만 한 줄로 트릭을한다.
조금 길지만 한 줄로 트릭을한다.
bt-device -l | egrep '\(.*\)' | grep -oP '(?<=\()[^\)]+' | xargs -n1 bt-device -i
from https://stackoverflow.com/questions/14262315/list-nearby-discoverable-bluetooth-devices-including-already-paired-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] paramiko ssh exec_command에서 지속적으로 출력을 얻습니다. (0) | 2018.10.28 |
---|---|
[PYTHON] Postgres - 누락 된 데이터가 0 인 행을 반환하는 방법? (0) | 2018.10.28 |
[PYTHON] anacaonda conda 명령을 사용하여 PyPi 패키지를 설치하는 방법 (0) | 2018.10.28 |
[PYTHON] 어떻게 파이썬에서 원격 이미지를 복사합니까? (0) | 2018.10.28 |
[PYTHON] Python / Matplotlib을 사용하여 색상 표를 기반으로 한 (극지색) 색상환 플롯 (0) | 2018.10.28 |