近くのBluetoothデバイスとRSSI値を表示するスキャナを作成したいと思います。デバイスをペアリングしたり接続したくない。デバイスは完全に静かでなければなりません。私が知っている限り、Unix Bluetoothフレームワーク(bluezなど)には少なくとも1つの接続が必要です。カーネル/ブルートゥースモジュールによって決まりますか?
答え1
クエリスキャン結果とともにRSSI情報が返されるかどうかは、Bluetoothアダプタによって異なります。一部にはこの機能が含まれており、一部には含まれていません。 hciconfigを使用して「RSSI」文字列を検索して、ローカルBluetoothアダプタの機能を識別できます。
# hciconfig -a hci0 features | grep RSSI
<park state> <RSSI> <channel quality> <SCO link> <HV2 packets>
<interlaced iscan> <interlaced pscan> <inquiry with RSSI>
ハードウェアがRSSIクエリをサポートしている場合は、Bluetoothアダプタのカーネルドライバを変更する必要はありません。 RSSI情報を抽出するには、クエリスキャンの結果を解析するためにBluetoothソケットを開くコードを書く必要があります。 BTFfindにPythonの実装があります。https://github.com/joswr1ght/btfind/blob/master/btfind.pyBTPollerクラスから。
クエリモードスキャンは自動ではありません。 「探索者」はクエリ要求パケットを送信しているため、スニファーは検出できます。静かな選択肢は、Ubertooth Oneハードウェアを使用してパケットスニファモードで実行することです。ただし、2番目のBluetoothアダプタがないと、Bluetoothネットワークに参加できません。