人、モノの検知をするためにWifiおよびBLE(Bluetooth Low Energy)を活用する方法を調査した。
・Wifi
WifiクライアントはAPに接続していなくともプローブ要求(probe reauest)を実施しており、この通信を補足することでWifi端末の存在を知ることができる。ただし、iphoneなどはWifi通信のMACアドレスのランダマイズ化を行うなどして端末の特定を困難にしている。
・BLE
BLE端末の存在を知るには2つの方法がある。
1つ目はBluetoothスレーブ(ペリフェラル機器)からマスター(セントラル機器)へのアドバタイズを受信してBLE端末の存在を知る方法である。
2つ目はマスターからのScanリクエストを行い、スレーブからレスポンスを受信する方法。
Wifiと同じく、iphoneはBluetoothのアドレスもランダマイズ化する。
Pythonライブラリであるbleakを用いてScanリクエストのサンプルを以下に示す。
※参考サイト
https://atatat.hatenablog.com/entry/2020/07/09/003000#3-Bleak%E3%81%AE%E5%88%A9%E7%94%A8
1.Bleakのインストール
pip install bleak
2.サンプルコードの実行
discover関数(以下のサンプルをble.pyとして保存)
import asyncio
from bleak import discover
async def run():
devices = await discover()
for d in devices:
print(d.address,d.name,d.rssi)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())

上記プログラムを何回か実行するとわかるが、Bluetoothアドレスが変化することがわかる。
■Bluetoothビーコンについて
BLEによる端末検知方法としてビーコンを用いる方法がある。ビーコンはBluetooth通信におけるアドバタイズを行うことでビーコンの存在を知らしめることができる。AppleはiBeaconというプロトコルを定義しており、この仕様に基づいてBluetooth機器からビーコンを発出することで検知可能となる。またLINE BeaconというものもありLINE Beacon受信が有効になっているスマホ等で受信するとLINE Botと連携して所定の動作を行うことができる。
■マイコンを使ったLINE Beacon作成について
以下サイトが参考になる。
https://zenn.dev/n0bisuke/articles/e2e400dda8e6eb7b1e9f
■アイデア
・BLEペリフェラル機器としてM5stickなどをiBeaconもしくはLINE Beacon発信装置とする。
・Raspberry piをBLEセントラル機器としてBeacon信号を受信
※参考URL:https://tomosoft.jp/design/?p=42548
・受信したビーコンのUUIDや距離(RSSI値)によりアクションを決定
・LINE Botと連携する場合はLINE Beaconにする必要がある。LINE Botと連携するWebhookについてはngrokを使うと簡単に試験ができそう。(https://ngrok.com/)