Alternativa al binario rfcomm ora deprecato in bluez


10

A partire da bluez 5.44, i binari rfcomm contenuti in bluez-utils (tra gli altri come hcitool) sono considerati deprecati e da ora in poi sono inclusi solo nel pacchetto bluez-utils-compat fornito da AUR.

Esiste un'applicazione simile da riga di comando per associare un dispositivo bluetooth a una porta seriale usando il modulo kernel rfcomm o devo usare PyBluez o librerie simili da ora in poi?

Se il secondo caso dovesse succedere, quali librerie di Python 3 consiglieresti?

E se qualcuno lo sa, per favore dimmi perché così tanti bluez-utils sono considerati improvvisamente deprecati. Non sono riuscito a trovare nulla al riguardo.

L'ArchWiki consiglia l'implementazione della funzionalità rfcomm utilizzando il nuovo D-Bus Profilo 1 API .

Risposte:


2

Recentemente ho trovato il progetto bluez-tools , che mira a implementare la funzionalità persa usando l'API D-Bus attuale di Bluez.

Bluez-tools è disponibile su ArchLinux dal repository della community. Non ho provato questo e la pagina github afferma che è ancora in beta. Ma secondo la documentazione, bt-serial dovrebbe essere in grado di sostituire il vecchio bluez rfcomm e bt-adapter + bt-agent + bt-device hanno la funzionalità di hcitool.

Modifica: guardando l'elenco dei problemi e gli ultimi commit, bluez-tools non sembra più essere attivamente mantenuto.


1

Ho trovato un'altra possibile soluzione. Ho trovato questo scavando nel repository git hub di qualcuno. Questo utilizza il modulo socket incorporato in python3.

Prerequisiti:

  1. Hai un adattatore funzionante all'indirizzo <indirizzo adattatore>.
  2. Il dispositivo Bluetooth di destinazione è <indirizzo dispositivo>.
  3. Il dispositivo è bloccato.

Cioè, lo stesso punto in cui è possibile utilizzare rfcomm.


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

È bello sapere che Python supporta nativamente la comunicazione seriale Bluetooth. Grazie per aver risposto a questa domanda relativamente vecchia.
eike,

0

voglio notare questo problema:

  1. che questo progetto github contiene alcune funzionalità di rfcomm. (basato su file di test bluez).
  2. Il progetto bluez stesso contiene ancora il file rfcomm.c, che può essere facilmente compilato con:

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

... solo un file, non è necessario compilare l'intero progetto bluez. dove xyz è la versione del codice sorgente scaricato bluez tar.xz (5.46 è ora). prima di scaricare, si dovrebbe prima controllare il proprio bluetoothd -ve scaricare la sorgente corrispondente. bluez-libs è solo dipendenza per il successo della compilazione.

Avevo bisogno di rfcomm per armv7 (raspberry 2) e non esiste un pacchetto aur per rfcomm, e questo era l'unico modo, ma funziona bene.

Non so ancora perché rfcomm sia deprecato, senza una buona alternativa, e come parlare al bluetooth come era la porta seriale in altro modo. Perché anche tu sei esperto di Python più esperto di DBUS ... (come probabilmente il proprietario del progetto sopra menzionato lo è) ... ancora solo quindici è stato fornito in questo modo, non un vero dispositivo personaggio in / dev / ... che tutti gli altri programmi (come Arduino ) può vedere e lavorare con.


2
1. La pagina del progetto afferma "Solo per evitare di implementare nuovamente un vecchio codice che utilizza questi strumenti", il che significa che l'autore suggerirebbe di seguire un approccio diverso quando utilizza bluez per nuovi progetti. 2. Ci sono molti modi per compilare rfcomm da solo, quello che sto cercando è il motivo della sua deprecazione e un'alternativa supportata.
eike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.