it-swarm.com.de

Bluetooth LE Signalstärke Linux

Hallo, gibt es eine Möglichkeit, die Signalstärke von Bluetooth-Geräten in der Nähe von Linux zu erhalten? Oder eine gute Bibliothek für nodejs, php oder mono (ich kenne zwar etwas C++ oder Python, würde es aber lieber weglassen), wenn ein Tool nicht vorhanden ist, aber ziemlich einfach zu schreiben wäre

Danke dir

14
Tim Holum

Unter Linux geschieht dies mit dem Befehl hcitool. Sie müssen jedoch verbunden sein, um das rssi eines Geräts zu erhalten. Wenn Sie dies über die Befehlszeile erreichen möchten, versuchen Sie Folgendes:

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

Wenn Sie den tatsächlichen C-Code anzeigen möchten, um dies zu erreichen, schauen Sie sich die Datei bluez -tools/hcitool.c unter der Funktion cmd_rssi an.

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

Für Bluetooth Low Energy kenne ich nur einen Weg, und zwar den Befehl #btmon. Führen Sie btmon im Hintergrund aus und suchen Sie dann nach Bluetooth Low Energy-Geräten:

#./btmon &
# hcitool lescan

Die auf dem Monitor angezeigten Ergebnisse sollten folgendermaßen aussehen:

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

Beachten Sie, dass Sie bei der Verwendung von btmon keine Verbindung herstellen müssen, um das rssi eines BLE-Geräts zu erhalten.

Ich hoffe das hilft.

29
Youssif Saeed

Sie können eine Kombination aus: Sudo hcitool lescan --duplicates &; Sudo hcidump --raw verwenden 

auf diese Weise erhalten Sie den Rohdump aller Bluetooth-Pakete, die alle relevanten Informationen enthalten, an denen Sie interessiert sein müssen, wie beispielsweise: UUID, Major, Minor, RSSI, TxPower. Sie müssen ein Skript ausführen, um LE-Pakete zu analysieren, zu filtern und in lesbare Form zu bringen. 

Eines der mit dem Bash- und S-Editor erstellten Skripts wurde von jjnebaker here mit dem Problem und der Lösung here bereitgestellt.

Die andere Option besteht darin, PyBluez mit dem Beispielcode here .__ zu verwenden. Möglicherweise finden Sie jedoch auch die von Switchdoc-Laboren bereitgestellte Lösung, die Ihren Anforderungen entspricht. Hier

4
Asif Nadeem

Ok Entschuldigung für die andere Antwort ...

Dies funktioniert für die Sprache c, es tritt jedoch ein Fehler auf, wenn die Bytes umgewandelt werden, die Informationen über das de rssi-Signal haben . https://github.com/glock45/intel-edison-playground/blob/master/scan. c

diese Zeile 121: printf ("% s - RSSI% d\n", addr, (char) info-> data [info-> length]);

sollte sein: printf ("% s - RSSI% d\n", addr, (int8_t) info-> data [info-> length]);

ich habe diese gefunden, indem ich in bluez-version/monitor/* .c nachgeschaut habe, wo das btmon-Programm ist. Sie können die Datentypen und -strukturen sehen, hcidump.c ist sehr nützlich und pakete.c und auch main.c, aber es gibt viele Informationen über die hci-Sockets 

3
Yao Hao

Ich habe auch ein Programm gefunden, das ich bearbeiten konnte, um das zu tun, was ich wollte. Ich habe es auf meinem Github-Konto durchgearbeitet https://github.com/tholum/bluez/blob/master/blue.py =

2
Tim Holum

Keine Notwendigkeit, sich mit btmgmt zu verbinden

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

relative Signalstärkeanzeigerssi -80 und die Liste wird für dieses und andere Geräte noch eine Weile fortgesetzt.

Führen Sie den folgenden Befehl aus, um Ihre Bluetooth-Umgebung auszuspionieren, in der nur eindeutige MAC-Adressen mit der stärksten RSSI angezeigt werden:

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

versuchen :

$ bluez-test-discovery

ausgabe :

[ 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

gibt dir: RSSI = -65

0
bluemantoothed