web-dev-qa-db-ja.com

Bluetooth LE信号強度Linux

こんにちはLinuxのbluetooth leのデバイスでnearの信号強度を取得する方法はありますか?または、nodejs、php、mono用の適切なライブラリ(c ++かpythonは知っていますが、それらを避けたいと思います))ツールが存在しないが、かなり簡単に作成できる場合

ありがとうございました

15
Tim Holum

Linuxでは、これを行う方法はhcitoolコマンドを使用することです。ただし、デバイスのrssiを取得するには接続する必要があります。コマンドラインからこれを実現したい場合は、以下を試してください:

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

これを実現するための実際のCコードを確認したい場合は、cmd_rssi関数の下のbluez tools/hcitool.c ファイルを確認してください。

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

Bluetooth Low Energyの場合、これを行う方法は1つしかわかりません。これは、#btmonコマンドを使用することです。バックグラウンドでbtmonを実行してから、Bluetooth Low Energyデバイスをスキャンします。

#./btmon &
# hcitool lescan

モニターに表示される結果は次のようになります。

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

Btmonを使用する場合、BLEデバイスのrssiを取得するために接続する必要がないことに注意してください。

これがお役に立てば幸いです。

30
Youssif Saeed

次の組み合わせを使用できます。Sudo hcitool lescan --duplicates&; sudo hcidump --raw

これは、UUID、メジャー、マイナー、RSSI、TxPowerなど、関心のあるすべての関連情報を含むすべてのBluetoothパケットの生のダンプを提供します。 LEパケットを解析してフィルタリングし、それらを読み取り可能な形式にするために、ある種のスクリプトを実行する必要があります。

BashおよびSエディターで作成されたスクリプトの1つは、jjnebaker here によって提供され、問題と解決策は here で議論されました

その他のオプションは、サンプルコード here を使用してPyBluezを使用することですが、Switchdocラボが提供するソリューションがニーズに応じて役立つ場合もあります。 ここ

4
Asif Nadeem

他の答えで申し訳ありません...

これはC言語で機能しますが、de rssi信号に関する情報を持つバイトをキャストするとエラーが発生します。 https://github.com/glock45/intel-edison-playground/blob/master/scan.c

この121行目:printf( "%s-RSSI%d\n"、addr、(char)info-> data [info-> length] );

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

btmonプログラムがあるbluez-version/monitor/*。cの内部を調べて、これらを見つけました。データ型と構造体を確認できます。hcidump.cは非常に便利で、packets.c、main.cも役立ちますが、hciソケットについて学ぶべきことがたくさんあります。

3
Yao Hao

私はまた、自分のgithubアカウントで自分がやりたいことを行うために編集できるプログラムを見つけました https://github.com/tholum/bluez/blob/master/blue.py =

2
Tim Holum

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
…

相対信号強度インジケーターrssi -80と、このデバイスと他のデバイスのリストはしばらく続きます。

最も強力なRSSIを持つ一意のMACアドレスのみを表示するBluetooth近所をスパイするには、次のコマンドを実行します。

$ 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

試してください:

$ bluez-test-discovery

出力:

[ 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

あなたに与える:RSSI = -65

0
bluemantoothed