我要给你展示一个会彻底改变你对客厅里那台WiFi路由器看法的东西。它不仅仅是一个连接互联网的网关,它是一个能看到你呼吸的雷达系统。
不是科幻小说,是物理学。而且你这个周末就能自己搭建一个。
等等,什么?我的路由器能看到我?
事情是这样的:现代WiFi(802.11ac/ax)使用一种叫做**波束成形(beamforming)**的技术。你的路由器有多根天线,它不会向所有方向均匀地广播信号,而是将信号聚焦到你的设备上。把它想象成聚光灯而不是泛光灯。
为了实现这一点,你的路由器和设备不断交换关于信号的反馈,特别是一种叫做**BFI(Beamforming Feedback Information,波束成形反馈信息)**的数据。这些数据精确描述了无线电波在你房间里的反射情况。
关键来了:这种反馈是未加密的。任何人都可以捕获它。而当你这个会反射无线电波的"大水袋"在房间里移动时,BFI数据就会发生变化。走过你的客厅,数学计算就能清楚地显示你的移动。
用简单的话解释科学原理
你的身体会反射WiFi信号。当你移动时,反射会改变。你的路由器追踪这些变化来优化信号强度。这些追踪数据是公开广播的。捕获它们,你就有了一个能穿墙工作的运动传感器。
研究人员已经利用这项技术检测呼吸模式、统计房间里的人数、识别手势,甚至通过走路姿势识别特定的人。已经有商业产品能把你现有的WiFi变成全屋运动检测系统。
隐私影响(是的,这令人担忧)
在我们进入有趣的项目部分之前,先来谈谈一个重要的问题:这是一个隐私问题。
你的WiFi网络在不断广播可以揭示以下信息的数据:
- 家里是否有人
- 一个房间里有多少人
- 你家里的大致移动模式
- 可能还有具体活动(做饭、睡觉、运动)
有人带着合适的设备停在你家门口,理论上就能捕获这些数据。他们不需要连接你的网络,只需要接收你路由器广播的BFI帧就行。
"让你WiFi更快的同一种技术,也让你的家对任何知道怎么看的人变得透明。"
这不是假设。研究论文已经证实了这一点。它没有被广泛利用的唯一原因是大多数人不知道这是可能的。这个……算不上好的安全保障。
为什么要自己动手做?
那我为什么要告诉你怎么做呢?几个原因:
1. 理解威胁模型。 你无法防御你不了解的东西。亲眼看到它的运作方式,会让它变得真实,这是单纯阅读无法做到的。
2. 合法用途确实很酷。 不用摄像头的智能家居运动检测。用于自动化的存在感应。为老年亲属做跌倒检测。通过知道哪些房间有人来节省能源。所有这些都不需要到处安装传感器。
3. 这真的很迷人。 你在把无线电波变成物理空间的可视化。这简直太赛博朋克了。
我们要做的是道德的、仅限自己网络的实验。你在自己的房子里监测自己的WiFi,来理解你已经在使用的技术。这不仅合法,而且是明智之举。
两条路径:选择你的冒险
我会根据你的技术水平和手头的硬件给你两个选择。
路径A:完整体验(Linux + Wi-BFI)
- 时间: 30-60分钟
- 难度: 中等(需要命令行操作)
- 硬件: Linux电脑 + 支持监听模式的WiFi适配器
- 结果: 实时可视化BFI数据,在图表中看到你的移动
路径B:即插即用(ESP32 + ESPectre)
- 时间: 15-30分钟
- 难度: 简单(网页烧录器,复制粘贴配置)
- 硬件: ESP32-S3或ESP32-C6开发板(约$10)
- 结果: 在Home Assistant中运行的运动传感器
路径A:深入Wi-BFI
这是"查看实际数据"的方法。你将从路由器捕获真实的BFI帧,并观察它们随着你移动而变化。这和研究人员在学术论文中使用的方法一样。
你需要什么
- Linux电脑 — Ubuntu 22.04/24.04,或树莓派
- 支持监听模式的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:开始捕获
打开两个终端。在第一个终端中,启动捕获:
cd ~/Wi-BFI/Demo
# Replace values with your actual settings
./angle_collection.sh my_capture wlan0 36 80MHz 1在第二个终端中,启动实时可视化:
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的网页烧录器(链接在他们的仓库里)。插入你的ESP32,点击烧录,搞定。
2. 配置WiFi — 开发板会创建一个热点。连接它,输入你的家庭WiFi凭据。
3. 添加到Home Assistant — 如果你运行着Home Assistant,它会自动发现为运动传感器实体。然后你可以设置自动化:检测到运动时开灯、离家时发送警报等。
4. 就这么简单。 你现在有了一个能穿墙工作的运动传感器,不需要直线视距,使用的是你现有的WiFi基础设施。
实际应用场景
- 全屋存在检测: 无需摄像头就知道哪些房间有人
- 睡眠追踪: 检测某人是否在床上(无需穿戴设备)
- 安全防护: 所有人外出时检测到运动则发送警报
- 自动化: 基于实际房间占用情况控制暖通空调和照明
- 老人护理: 跌倒检测、活动监测
Home Assistant:真正有趣的地方
在这里,我们把一个很酷的科学项目变成真正实用的家庭自动化。一旦你的WiFi运动传感器连接到Home Assistant,你就可以创建原本需要几十个PIR传感器、摄像头或昂贵商业系统才能实现的自动化。
WiFi感应的美妙之处在于它能穿墙工作。走廊里的一个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. 基于房间占用的智能暖通空调:
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集成专业技巧
- 多个传感器: 部署2-3个ESP32实现全屋覆盖。每层一个效果不错。
- 调整灵敏度: 在ESPectre配置中调整检测阈值,避免宠物引起的误报。
- 与其他传感器组合: 用WiFi运动检测作为"粗略"检测器,再用门窗传感器进行精确判断。
- 模板传感器: 创建将多个房间组合成区域的二进制传感器(楼上、楼下等)。
- 历史追踪: 使用Recorder组件记录运动模式。对安全分析很有用。
杀手级用例:全屋存在检测
传统的运动传感器(PIR)只能检测热量和移动。它们无法判断一个人是否静坐不动。WiFi感应可以。它能检测呼吸、打字或只是待在某个空间中的微小动作。
这意味着你可以创建即使你在桌前安静工作也知道你在房间里的自动化。灯不会因为你停止移动就关掉。暖通空调不会因为你在看书就降低温度。
这是存在检测,不仅仅是运动检测。而你只花了$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" 深入了解