Alternative au binaire rfcomm désormais obsolète dans Bluez

10

Depuis bluez 5.44, les binaires rfcomm contenus dans bluez-utils (entre autres comme hcitool) sont considérés comme obsolètes et ne sont désormais inclus que dans le paquet bluez-utils-compat fourni par l'AUR.

Existe-t-il une application en ligne de commande similaire pour lier un périphérique Bluetooth à un port série à l'aide du module de noyau rfcomm ou dois-je utiliser PyBluez ou des bibliothèques similaires à partir de maintenant?

Si ce dernier est le cas, quelles bibliothèques Python 3 recommanderiez-vous?

Et si quelqu'un le sait, dites-moi pourquoi tant de Bluez-Utils sont soudainement considérés comme obsolètes. Je n'ai rien trouvé à ce sujet.

L' ArchWiki recommande d'implémenter la fonctionnalité rfcomm en utilisant la nouvelle API D-Bus Profile 1 .

eike
la source

Réponses:

2

J'ai récemment trouvé le projet bluez-tools , qui vise à implémenter la fonctionnalité perdue en utilisant l'API D-Bus Bluez actuelle.

Bluez-tools est disponible sur ArchLinux à partir du référentiel communautaire. Je n'ai pas testé cela et la page github indique qu'il est toujours en version bêta. Mais selon la documentation, bt-serial devrait pouvoir remplacer l'ancien bluez rfcomm et bt-adapter + bt-agent + bt-device ont la fonctionnalité de hcitool.

Edit: En regardant la liste des problèmes et les derniers validations, bluez-tools ne semble plus être activement maintenu.

eike
la source
1

J'ai trouvé une autre solution possible. J'ai trouvé cela en fouillant dans le dépôt git hub de quelqu'un. Cela utilise le module socket intégré python3.

Conditions préalables:

  1. Vous disposez d'un adaptateur fonctionnel à l'adresse <adresse de l'adaptateur>.
  2. Vous avez votre appareil Bluetooth cible à <adresse de l'appareil>.
  3. L'appareil est épinglé.

Autrement dit, le même point que rfcomm peut être utilisé.


$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
la source
Il est bon de savoir que Python prend en charge nativement la communication série Bluetooth. Merci d'avoir répondu à cette question relativement ancienne.
eike
0

je veux noter ce problème:

  1. que ce projet github contient certaines fonctionnalités de rfcomm. (basé sur les fichiers de test bluez).
  2. Le projet bluez lui-même contient toujours le fichier rfcomm.c, qui peut être facilement compilé avec:

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

... juste un fichier, pas besoin de compiler tout le projet bluez. où xyz est la version du code source bluez tar.xz téléchargé (5.46 est maintenant). avant le téléchargement, il faut d'abord vérifier la bluetoothd -vsource correspondante et la télécharger. bluez-libs n'est qu'une dépendance pour le succès de la compilation.

J'avais besoin de rfcomm pour armv7 (raspberry 2) et il n'y a pas de package aur pour rfcomm, et ce n'était que le moyen, mais cela fonctionne bien.

Je ne sais toujours pas pourquoi rfcomm est obsolète, sans bonne alternative, et comment parler au bluetooth comme c'était le port série dans l'autre sens. Parce que même vous êtes un expert python plus un expert DBUS ... (comme le propriétaire du projet mentionné ci-dessus est probablement) ... toujours seulement fifo a été fourni de cette façon, pas un vrai périphérique de caractère dans / dev / ... que tous les autres programmes (comme arduino ) peut voir et travailler avec.

Asain Kujovic
la source
2
1. La page du projet indique "Juste pour éviter de réimplémenter un ancien code qui utilise ces outils", ce qui signifie que l'auteur suggérerait de suivre une approche différente lors de l'utilisation de bluez pour de nouveaux projets. 2. Il existe de nombreuses façons de compiler rfcomm moi-même, ce que je recherche, c'est la raison de sa dépréciation et une alternative prise en charge.
eike