あなたのリビングルームにあるWiFiルーターについての考え方を変えるものを見せようと思う。それは単なるインターネットへの入口じゃない。あなたが呼吸しているのを見ることができるレーダーシステムなんだ。
SFじゃない。物理学だ。そして今週末、自分で作ることができる。
ちょっと待って、何?ルーターが私を見える?
実際に何が起きているかというと:現代のWiFi(802.11ac/ax)はビームフォーミングと呼ばれるものを使っている。あなたのルーターには複数のアンテナがあり、信号をすべての方向に均等に送信する代わりに、あなたのデバイスに向けて信号を集中させる。投光器ではなくスポットライトのようなものだと考えてほしい。
これを行うために、ルーターとデバイスは常に信号についてのフィードバックをやり取りしている。具体的には**BFI(Beamforming Feedback Information)**と呼ばれるもの。このデータは、電波があなたの部屋の中でどのように反射しているかを正確に記述している。
そしてここが重要なポイント:このフィードバックは暗号化されていない。誰でもキャプチャできる。そして電波を反射する大きな水袋であるあなたが部屋を移動すると、BFIデータが変化する。リビングルームを歩くと、数学的にあなたの動きがそのまま表示される。
科学をわかりやすく
あなたの体はWiFi信号を反射する。動くと、反射が変わる。ルーターは信号強度を最適化するためにこれらの変化を追跡する。その追跡データはオープンに送信される。それをキャプチャすれば、壁越しに機能するモーションセンサーの完成だ。
研究者たちはこれを使って呼吸パターンの検出、部屋の人数のカウント、ジェスチャーの認識、さらには歩き方で特定の個人を識別することにまで成功している。既存のWiFiを家全体のモーション検知システムに変える商用製品もすでに存在している。
プライバシーへの影響(そう、心配すべきこと)
楽しいプロジェクトの部分に入る前に、部屋の中の象に触れておこう:これはプライバシーの問題だ。
あなたのWiFiネットワークは常に以下を明らかにできる情報を送信している:
- 誰かが家にいるかどうか
- 部屋に何人いるか
- 家全体の一般的な動きのパターン
- 潜在的に、具体的な活動(料理、睡眠、運動)
あなたの家の外に停車した適切な機材を持つ誰かが、理論的にこのデータをキャプチャできる。あなたのネットワークに入る必要はない。ルーターが送信しているBFIフレームを受信するだけでいい。
「あなたのWiFiを速くする同じ技術が、見方を知っている人には家を透明にもする。」
これは仮説じゃない。研究論文がそれを実証している。より広く悪用されていない唯一の理由は、ほとんどの人がそれが可能だと知らないからだ。それは...あまり良いセキュリティとは言えない。
なぜ自分で作るのか?
ではなぜ私がやり方を教えているのか?いくつかの理由がある:
1. 脅威モデルを理解する。 理解していないものから身を守ることはできない。これが自分の目の前で動くのを見ることで、読むだけでは得られないリアリティが生まれる。
2. 正当な用途が本当にクールだ。 カメラなしのスマートホームモーション検知。オートメーション用のプレゼンスセンシング。高齢の親族のための転倒検知。どの部屋が使われているかを知ることによる省エネ。すべてセンサーをあちこちに設置することなく。
3. 本当に魅力的だ。 電波を物理空間の可視化に変換している。これは完全にサイバーパンクだ。
私たちが作っているのは倫理的な、自分のネットワークだけでの実験だ。自分の家で、自分のWiFiをモニタリングして、すでに使っている技術を理解する。それは合法なだけじゃなく、賢い。
2つの道:冒険を選ぼう
あなたの快適さのレベルと手元にあるハードウェアに応じて、2つのオプションを提供する。
道A:フル体験(Linux + Wi-BFI)
- 時間: 30-60分
- 難易度: 中級(コマンドライン必要)
- ハードウェア: Linuxマシン + モニターモード対応WiFiアダプター
- 結果: BFIデータのライブ可視化、リアルタイムプロットで自分の動きを確認
道B:プラグアンドプレイ(ESP32 + ESPectre)
- 時間: 15-30分
- 難易度: 簡単(Webフラッシャー、コピペ設定)
- ハードウェア: ESP32-S3またはESP32-C6ボード(約$10)
- 結果: Home Assistantで動くモーションセンサー
道A:Wi-BFIディープダイブ
これは「実際のデータを見る」アプローチだ。ルーターから実際のBFIフレームをキャプチャし、あなたが動き回るにつれて変化する様子を可視化する。研究者が学術論文で使うのと同じ方法だ。
必要なもの
- Linuxマシン — Ubuntu 22.04/24.04、またはRaspberry Pi
- モニターモード対応WiFiアダプター — ほとんどの内蔵Intel/Broadcom/Realtekチップが動作する。ダメなら、$15のUSBドングル(TP-Link AC600やAlfa AWUS036ACHなど)で対応可能。
- 既存のWiFiルーター — 802.11acまたは802.11axルーター(つまり過去5年間のほぼすべてのルーター)
ステップ1:ツールのインストール
ターミナルを開いて実行:
# Install system dependencies
sudo apt update
sudo apt install tshark wireshark aircrack-ng git -y
# Install Miniconda (skip if you already have conda)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b
~/miniconda3/bin/conda init
# Close and reopen terminal after thisステップ2:Wi-BFIをクローン
# Get the tool
git clone https://github.com/kfoysalhaque/Wi-BFI.git
cd Wi-BFI
# Create the environment
conda env create -f wi-bfi.yml
conda activate wi-bfiステップ3:ネットワーク情報を見つける
ルーターのチャンネルと帯域幅を知る必要がある。実行:
# See your wireless interface name
iw dev
# Or open Wireshark and scan for networksインターフェース名(通常wlan0またはwlp2s0)、チャンネル(36や149など)、帯域幅(5GHzでは80MHzが一般的)をメモしよう。
ステップ4:キャプチャ開始
2つのターミナルを開く。1つ目でキャプチャを開始:
cd ~/Wi-BFI/Demo
# Replace values with your actual settings
./angle_collection.sh my_capture wlan0 36 80MHz 12つ目のターミナルでライブ可視化を開始:
cd ~/Wi-BFI
# Replace YOUR_PHONE_MAC with your phone's MAC address
# (find it in your router's admin page or phone settings)
python main_live_plot.py AX SU 4x2 80 YOUR_PHONE_MAC my_capture 1ステップ5:魔法を見よう
部屋の中を歩いてみよう。プロットを見てほしい。角度と振幅が揺れているのが見えるだろう?それはあなたの体がWiFi波を反射しているんだ。 数学が文字通り空間内のあなたの動きを追跡している。
じっと立っていると、プロットが安定する。スマホの前を通ると、スパイクが出る。腕を振ると、対応する変化が見える。これがモーション検知、ジェスチャー認識、あるいは...監視に使えるのと同じデータだ。
道B:ESP32イージーモード
Linuxとモニターモードで面倒なことをしたくない?ESP32ボードを入手すれば、15分で動くモーションセンサーが手に入る。
必要なもの
- ESP32-S3またはESP32-C6ボード — Amazonで約$8-12。ESP32-C6は新しく、とてもうまく動く。
- USB-Cケーブル — ボードのフラッシュ用
- Home Assistant — オプションだが、フル体験には推奨
ESPectreプロジェクト
ESPectreは、WiFiをモーションセンサーに変えるために特別に設計されたオープンソースプロジェクトだ。そのシンプルさが素晴らしい。
GitHub: github.com/francescopace/espectre
セットアップ手順
1. ボードをフラッシュ — ESPectreのWebフラッシャー(リポにリンクあり)へ行く。ESP32を接続し、フラッシュをクリック、完了。
2. WiFiを設定 — ボードがホットスポットを作成する。それに接続し、自宅WiFiの認証情報を入力。
3. Home Assistantに追加 — Home Assistantを実行中なら、モーションセンサーエンティティとして自動検出される。モーション検知時にライトオン、外出時にアラートなどのオートメーションをトリガーできる。
4. 文字通りそれだけ。 これで壁越しに機能し、見通し線不要で、既存のWiFiインフラを使うモーションセンサーが手に入った。
実用的な使い方
- 家全体のプレゼンス: カメラなしでどの部屋が使用中か把握
- 睡眠トラッキング: ウェアラブルなしで誰かがベッドにいるか検知
- セキュリティ: 全員外出時にモーション検知でアラート
- オートメーション: 実際の部屋の使用状況に基づくHVAC、照明
- 高齢者ケア: 転倒検知、活動モニタリング
Home Assistant:本当に楽しくなるところ
ここでクールな科学プロジェクトを本当に役立つホームオートメーションに変える。WiFiモーションセンサーがHome Assistantと通信し始めると、通常なら数十個のPIRセンサー、カメラ、高価な商用システムが必要になるオートメーションを構築できる。
WiFiセンシングの素晴らしさは壁越しに機能すること。廊下の1台のESP32が複数の部屋のモーションを検知できる。見通し線不要。デッドゾーンなし。電池交換なし。
オートメーション例(コピペ用YAML)
1. 部屋に入ったときにライトオン:
automation:
- alias: "Living Room Motion Lights"
trigger:
- platform: state
entity_id: binary_sensor.wifi_motion_living_room
to: "on"
condition:
- condition: sun
after: sunset
action:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 80
transition: 22. 外出モードのセキュリティアラート:
automation:
- alias: "Motion Alert When Away"
trigger:
- platform: state
entity_id: binary_sensor.wifi_motion_main_floor
to: "on"
condition:
- condition: state
entity_id: input_boolean.away_mode
state: "on"
action:
- service: notify.mobile_app
data:
title: "Motion Detected!"
message: "Movement in the house while you're away."
data:
priority: high
ttl: 03. 部屋の使用状況に基づくスマートHVAC:
automation:
- alias: "Office HVAC When Occupied"
trigger:
- platform: state
entity_id: binary_sensor.wifi_motion_office
to: "on"
for:
minutes: 2
action:
- service: climate.set_temperature
target:
entity_id: climate.office
data:
temperature: 72
hvac_mode: heat_cool
- alias: "Office HVAC Standby When Empty"
trigger:
- platform: state
entity_id: binary_sensor.wifi_motion_office
to: "off"
for:
minutes: 15
action:
- service: climate.set_temperature
target:
entity_id: climate.office
data:
temperature: 65
hvac_mode: auto4. 就寝時間の検知(ウェアラブル不要):
automation:
- alias: "Detect Bedtime"
trigger:
- platform: state
entity_id: binary_sensor.wifi_motion_bedroom
to: "on"
condition:
- condition: time
after: "22:00:00"
before: "02:00:00"
- condition: state
entity_id: binary_sensor.wifi_motion_living_room
state: "off"
for:
minutes: 10
action:
- service: scene.turn_on
target:
entity_id: scene.goodnight
- service: lock.lock
target:
entity_id: lock.front_door
- service: alarm_control_panel.arm_night
target:
entity_id: alarm_control_panel.home5. 高齢者ケア / 転倒検知アラート:
automation:
- alias: "No Motion Alert - Elder Care"
trigger:
- platform: state
entity_id: binary_sensor.wifi_motion_parents_house
to: "off"
for:
hours: 4
condition:
- condition: time
after: "08:00:00"
before: "22:00:00"
action:
- service: notify.mobile_app
data:
title: "Check on Mom"
message: "No motion detected for 4 hours during daytime."
data:
priority: highHome Assistant統合のプロTips
- 複数センサー: 家全体をカバーするために2-3台のESP32を配置。1フロアに1台でうまくいく。
- 感度調整: ペットによる誤検知を避けるため、ESPectre設定で検知しきい値を調整。
- 他のセンサーと組み合わせ: WiFiモーションを「大まかな」検知器として使い、ドア/窓センサーで詳細を補完。
- テンプレートセンサー: 複数の部屋をゾーン(2階、1階など)にまとめるバイナリセンサーを作成。
- 履歴追跡: Recorderコンポーネントを使って時間経過に伴うモーションパターンを記録。セキュリティ分析に便利。
最強のユースケース:家全体のプレゼンス
従来のモーションセンサー(PIR)は熱と動きだけを検知する。誰かがじっと座っているかどうかはわからない。WiFiセンシングならわかる。呼吸、タイピング、あるいは単にその空間に存在することの微小な動きを検知する。
これは、デスクで静かに作業しているときでも部屋にいることを知るオートメーションを構築できるということ。動くのをやめたからライトが消えることはない。本を読んでいるからHVACが下がることもない。
これはプレゼンス検知であり、単なるモーション検知ではない。そしてそれを$10で作った。
さらに先へ:モーション検知を追加
ライブBFIデータのストリーミングが得られたら(道Aから)、約10行のPythonで実際のモーション検知を追加できる。コンセプトはシンプル:角度の分散がしきい値を超えたら、何かが動いた。
import numpy as np
# Assuming you have a stream of angle data
def detect_motion(angle_buffer, threshold=0.5):
"""Returns True if motion detected in recent samples"""
if len(angle_buffer) < 10:
return False
variance = np.var(angle_buffer[-10:])
return variance > threshold
# In your main loop:
if detect_motion(recent_angles):
print("Motion detected!")
# Trigger alert, log event, whatever you wantこれは基本バージョン。研究論文はより高度なテクニックを使用している:機械学習分類器、複数アンテナストリーム、時間的パターンなど。動きの種類を区別したり、人数を数えたり、特定の活動を認識したりするためだ。
プライバシーにとっての意味
動作するのを見たところで、これが何を意味するか話そう:
WiFiは常に送信している。 積極的に使っていなくても、ルーターとデバイスはBFIデータを交換している。電波の届く範囲にいる誰でもこれらのフレームをキャプチャできる。
暗号化はここでは役に立たない。 BFIは物理層のハンドシェイクの一部だ。暗号化の前に発生する。WPA3、VPN、どれもこの特定のデータには関係ない。
唯一の本当の対策は物理的なもの: ファラデーケージ(非現実的)、送信電力の低減(WiFiが壊れる)、あるいは自宅の在室パターンが電波の届く範囲では事実上公開情報であることを受け入れること。
これは恐怖を煽るためじゃない。インフォームドコンセントの話だ。あなたはこれらの特性を持つ技術を使っている。今、あなたはそれを知った。
まとめ
あなたはWiFiルーターが基本的にレーダーシステムであることを学び、電波を使って自分だけのモーション検知器を作り、私たちの周りの目に見えない信号が物理世界についての情報をどのように運んでいるかについて、より良い理解を得たはずだ。
テクノロジーは中立だ。便利なホームオートメーションにも、懸念される監視にも使える。重要なのはそれを理解すること。そうすれば、自分が受け入れているトレードオフについて、情報に基づいた判断ができる。
それに、見せびらかせるクールな週末プロジェクトもできた。「うん、WiFiをモーションセンサーに変えたよ。大したことないけど。」
かなり楽しい。
リソース
- Wi-BFI: github.com/kfoysalhaque/Wi-BFI
- ESPectre: github.com/francescopace/espectre
- WiFiセンシングの研究論文: Google Scholarで「WiFi CSI human activity recognition」を検索して深堀り