Bonjour, y a-t-il un moyen d’obtenir la force du signal de proximité par le Bluetooth bluetooth sous linux? Ou toutes les bonnes bibliothèques pour nodejs, php ou mono (je connais un peu de c ++ ou python mais préférerais le dire à distance) si un outil n’existe pas mais serait assez facile à écrire
Je vous remercie
Sous Linux, vous pouvez utiliser la commande hcitool. Cependant, vous devez être connecté pour obtenir le RSSI d'un périphérique. Si vous voulez y parvenir à partir de la ligne de commande, essayez:
#hcitool rssi AA:BB:CC:DD:EE:FF
Si vous voulez voir le code C réel à cette fin, consultez le fichier bluez tools/hcitool.c , sous la fonction cmd_rssi.
static void cmd_rssi(int dev_id, int argc, char **argv)
{
...
}
Pour Bluetooth Low Energy, je ne connais qu'une seule façon de procéder, qui consiste à utiliser la commande #btmon. Exécutez btmon en arrière-plan, puis recherchez les périphériques Bluetooth basse consommation:
#./btmon &
# hcitool lescan
Les résultats affichés sur le moniteur doivent ressembler à ceci:
> HCI Event: LE Meta Event (0x3e) plen 12
LE Advertising Report (0x02)
Num reports: 1
Event type: Scan response - SCAN_RSP (0x04)
Address type: Public (0x00)
Address: AA:BB:CC:DD:EE:FF (<Vendor Name>)
Data length: 0
***RSSI: -34 dBm (0xde)***
AA:BB:CC:DD:EE:FF <Device Name>
Notez que lorsque vous utilisez btmon, vous n'avez pas besoin de vous connecter pour obtenir le rssi d'un périphérique BLE.
J'espère que ça aide.
Vous pouvez utiliser une combinaison de: Sudo hcitool lescan - duplicates &; Sudo hcidump --raw
cela vous fournira le dump brut de tous les paquets Bluetooth contenant toutes les informations pertinentes qui vous intéressent, telles que: UUID, majeur, mineur, RSSI, TxPower. Vous devrez exécuter une sorte de script pour analyser et filtrer les paquets LE et les rendre lisibles.
Un des scripts écrits avec Bash and S editor a été fourni par jjnebaker ici avec le problème et la solution abordés ici
L'option Autre consiste à utiliser PyBluez en utilisant l'exemple de code ici Mais la solution fournie par les laboratoires Switchdoc pourrait également être utile en fonction de vos besoins. ici
Ok désolé pour l'autre réponse ...
Cela fonctionne pour le langage c, mais il y a une erreur lors de la conversion des octets contenant les informations sur le signal de rssi . https://github.com/glock45/intel-edison-playground/blob/master/scan. c
cette ligne 121: printf ("% s - RSSI% d\n", addr, (char) info-> data [info-> longueur]);
devrait être: printf ("% s - RSSI% d\n", addr, (int8_t) info-> data [info-> longueur]);
j'ai trouvé ceux-ci en regardant à l'intérieur de bluez-version/monitor/*. c, où se trouve le programme btmon. Vous pouvez voir les types de données et les structures, hcidump.c est très utile et packets.c, et main.c aussi, mais il y a beaucoup à apprendre sur les sockets hci
J'ai aussi trouvé un programme que je pouvais éditer pour faire ce que je voulais aussi Je l'ai parcouru sur mon compte github https://github.com/tholum/bluez/blob/master/blue .py
essayez:
$ bluez-test-discovery
sortie:
[ 18:7A:93:05:E4:B1 ]
Name = AMIYJ_E4B1
Paired = 0
LegacyPairing = 0
Alias = AMIYJ_E4B1
Broadcaster = 0
UUIDs = dbus.Array([dbus.String(u'0000fff0-0000-1000-8000-00805f9b34fb')], signature=dbus.Signature('s'), variant_level=1)
Address = 18:7A:93:05:E4:B1
RSSI = -65
Class = 0x000000
vous donne: RSSI = -65