Alternativa al binario rfcomm ahora en desuso en bluez

10

Desde bluez 5.44, los binarios rfcomm contenidos en bluez-utils (entre otros, como hcitool) se consideran obsoletos y de ahora en adelante solo se incluyen en el paquete bluez-utils-compat proporcionado por AUR.

¿Existe una aplicación de línea de comandos similar para vincular un dispositivo bluetooth a un puerto serie usando el módulo del kernel rfcomm o tengo que usar PyBluez o libs similares a partir de ahora?

Si este es el caso, ¿qué bibliotecas de Python 3 recomendaría?

Y si alguien lo sabe, dígame por qué tantas de las utilidades bluez se consideran obsoletas de repente. No pude encontrar nada al respecto.

El ArchWiki recomienda implementar la funcionalidad rfcomm utilizando el nuevo perfil de D-Bus 1 API .

eike
fuente

Respuestas:

2

Recientemente encontré el proyecto bluez-tools , que tiene como objetivo implementar la funcionalidad perdida usando la API actual de Bluez D-Bus.

Bluez-tools está disponible en ArchLinux desde el repositorio de la comunidad. No he probado esto y la página de github dice que todavía está en beta. Pero de acuerdo con la documentación, bt-serial debería poder reemplazar el antiguo bluez rfcomm y el adaptador bt + bt-agent + bt-device tienen la funcionalidad de hcitool.

Editar: al mirar la lista de problemas y las últimas confirmaciones, bluez-tools ya no parece mantenerse activamente.

eike
fuente
1

He encontrado otra posible solución. Encontré esto buscando en el repositorio de git hub de alguien. Esto utiliza python3 integrado en el módulo de socket.

Prerrequisitos:

  1. Tiene un adaptador en funcionamiento en la dirección <dirección del adaptador>.
  2. Tiene su dispositivo Bluetooth de destino en <dirección del dispositivo>.
  3. El dispositivo está anclado.

Es decir, el mismo punto en que se puede usar 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()
Gault Drakkor
fuente
Es bueno saber que Python admite de forma nativa la comunicación serial Bluetooth. Gracias por responder a esta pregunta relativamente antigua.
eike
0

Quiero señalar sobre este problema:

  1. que este proyecto github contiene algunas de las funciones de rfcomm. (basado en archivos de prueba bluez).
  2. El proyecto bluez todavía contiene el archivo rfcomm.c, que se puede compilar fácilmente con:

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

... solo un archivo, no es necesario compilar todo el proyecto bluez. donde xyz es la versión del código fuente descargado de bluez tar.xz (ahora es 5.46). antes de descargar, primero se debe verificar bluetoothd -vla fuente propia y descargar coincidente. bluez-libs es solo dependencia para el éxito de la compilación.

Necesitaba rfcomm para armv7 (raspberry 2) y no hay un paquete aur para rfcomm, y esto fue solo una forma, pero funciona bien.

Todavía no estoy seguro de por qué rfcomm está en desuso, sin una buena alternativa, y cómo hablar con bluetooth, ya que era un puerto serie de otra manera. Porque incluso usted es experto en python más experto en DBUS ... (como probablemente lo es el propietario del proyecto mencionado anteriormente) ... todavía solo se proporcionó quince de esta manera, no un dispositivo de carácter real en / dev / ... que todos los demás programas (como arduino ) puede ver y trabajar con ellos.

Asain Kujovic
fuente
2
1. La página del proyecto dice "Solo para evitar volver a implementar algún código antiguo que use estas herramientas", lo que significa que el autor sugeriría seguir un enfoque diferente al usar bluez para nuevos proyectos. 2. Hay muchas maneras de compilar rfcomm, lo que estoy buscando es la razón de su desaprobación y una alternativa compatible.
eike