Alternativa ao binário rfcomm agora obsoleto no bluez

10

Desde o bluez 5.44, os binários rfcomm contidos no bluez-utils (entre outros como o hcitool) são considerados obsoletos e a partir de agora são incluídos apenas no pacote bluez-utils-compat fornecido pelo AUR.

Existe um aplicativo de linha de comando semelhante para vincular um dispositivo bluetooth a uma porta serial usando o módulo do kernel rfcomm ou eu tenho que usar PyBluez ou bibliotecas semelhantes a partir de agora?

Se esse for o caso, quais bibliotecas Python 3 você recomendaria?

E se alguém souber, por favor me diga por que tantos dos bluez-utils são considerados obsoletos de repente. Não consegui encontrar nada sobre isso.

O ArchWiki recomenda implementar a funcionalidade rfcomm usando a nova API D-Bus Profile 1 .

eike
fonte

Respostas:

2

Eu encontrei recentemente o projeto bluez-tools , que visa implementar a funcionalidade perdida usando a API D-Bus atual do Bluez.

O Bluez-tools está disponível no ArchLinux no repositório da comunidade. Eu não testei isso e a página do github afirma que ele ainda está na versão beta. Mas, de acordo com a documentação, o bt-serial deve poder substituir o antigo bluez rfcomm e o bt-adapter + bt-agent + bt-device têm a funcionalidade do hcitool.

Edit: Ao olhar para a lista de problemas e as últimas confirmações, o bluez-tools não parece mais ser mantido ativamente.

eike
fonte
1

Eu encontrei outra solução possível. Eu descobri isso pesquisando no repositório git hub de alguém. Isso usa o python3 incorporado no módulo de soquete.

Pré-requisitos:

  1. Você tem um adaptador funcionando no endereço <endereço do adaptador>.
  2. Você tem o dispositivo Bluetooth de destino em <endereço do dispositivo>.
  3. O dispositivo está preso.

Ou seja, o mesmo ponto em que o rfcomm pode ser usado.


$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
fonte
É bom saber que o Python suporta nativamente a comunicação serial Bluetooth. Obrigado por responder a esta pergunta relativamente antiga.
Eike
0

quero observar sobre esse problema:

  1. que este projeto github contém algumas funcionalidades do rfcomm. (com base nos arquivos de teste bluez).
  2. O próprio projeto bluez ainda contém o arquivo rfcomm.c, que pode ser facilmente compilado com:

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

... apenas um arquivo, sem necessidade de compilar todo o projeto bluez. onde xyz é a versão do código-fonte do bluez tar.xz baixado (agora é 5.46). antes de baixar, deve-se primeiro verificar o próprio bluetoothd -ve baixar a fonte correspondente. bluez-libs é apenas dependência para o sucesso da compilação.

Eu precisava do rfcomm para o armv7 (raspberry 2) e não há um pacote aur para o rfcomm, e esse era o único jeito, mas funciona bem.

Ainda não sei por que o rfcomm está obsoleto, sem uma boa alternativa, e como falar com o bluetooth, pois era a porta serial de outra maneira. Porque até você é especialista em python e especialista em DBUS ... (como provavelmente o proprietário do projeto acima mencionado é) ... ainda assim apenas quino foi fornecido dessa maneira, não um dispositivo de caractere real em / dev / ... que todos os outros programas (como o arduino ) pode ver e trabalhar com.

Asain Kujovic
fonte
2
1. A página do projeto indica "Apenas para evitar a reimplementação de algum código antigo que usa essas ferramentas", o que significa que o autor sugeriria seguir uma abordagem diferente ao usar o bluez em novos projetos. 2. Existem muitas maneiras de compilar o rfcomm, o que estou procurando é o motivo de sua reprovação e uma alternativa suportada.
Eike