web-dev-qa-db-fra.com

Comment pouvons-nous obtenir les valeurs RSSI des balises Bluetooth (estimote pour être spécifique) sous Linux?

Je dois obtenir des distances de plusieurs balises Bluetooth pour la triangulation afin de pouvoir effectuer le positionnement à l'intérieur. J'ai essayé de donner autant de détails pertinents que possible. Ce projet concerne un RPi, mais j'essaie actuellement de le tester d'abord avec mon ordinateur portable. J'ai essayé la plupart de ce que je peux trouver sur Internet à ce sujet:

Le meilleur moyen que j'ai trouvé pour obtenir les valeurs RSSI était hcitool rssi <address of beacon>

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

Pour tester cela, j'ai d'abord essayé de l'obtenir pour mon mobile. Il a montré "Not Connected". Je pensais que je devais d'abord me connecter, alors j'ai essayé de nombreuses façons de connecter mon mobile:

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 je cliquais sur ma paire dans mon mobile, la connexion était interrompue.

Ensuite, j'ai jumelé mon téléphone portable 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 téléphone portable, je suis maintenant passé aux balises.

Ensuite, j'ai essayé la même chose pour mes balises. Cette fois, je devais d'abord faire hcitool lescan pour obtenir les adresses des balises disponibles, puis me 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 aux deux autres manières:

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 actif.

Ensuite, j'ai 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 connectname__. Cela donnait différentes erreurs après Attempting to connect to <address of beacon>, principalement connect error : Connection timed out et Error: connect error: Connection refused (111)

Ensuite, j'ai lu que je devais utiliser -t random à partir de https://stackoverflow.com/questions/22213793/bluetooth-le-on-raspbian , https://ubuntuforums.org/showthread. php? t = 2204808 et une autre source que je ne trouve pas pour le moment.

J'ai donc entré Sudo gatttool -b F1:15:A7:E3:17:63 -t random --interactive dans lequel, lorsque j'ai donné la commande connectname__, j'ai eu l'erreur Error: connect error: Device or resource busy (16) et parfois aussi Error: connect error: Input/Output Error

alors j'ai lu que j'ai peut-être besoin de redémarrer mon hci0 avec hciconfig hci0 down et ensuite hciconfig hci0 up qui a fait l'affaire, la balise est maintenant connectée.

Mais ensuite, il s'est rapidement déconnecté après avoir déclaré `GLib-WARNING **: descripteur de fichier non valide.

`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 garder les balises plus proches, mais ça a été pareil.

J'ai donc essayé de toute façon au moins d'obtenir une valeur rssi pendant la courte durée pendant laquelle il est connecté. Mais, même quand il était ainsi connecté, j’ai fait hcitool rssi <address of beacon> l’erreur suivante:

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

Pour lequel je n'ai pas encore trouvé de solution adéquate.

J'ai essayé une autre façon de lire la valeur rssi, qui donnait ceci:

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. étant donné que tous semblaient être des nombres hexadécimaux, cela signifierait que chaque nombre est un octet. Mais de cette façon, je n'ai que 7 chiffres par ligne, comment puis-je lire le 14ème octet?

L’éloignement des balises m’a beaucoup dérangé et a pris beaucoup de temps. S'il vous plaît aidez-moi sur cette question. Si vous pouviez m'aider à trouver une ressource pour m'aider à le faire, j'apprécierais de l'aide.

3
Cosmopal

J'ai testé Sudo btmgmt find et obtenu les valeurs RSSI.

Sortie expurgée:

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 zéro w

Peut-être que c'est ce que vous recherchez.

3
user782606

Il est possible que vos balises refusent activement votre connexion pour économiser de l'énergie, mais il vous suffit de lire la force du signal sans avoir besoin de vous connecter car elles devraient diffuser ces informations de toute façon.

Je ne pouvais pas obtenir que hcidump me donne les informations que je cherchais. J'ai donc utilisé btmon et j'ai eu beaucoup de succès à obtenir le RSSI de mes balises BLE:

btmon &
hcitool lescan --duplicates
1
Adam