ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

rtlamr 实测:RTL-SDR 收 900MHz 智能电表 ERT 广播,三行命令跑起来

2026/8/16 20:40:55 拓冰建站 浏览量
rtlamr 实测:RTL-SDR 收 900MHz 智能电表 ERT 广播,三行命令跑起来

智能电表怎么远程抄表的?这个问题我好奇了很久。直到看到 rtlamr 这个开源项目才明白:你家电表每隔几秒就在 900MHz 频段广播一次自己的 ID 和读数,任何人在信号范围内都能收到——不需要对电表做任何操作,不需要接线,一台几十块的 USB 电视棒加一个开源工具就行。

这篇文章从 ERT 协议原理讲起,给出完整的硬件选型和命令行实测,最后说清楚边界(包括国内能不能用)。

ERT 协议:电表为什么自己往外广播

ERT(Encoder Receiver Transmitter)是 Itron 公司设计的智能抄表协议。电力公司抄表员不用进你家门——他们开车在小区兜一圈,车上的接收器就能把各家各户的读数全收走。原理就是电表自己在 900MHz ISM 频段持续广播。

消息类型一共有六种:

类型 报什么 典型用途
SCM 标准消费消息,只报总用量 基础抄表
SCM+ 精度更高,ID 更长 新型表计
IDM 过去 47 个 5 分钟间隔的用量 看用电曲线(最值得收)
NETIDM 户用并网发电,用电+发电量 光伏户
R900 / R900BCD Neptune 水表,带漏水标记 水表

六种消息覆盖了电、水、气三种表。特别是 IDM,把 47 个 5 分钟采样点的数据一次报出来——你等于能看到一个家庭连续近 4 小时的用电曲线,几点开空调、几点关灯,一目了然。

前提说明:这是北美 Itron ERT 生态。中国智能电表走 DL/T 645 协议,不用 ERT,国内拿 RTL-SDR 收邻居电表大概率空手而归(后面细说)。

硬件:总投入七十块

  • RTL-SDR USB 接收棒:本质是 USB 电视棒,RTL2832U 芯片,淘宝搜"RTL-SDR"¥30-¥50
  • 900MHz 天线:¥15 左右
  • 电脑:装 Go 1.21+,跑 rtlamr

rtlamr 是 Go 写的开源工具,2511 Star,作者 bemasher 从 2014 年维护到现在,一个人维护了 12 年。

rtlamr 运行截图

三行命令跑起来

第一步:装 rtlamr

go install github.com/bemasher/rtlamr@latest

第二步:开两个终端

终端 A,启动 RTL-SDR 的 TCP 服务:

rtl_tcp

终端 B,启动 rtlamr:

rtlamr

两条命令零配置文件。首次运行自动扫描 900MHz 附近频段,锁定 ERT 信号后输出:

{Time:2024-01-01T12:00:00 SCM:{ID:12345678 Type:4 Tamper:{...} CRCValid:true Consumption:12345}}

纯文本一行一条消息,可以 > 重定向到文件,也可以管道给其他程序。

关键参数(实测常用)

rtlamr -h 能列出全部参数,常用的这几个值得记住:

# 只看指定电表 ID(比如你自己家的表)
rtlamr -filterid=12345678# 只收 IDM 消息(拿 5 分钟粒度用电曲线)
rtlamr -msgtype=idm# JSON 输出,方便接管道/程序处理
rtlamr -format=json# 去重:每个表只保留一条
rtlamr -unique=true# 指定接收时长后退出(脚本化采集)
rtlamr -duration=1h

参数说明(官方 wiki 原文):

  • -filterid:只显示逗号分隔 ID 列表中的电表消息
  • -filtertype:只显示指定类型的消息
  • -format:输出格式,plain / csv / json / xml
  • -msgtype:接收的消息类型,all / scm / scm+ / idm / netidm / r900 / r900bcd
  • -single:单次执行,配合 -filterid 时等每个表正好收到一个包
  • -unique:抑制每个电表的重复消息
  • -server:rtl_tcp 实例地址,默认 127.0.0.1:1234

所有参数都能用环境变量覆盖,格式是 RTLAMR_参数名大写,比如 RTLAMR_MSGTYPE=idm——方便 systemd / docker 管理进程时注入配置。命令行参数优先级高于环境变量。

实测数据:25 分钟收到 900 个设备

作者在 README 里写了实测:NooElec NESDR Nano R820T + 原厂天线,25 分钟窗口稳定收到约 300 个电表的信号,间歇收到另外 600 个

"稳定"的定义是预期 12 条消息至少收到 10 条,"间歇"是收到 3-9 条。这还是在典型的美国低密度社区测的——这个密度远超直觉。

每个数据包里有电表 ID、当前累计读数、时间戳;IDM 消息还有差分消费数据(过去几小时每个 5 分钟窗口的用量)。把数据画成曲线,能看出一个家庭的用电节奏。社区维护了一份 Google Sheets 收录实测兼容的表型,作者仓库里也有 meters.csv 按电、水、气分类。

数据管道:接入智能家居

rtlamr 社区已有 MQTT 桥接方案,数据流:

rtlamr → MQTT Broker → Home Assistant / Node-RED → InfluxDB → Grafana

-format=json 输出可以直接被桥接程序消费,从收数到可视化一整套管道都能搭起来。追踪家里哪个电器在偷电、关心光伏发了多少用多少、发现水管漏水而不是等账单——这是作者认证的"合乎伦理"用法。

边界与合规

rtlamr 是接收器,不是破解工具。它不发送任何信号、不篡改数据、不跟电表交互,只是被动监听 900MHz 频段的公开广播——法律上叫"非侵入式接收"。作者在 README 用一整段讲伦理边界,把用途明确分成"合乎伦理"(追踪自家电器耗电/光伏计量/漏水检测)和"不合乎伦理"(推断特定人生活规律并据此行动)两类。

协议是 AGPL v3.0:可以商用、可以修改,但网络使用也算分发,必须公开源码。

国内能用吗?

直接结论:国内智能电表走 DL/T 645,不是 ERT,收不到。但两个例外:

  1. 国内部分水表/燃气表会用 ISM 频段无线传输——如果表上有 FCC ID 标签或 Itron logo,有戏
  2. RTL-SDR 本身 ¥30-¥50 是通用工具:收 ADS-B 航班信号、FM 广播、业余无线电都能干,rtlamr 只是玩法之一,买了不亏

想验证自家表能不能收:找表上的 FCC ID 标签,跟仓库 meters.csv 或社区 Google Sheets 里的兼容表型对比一下。

总结

RTL-SDR + rtlamr 这条链路的价值在于:它把"智能电表数据"从电力公司的黑盒变成了空气中可被任何人接收的公开广播——七十块的成本,三行命令,就能亲眼看到自己家(甚至邻居家)的用电数据在空中流动。对无线电玩家来说,这既是 ERT 协议的一次完整实践,也是 RTL-SDR 众多玩法中门槛最低、反馈最直观的一个。

我的公众号「LabHub」
这类文章我会先在公众号发布(含更多步骤和配图),微信搜一搜直接搜「LabHub」就能找到。
关注后每周都有新折腾:拆设备、玩无线电、刷固件、变废为宝。