Alternative zur jetzt veralteten rfcomm-Binärdatei in bluez

10

Seit bluez 5.44 gelten die in bluez-utils (unter anderem wie hcitool) enthaltenen rfcomm-Binärdateien als veraltet und sind von nun an nur noch in dem von der AUR bereitgestellten bluez-utils-kompatiblen Paket enthalten.

Gibt es eine ähnliche Befehlszeilenanwendung, um ein Bluetooth-Gerät mithilfe des rfcomm-Kernelmoduls an eine serielle Schnittstelle zu binden, oder muss ich von nun an PyBluez oder ähnliche Bibliotheken verwenden?

Wenn letzteres der Fall ist, welche Python 3-Bibliotheken würden Sie empfehlen?

Und wenn jemand weiß, sagen Sie mir bitte, warum so viele der Bluez-Utils plötzlich als veraltet gelten. Daran konnte ich nichts finden.

Das ArchWiki empfiehlt, die rfcomm-Funktionalität mithilfe der neuen D-Bus Profile 1-API zu implementieren .

eike
quelle

Antworten:

2

Ich habe kürzlich das bluez-tools- Projekt gefunden, das darauf abzielt, die verlorene Funktionalität mit der aktuellen Bluez-D-Bus-API zu implementieren.

Bluez-tools ist unter ArchLinux im Community-Repository verfügbar. Ich habe dies nicht getestet und die Github-Seite gibt an, dass es sich noch in der Beta befindet. Laut Dokumentation sollte bt-serial jedoch in der Lage sein, das alte bluez rfcomm zu ersetzen, und bt-adapter + bt-agent + bt-device haben die Funktionalität von hcitool.

eike
quelle
1

Ich habe eine andere mögliche Lösung gefunden. Ich fand das, indem ich in jemandes Git Hub Repo stöberte. Dies verwendet das in Python3 integrierte Socket-Modul.

Voraussetzungen:

  1. Sie haben einen funktionierenden Adapter unter der Adresse <Adapteradresse>.
  2. Sie haben Ihr Bluetooth-Zielgerät unter <Geräteadresse>.
  3. Das Gerät ist fixiert.

Das heißt, der gleiche Punkt, an dem rfcomm verwendet werden kann.


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()
Gault Drakkor
quelle
Es ist schön zu wissen, dass Python die serielle Bluetooth-Kommunikation nativ unterstützt. Vielen Dank für die Beantwortung dieser relativ alten Frage.
Eike
0

Ich möchte auf dieses Problem hinweisen:

  1. dass dieses Github-Projekt einige der rfcomm-Funktionen enthält. (basierend auf Bluez-Testdateien).
  2. Das bluez-Projekt selbst enthält weiterhin die Datei rfcomm.c, die einfach kompiliert werden kann mit:

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... nur eine Datei, kein Kompilieren des gesamten Bluez-Projekts erforderlich. Dabei ist xyz die Version des heruntergeladenen Quellcodes bluez tar.xz (5.46 ist jetzt). Vor dem Herunterladen sollte man zuerst die eigene bluetoothd -vQuelle überprüfen und die passende Quelle herunterladen. bluez-libs ist nur eine Abhängigkeit für den Kompilierungserfolg.

Ich brauchte rfcomm für armv7 (raspberry 2) und es gibt kein aur-Paket für rfcomm, und das war nur so, aber es funktioniert gut.

Ich bin mir immer noch nicht sicher, warum rfcomm ohne gute Alternative veraltet ist und wie man mit Bluetooth spricht, da es sich um eine serielle Schnittstelle handelt. Denn selbst Sie sind Python-Experte plus DBUS-Experte ... (wie der oben erwähnte Projektbesitzer wahrscheinlich ist) ... immer noch wurde nur FIFO auf diese Weise bereitgestellt, kein echtes Zeichengerät in / dev / ... als alle anderen Programme (wie Arduino) ) kann sehen und damit arbeiten.

Asain Kujovic
quelle
2
1. Auf der Projektseite heißt es "Nur um zu vermeiden, dass alter Code, der diese Tools verwendet, erneut implementiert wird". Dies bedeutet, dass der Autor bei der Verwendung von bluez für neue Projekte einen anderen Ansatz vorschlagen würde. 2. Es gibt viele Möglichkeiten, rfcomm selbst zu kompilieren. Ich suche nach dem Grund für die Ablehnung und einer unterstützten Alternative.
Eike