可用macos内置airport命令实时采集rssi:定位工具路径后,提取agrctlrssi字段,每2秒记录有效值到csv,用numbers或pandas绘图时需正确解析时间戳并注意负值含义。

直接用系统自带的 airport 命令 + 简单 shell 脚本就能完成实时 RSSI 采集,无需安装任何第三方工具。关键在于路径稳定、输出清洗、时间对齐,否则后续绘图或分析会出错。
如何用 terminal 实时获取当前 RSSI 值
macOS 内置的 airport 工具位于私有框架路径下,输出是多行文本,必须精准提取 agrCtlRSSI 字段:
-
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I是标准路径,但新版 macOS(如 Sequoia)可能已移至Versions/A或Versions/B;若报command not found,先运行mdfind airport | grep Resources找最新位置 - 必须已连接 Wi-Fi,否则
agrCtlRSSI可能为空或显示-100—— 这不是真实信号,是无效占位值 - 不要只依赖
grep agrCtlRSSI,建议加awk '{print $2}'避免字段错位;例如:/path/to/airport -I | grep agrCtlRSSI | awk '{print $2}' - 同一时刻可同时读取
agrCtlRSSI(主天线)和agrExtRSSI(扩展天线),差异 > 8 dBm 可能提示天线遮挡或设备朝向问题
怎样每秒记录 RSSI 到 CSV 并避免日志损坏
轮询频率不能盲目设为 1 秒:airport -I 本身有约 300–500ms 延迟,高频调用易触发内核限流,导致部分采样返回空值或卡死。稳妥做法是 2 秒间隔,并加简单容错:
- 用
date '+%Y-%m-%d %H:%M:%S'保证时间戳格式统一,避免 Excel/Numbers 解析失败 - 写入前检查值是否为数字:用
[[ "$rssi" =~ ^-?[0-9]+$ ]] && echo "$ts, $rssi" >> rssi_log.csv过滤掉-100或空行 - 不要用
while true; do ... sleep 2; done直接跑在前台终端——Ctrl+C 可能中断不干净,推荐改用nohup或另开窗口运行 - 如需限定总时长(比如测通勤路上 10 分钟衰减),用
timeout 600 bash -c 'while ...'更可靠
用 Numbers 或 Python 快速画出 RSSI 衰减趋势图
CSV 日志里只有两列(时间、RSSI),但绘图时容易忽略三个细节:
- Numbers 导入 CSV 后,默认把时间列当文本处理,需手动选中该列 → 右键「格式」→「数据类型」→「日期与时间」,否则横轴无法按时间排序
- Python 用
pandas.read_csv()读取时,加上parse_dates=['timestamp']和index_col='timestamp',再调df['rssi'].plot()就自动按时间索引绘图 - RSSI 是负数,数值越小(如 -85)代表越弱,但折线图默认 y 轴从下往上增长——别误判“上升=变好”;建议在图中标注参考线:
plt.axhline(y=-70, color='orange', linestyle='--', label='临界值') - 如果想看波动剧烈程度,可用
df['rssi'].rolling(10).std()计算滑动标准差,> 4 dBm 持续超过 30 秒,大概率存在干扰源
真正难的不是采集,而是区分“正常波动”和“有效衰减”。比如穿一堵木门 RSSI 下降 4–6 dBm 是合理的,但同一位置 30 秒内反复在 -55 和 -82 之间跳变,基本可锁定微波炉或 USB 3.0 设备干扰——这时候看信道比看 RSSI 更有用。










