単体の Bluetooth Beacon は、ただ電波を発信する無線機に過ぎません。位置や在席、テレメトリといった真の価値は、そのパケットを受信してフィルタリングし転送するゲートウェイとエッジ層によって生まれます。本記事では、Beacon からゲートウェイへのパイプラインをどう設計し、どこに演算を置き、大規模時に帯域と遅延をどう抑えるかを解説します。

ゲートウェイの実際の役割

ゲートウェイはアップリンク付きの BLE スキャナです。受信した各広告パケットに対して次を行います。

1. 重複排除(同一 MAC+シーケンスは重複する 3 つのゲートウェイで聞こえることがある)

2. 同期クロック(NTP/PTP)でのタイムスタンプ付与(三角測位を一致させるため)

3. RSSI の正規化(無線ごとにフロントエンド利得が異なる)

4. ウィンドウ内(例 1 秒)でのタグごとの集約を 1 レコードに

5. アップリンクでの転送

エッジとクラウド

これをすべてクラウドで行うと、生パケットをすべて送信することになります。タグ 500 個を 1 秒間隔にすると、毎秒約 500 パケット発生します。これをサイト間で送るのは無駄です。エッジゲートウェイは*タグごと秒あたり 1 つの集約レコード*を出力すべきで、量はタグを聞いたゲートウェイ数で削減されます。

データフロー

<strong><a href="https://www.tecksay.com/category/products/bluetooth-beacon/">Beacon</a></strong> ADV ──▶ Gateway (BLE scanner)
├─ dedupe + timestamp
├─ RSSI smoothing (Kalman / moving avg)
└─ aggregate 1 Hz record
│
▼
MQTT broker  (topic: site/floor/tag/uid)
│
▼
Cloud ingestion ──▶ dashboard / alerting

エッジフィルタリングの数学

重複排除キー = (mac, seq)。スライディングセットを保持し、T_dedup(例 5 秒)内の重複を破棄。タグごとの RSSI 平滑化:

rssi_smoothed = α·rssi_new + (1-α)·rssi_prev     (α ≈ 0.3)

これにより、位置飛びを疑わせる単発のスパイクを除去します。

アップリンクプロトコル

MQTT が自然な選択です。ゲートウェイは tecksay///beacon/ に発行し、クラウドは一度購読します。HTTP POST はデバッグしやすいもののキープアライブ接続が必要です。CoAP は制約の厳しいゲートウェイに向きます。

帯域の数学

タグ 500、1 Hz、各タグを平均 2.5 無線で聞く、集約後ペイロード 120 B とします。

  • クラウドへの生データ:500 × 120 B × 2.5 = 150 KB/秒(重複で無駄)
  • エッジ集約:500 × 120 B = 60 KB/秒、単一コピー

この 2.5 倍の削減はゲートウェイ密度とともに拡大します。

遅延予算

タグでの事象 → 広告間隔内(≤1 秒)でゲートウェイが捕捉 → エッジ集約 1 秒 → MQTT ホップ約 50 ms → ダッシュボード。エンドツーエンドは通常 2〜3 秒で、ネットワークではなく広告間隔に支配されます。

クラウド停止時のバッファ

ゲートウェイはデータを落としてはなりません。直近 1 時間などのローカルリングバッファを保持し、再接続時に指数バックオフで再生します。再生レコードには (gateway, seq) でクラウドが重複排除できるよう印を付けます。

セキュリティ

  • アップリンクは TLS。平文 RSSI をサイト外へ出さない。
  • ゲートウェイごとの認証トークン(共有シークレットではない)。
  • 各レコードに `sig = HMAC(k, payload)` で署名し、なりすましゲートウェイが偽位置を注入できないように。
  • ゲートウェイ鍵は定期ローテーション。

配置トポロジ

ゲートウェイを 20〜30% 重複させ、各タグが常に 2 以上の無線に聞こえるように(三角測位に必要)。重複が多いほど精度は上がりますが重複排除負荷も増えます。ゲートウェイ間のハンドオフは暗黙的です。クラウドは単に、タグを聞いた無線の最新レコードを融合します。

チェックリスト

  • [ ] ゲートウェイクロック同期(NTP, ±50 ms)
  • [ ] 重複排除キー = mac+seq, T_dedup 設定
  • [ ] エッジで RSSI 平滑化
  • [ ] 集約 1 Hz レコード(生パケットではない)
  • [ ] サイト階層トピックの MQTT
  • [ ] ローカルリングバッファ+停止時再生
  • [ ] TLS +ゲートウェイごと署名レコード
  • [ ] 20〜30% ゲートウェイ重複