web-dev-qa-db-fra.com

Bluetooth LE Puissance du signal Linux

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

14
Tim Holum

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.

29
Youssif Saeed

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

4
Asif Nadeem

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 

3
Yao Hao

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

2
Tim Holum

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

0
bluemantoothed