Alternativa para o binário rfcomm agora obsoleto em 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 similar para ligar um dispositivo bluetooth a uma porta serial usando o módulo do kernel rfcomm ou eu tenho que usar o PyBluez ou libs similares a partir de agora?

Se este último for o caso, quais bibliotecas do Python 3 você recomendaria?

E se alguém souber, por favor, me diga por que tantos dos utilitários bluez são considerados obsoletos de repente. Eu não consegui encontrar nada sobre isso.

O ArchWiki recomenda a implementação da funcionalidade rfcomm usando o novo D-Bus 1 API .

    
por eike 19.03.2017 / 21:51

3 respostas

2

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

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

    
por 19.08.2018 / 15:28
1

Eu encontrei outra solução possível. Eu encontrei isso cavando através do repo hub de alguém. Isso usa o python3 embutido no módulo de soquete.

Pré-requisitos:

  1. Você tem um adaptador ativo no endereço & ltadapter address & gt.
  2. Você tem seu dispositivo Bluetooth de destino no endereço & ltdevice & gt.
  3. O dispositivo está fixado.

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' #&ltadapter address&gt
>>> device = '55:44:33:22:11:00' #&ltdevice address&gt
>>> 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()
    
por 05.12.2018 / 23:24
0

eu quero observar sobre esse problema:

  1. o esse projeto do github contém algumas das funcionalidades do rfcomm. (baseado em 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 -DVERSÃO = xyz

... apenas um arquivo, sem necessidade de compilar todo o projeto bluez. onde xyz é a versão do bluez tar.xz baixado (5.46 é agora). Antes de fazer o download, primeiro deve-se verificar o próprio bluetoothd -v e 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 isso foi apenas uma maneira, mas funciona bem.

Ainda não tenho certeza do porque o rfcomm está obsoleto, sem uma boa alternativa, e como falar com o bluetooth como se fosse a porta serial de outra maneira. Porque mesmo você é especialista em python mais DBUS expert ... (como o dono do projeto mencionado acima provavelmente é) ... ainda apenas fifo foi fornecido dessa forma, não dispositivo de caracteres real em / dev / ... que todos os outros programas (como arduino ) pode ver e trabalhar com.

    
por 05.09.2017 / 07:17