Raspberry Piの範囲内にあるすべてのBluetoothデバイスを継続的に一覧表示してみてください。トラフィックを監視する必要はなく、デバイスのリストだけを一覧表示するだけです。広告パケット(フレーム?)からその情報を入手できることを願っています。
Ubuntu 18.04でいくつかの実験を行いましたが、Wiresharkでこれらのパケットを見ることができましたが、システムがBluetoothデバイスを積極的に検索するまでは見えませんでした。これらの広告を受動的に受信する方法はありますか、それともシステムに継続的に広告を確認させることができますか?シェルスクリプトでトリガーできるようにしたいです。
理想的には、適切なフィルタを使用してtsharkを実行し、その存在を知らせるすべてのデバイスを含む出力を取得するシェルスクリプトがあります。何らかの理由で動作しない場合は、これを行うためのカスタムプログラムを作成します。
デバイスを検索する前にシステムがBluetoothから何も受信できない理由と、スクリプトからこのモードに入る方法があるかどうかはわかりません。そこで私はtsharkが私が必要なことをすることができるのか、それともプログラムでなければならないのかについて質問します。
これまでに見つかったすべてのBluetoothコマンドを使用すると、GUIを使用してスキャンを開始できます。より直接的に制御する方法を教えてくれる内容は見たことがありません。
答え1
まあ、これがうまくいくような私が思いついたものです:
bluetoothctl scan on
sudo tshark -i bluetooth1 -Y "bthci_evt.le_meta_subevent == 0x2" -T fields -e bthci_evt.bd_addr -e bthci_evt.rssi
これにより、MACアドレスと信号強度を知ることができます。しかし、パイに組み込まれているBluetoothを使用すると、しばらくすると動作が停止することがわかりました。サービスを再起動してしばらく再実行できますが、毎回非常に迅速にシャットダウンします。
ちなみに、安価なUSB Bluetoothアダプタを使えば永遠に戻るようです。だから私はbluetooth0の代わりにbluetooth1をスニッフィングしています。これが良い永久的な解決策かどうかは時間が教えてくれるでしょうが、これまでは効果があるようです。
答え2
頑張った毛深いRaspberry Pi 4Bで解決策を見つけましたが、聞いてみるとbluetooth0
安定性の問題が見られず、内蔵Bluetoothモジュールがうまく機能し、外部USB Bluetoothモジュールは必要ありません。
ただし、回答で指定されたフィルタによれば、すべてのBluetoothデバイスのリストを取得できず、BLEデバイスのみを表示できます。
このコマンドを使用すると、すべてのデバイス(BLEおよび非BLE)のリストを取得し、そのデバイスのMACアドレス、RSSI、および名前を表示できます。
sudo tshark -i bluetooth0 -Y "(bthci_evt.code == 0x2f) || (bthci_evt.le_meta_subevent == 0x2 && btcommon.eir_ad.entry.device_name != '')" -T fields -e bthci_evt.bd_addr -e bthci_evt.rssi -e btcommon.eir_ad.entry.device_name
出力は次のとおりです。
d1:6e:XX:XX:XX:XX -65 Mi Smart Band 4
8c:5a:XX:XX:XX:XX -43 Mi Soundbar
c5:9d:XX:XX:XX:XX -69 ENDURE
d1:6e:XX:XX:XX:XX -61 Mi Smart Band 4
8c:5a:XX:XX:XX:XX -47 Mi Soundbar
-e btcommon.cod.class_of_device -e btcommon.cod.minor_device_class
BLE以外のデバイスに関する追加情報を表示するためにコマンドの最後に追加されました。
追加リソース: