3 votes

Comment obtenir les valeurs RSSI des balises Bluetooth (estimote en particulier) sous Linux ?

J'ai besoin d'obtenir les distances de plusieurs balises Bluetooth pour la triangulation afin de pouvoir faire du positionnement en intérieur. J'ai essayé de donner autant de détails pertinents que possible. Ce projet est destiné à un RPi, mais j'essaie de le tester d'abord sur mon ordinateur portable. J'ai essayé la plupart de ce que j'ai pu trouver sur internet à ce sujet :

La meilleure façon que j'ai trouvée pour obtenir les valeurs rssi est la suivante hcitool rssi <address of beacon>

A partir d'ici https://stackoverflow.com/questions/24417017/bluetooth-le-signal-strength-linux

Pour le tester, j'ai d'abord essayé de l'obtenir sur mon téléphone portable. Il a affiché " Not Connected ". J'ai pensé que je devais d'abord me connecter, et j'ai donc essayé de nombreuses façons de connecter mon téléphone portable :

a) hcittol cc <address of mobile>

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

c) rfcomm connect 0 <address of mobile> 10

Dans chaque cas, lorsque j'ai cliqué sur "pair" dans mon téléphone portable, la connexion s'est interrompue.

Ensuite, j'ai appairé mon mobile de la manière habituelle à partir du menu bluetooth, puis j'ai essayé hcitool rssi <Address of mobile> qui a finalement renvoyé une valeur -8 .

Maintenant que je l'avais pour mon mobile, je suis passé aux balises.

Ensuite, j'ai essayé la même chose pour mes balises. Cette fois-ci, j'ai dû d'abord faire hcitool lescan pour obtenir les adresses des balises disponibles puis se connecter à l'une des balises à l'aide de la commande hcitool lecc <address of beacon> qui a renvoyé l'erreur Could not create connection: Connection timed out Ensuite, j'ai de nouveau essayé de me connecter par les deux autres moyens :

rfcomm connect 0 <address of beacon> 10 qui a renvoyé l'erreur Can't connect RFCOMM socket: Host is down quand je peux être sûr que hci0 était en ligne.

J'ai ensuite essayé avec sudo gatttool -b F1:15:A7:E3:17:63 --interactive après quoi le mode interactif s'est ouvert et j'ai donné la commande connect . Cela a donné des erreurs différentes après Attempting to connect to <address of beacon> , principalement connect error : Connection timed out y Error: connect error: Connection refused (111)

J'ai ensuite lu que je devais utiliser -t random de https://stackoverflow.com/questions/22213793/bluetooth-le-on-raspbian , https://ubuntuforums.org/showthread.php?t=2204808 et une autre source que je n'arrive pas à trouver pour l'instant.

J'ai donc saisi sudo gatttool -b F1:15:A7:E3:17:63 -t random --interactive dans laquelle, lorsque j'ai donné le connect j'obtiens l'erreur suivante Error: connect error: Device or resource busy (16) et aussi parfois Error: connect error: Input/Output Error

puis j'ai lu que je devais peut-être redémarrer mon hci0 en hciconfig hci0 down et ensuite hciconfig hci0 up ce qui a fait l'affaire, la balise est maintenant connectée.

Mais il s'est rapidement déconnecté après avoir indiqué `GLib-WARNING ** : Invalid file descriptor.

` Je lis ici https://raspberrypi.stackexchange.com/questions/53982/how-to-fix-gatttools-glib-warning-invalid-file-descriptor que cela est dû à de mauvaises connexions. J'ai essayé de rapprocher les balises, mais le résultat est le même.

J'ai donc essayé d'obtenir au moins une valeur rssi pendant la courte durée de connexion. Mais, même lorsqu'il était ainsi connecté, je n'ai pas réussi à obtenir de valeur rssi. hcitool rssi <address of beacon> l'erreur se présentait comme suit :

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

Je n'ai pas encore trouvé de solution adéquate à ce problème.

J'ai essayé une autre méthode de lecture de la valeur rssi, qui a donné le résultat suivant :

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 

C'était avant qu'il ne soit déconnecté. J'ai lu ici https://stackoverflow.com/questions/37073114/obtain-rssi-with-hcidump qui disait de lire le 14ème octet. Comme tous ces chiffres semblaient être des nombres hexadécimaux, cela signifiait que chaque nombre était un octet. Mais de cette façon, je n'ai que 7 numéros par ligne, comment puis-je lire le 14ème octet ?

L'obtention de la distance des balises m'a beaucoup préoccupé et m'a fait perdre beaucoup de temps. Merci de m'aider à résoudre ce problème. Si vous pouvez m'aider à trouver une ressource pour m'aider à le faire, j'apprécierais l'aide.

4voto

webdesserts Points 983

Il est possible que vos balises refusent activement votre connexion pour économiser de l'énergie, mais pour lire simplement la force du signal, vous ne devriez pas avoir besoin de vous connecter car elles devraient diffuser cette information de toute façon.

Je n'ai pas réussi à faire en sorte que hcidump me donne les informations que je cherchais, alors j'ai utilisé btmon et j'ai eu beaucoup de succès en obtenant le RSSI de mes balises BLE :

btmon &
hcitool lescan --duplicates

4voto

talmordaniel Points 57

J'ai testé sudo btmgmt find et obtient les valeurs RSSI.

Résultats expurgés :

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

(xx sont remplacés par moi)

Testé sur raspi zero w

C'est peut-être ce que vous recherchez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X