Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bluetooth LE Signal Strength Linux

Hello is there any way to get the signal strength of near by bluetooth le devises in linux? Or any good libraries for nodejs, php or mono (I do know some c++ or python but would prefer to say away from them) if a tool does not exisst but would be fairly easy to write.

like image 647
Tim Holum Avatar asked Jun 25 '14 19:06

Tim Holum


2 Answers

On Linux, the way to do this is with the hcitool command. However, you have to be connected to get the rssi of a device. If you want to achieve this from the command line, try:

#hcitool rssi AA:BB:CC:DD:EE:FF

If you want to see the actual C code to achieve this, take a look at the bluez tools/hcitool.c file, under the cmd_rssi function.

static void cmd_rssi(int dev_id, int argc, char **argv)
{
    ...
}

For Bluetooth Low Energy, I only know one way to do this, and that is using the #btmon command. Run btmon in the background then scan for Bluetooth Low Energy devices:

#./btmon &
# hcitool lescan

The results displayed on the monitor should be similar to this:

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

Note that when using btmon you do not have to connect to get the rssi of a BLE device.

like image 65
Youssif Saeed Avatar answered Nov 06 '22 09:11

Youssif Saeed


No need to connect when using btmgmt

$ sudo btmgmt find

Discovery started
hci0 type 7 discovering on
hci0 dev_found: 50:8C:FD:99:0A:EC type LE Random rssi -80 flags 0x0000 
AD flags 0x06 
eir_len 23
…

The relative signal strength indicator is rssi -80, but the list is much longer containing more information about this and other devices.

To spy on your Bluetooth neighbourhood showing only unique MAC addresses with their strongest RSSI, run the following command:

$ sudo btmgmt find |grep rssi |sort -n |uniq -w 33

hci0 dev_found: 40:43:42:B3:71:11 type LE Random rssi -53 flags 0x0000 
hci0 dev_found: 44:DA:5F:EA:C6:CF type LE Random rssi -78 flags 0x0000 
hci0 dev_found: 7F:7D:08:6B:E0:37 type LE Random rssi -74 flags 0x0000 
hci0 dev_found: A4:58:0F:21:A1:8C type BR/EDR rssi -79 flags 0x0000
like image 6
Serge Stroobandt Avatar answered Nov 06 '22 09:11

Serge Stroobandt