Como obtemos valores de RSSI a partir de beacons (estimados para serem específicos) no Linux?

2

Eu preciso obter distâncias de vários beacons bluetooth para triangulação, para que eu possa fazer o posicionamento interno. Eu tentei dar tantos detalhes relevantes quanto possível. Este projeto é para um RPi, mas atualmente estou tentando testá-lo através do meu laptop primeiro. Eu tentei a maior parte do que posso encontrar na internet sobre isso:

A melhor maneira que encontrei para obter os valores do rssi foi hcitool rssi <address of beacon>

A partir daqui, link

Para testar isso, tentei obtê-lo para o meu celular primeiro. Mostrou " Not Connected ". Eu pensei que precisava se conectar primeiro, então tentei muitas maneiras de conectar meu celular:

a) hcittol cc <address of mobile>

b) gatttool -b <address of mobile> -t random --interactive

c) rfcomm connect 0 <address of mobile> 10

Em cada caso, quando eu clicou em par no meu celular, a conexão foi encerrada.

Em seguida, eu emparelhei meu celular da maneira usual no menu bluetooth e tentei hcitool rssi <Address of mobile> , que finalmente retornou um valor -8 .

Agora que eu tinha para o meu celular, agora mudei para beacons.

Depois, tentei o mesmo para meus beacons. Desta vez eu tive que primeiro faça hcitool lescan para obter endereços de balizas disponíveis em seguida, conecte-se a um dos beacons usando o comando hcitool lecc <address of beacon> , que retornou o erro Could not create connection: Connection timed out Então, mais uma vez, tentei me conectar com as outras duas maneiras:

rfcomm connect 0 <address of beacon> 10 que retornou o erro Can't connect RFCOMM socket: Host is down quando posso ter certeza de que hci0 estava ativo.

Então eu tentei com sudo gatttool -b F1:15:A7:E3:17:63 --interactive após o qual o modo interativo foi aberto e eu dei o comando connect . Isso deu erros diferentes após Attempting to connect to <address of beacon> , principalmente connect error : Connection timed out e Error: connect error: Connection refused (111)

Depois, eu preciso usar -t random do link , link e uma outra fonte que não consigo encontrar agora.

Então eu inseri sudo gatttool -b F1:15:A7:E3:17:63 -t random --interactive , quando eu dei o comando connect , recebi o erro Error: connect error: Device or resource busy (16) e também algumas vezes Error: connect error: Input/Output Error

então eu li que talvez precise reiniciar meu hci0 por hciconfig hci0 down e, em seguida, hciconfig hci0 up que fez o truque, o beacon agora se conectou.

Mas, rapidamente, ele foi desconectado depois de dizer "GLib-WARNING **: Descritor de arquivo inválido.

Eu li aqui link que isso é porque de conexões pobres. Tentei manter as balizas mais perto, mas fiz o mesmo.

Então eu tentei de qualquer maneira, pelo menos, obter um valor rssi durante a curta duração que está conectado. Mas, mesmo quando foi assim conectado, eu fiz hcitool rssi <address of beacon> o erro veio assim:

hcitool rssi F1:15:A7:E3:17:63
Get connection info failed: No such file or directory

Para o qual ainda não encontrei uma solução adequada.

Eu tentei outra maneira de ler o valor rssi, que deu o seguinte:

hcidump -R
HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
> 04 0E 04 01 0B 20 00 
> 04 0E 04 01 0C 20 00 
> 04 0E 04 01 0C 20 00 
> 04 0F 04 00 01 0D 20 
> 04 0F 04 00 01 16 20 
> 04 0F 04 00 01 13 20 

Isso foi antes de ser desconectado. Eu li aqui link que dizia para ler o 14º byte. já que todos esses números pareciam hexadecimais, isso significaria que cada número é de 1 byte. Mas só tenho 7 números por linha, como posso ler o 14º byte?

Distanciar-se dos beacons tem me incomodado muito e gasto muito do meu tempo. Por favor me ajudem nessa questão. Se você puder me ajudar a encontrar um recurso para me ajudar, agradeço a ajuda.

    
por Cosmopal 08.04.2017 / 18:22

2 respostas

2

Testei sudo btmgmt find e obtive valores de RSSI.

Saída editada:

hci0 dev_found: xx:xx:xx:xx:xx:xx type BR/EDR rssi -86 flags 0x0003
eir_len 5

(xx são substituídos por mim)

Testado em raspi zero w

Talvez seja isso o que você está procurando.

    
por user782606 14.01.2018 / 11:40
1

É possível que seus beacons recusem ativamente sua conexão para economizar energia, mas apenas para ler a intensidade do sinal que você não precisa conectar, já que eles devem transmitir essa informação mesmo assim.

Eu não consegui pegar o hcidump para me dar a informação que eu estava procurando, então eu usei o btmon e obtive grande sucesso recebendo o RSSI dos meus beacons BLE:

btmon &
hcitool lescan --duplicates
    
por Adam 09.08.2017 / 14:39