如何恢复忘记的 IAMMETER 管理员密码
如果忘记了 IAMMETER 电能表本地 Web 界面的管理员用户名或密码,无需旧凭据也能恢复访问。IAMMETER 的签名恢复流程会验证设备归属、关闭 Admin Security,并清除忘记的本地管理员凭据。
本指南专门用于忘记 Admin Security 密码的情况。如果仍知道当前凭据,请从设备的 Security 选项卡更改或关闭。关于设置、受保护 API 访问和服务控制,请参阅本地 Admin Security 用户指南。
本页目录
- 恢复流程会执行哪些操作
- 开始前的准备
- 步骤 1:生成一次性恢复 payload
- 步骤 2:获取签名恢复响应
- 步骤 3:将 payload 和签名提交给设备
- 密码恢复故障排查
- 为什么恢复需要带签名的一次性挑战
- 相关 IAMMETER 安全文档
恢复流程会执行哪些操作
恢复流程包含三个部分:
- IAMMETER 设备生成绑定该设备的一次性恢复 payload。
- IAMMETER Contributor 服务验证已登录账号是否有权管理该设备 SN,然后对该完整 payload 签名。
- 设备验证 Ed25519 签名,清除忘记的凭据并关闭 Admin Security。
恢复不会删除能耗数据、Wi-Fi 设置或设备配置。恢复后,可以打开本地 Web 界面并设置新的管理员用户名和密码。
开始前的准备
需要准备:
- 在同一个局域网内访问 IAMMETER 设备;
- 设备的本地 IP 地址;
- 有权管理该设备 SN 的 IAMMETER 账号;
- 一台能够访问设备本地 Web 界面的电脑及其浏览器。只有选择手动提交方式时才需要
curl或其他 HTTP 客户端。
打开以下地址,可以检查已安装固件是否支持签名恢复:
http://<device-ip>/api/admin/status
在响应中查找 "recoverySupported":1。如果恢复端点不可用,请先升级至兼容固件版本,或联系 IAMMETER 支持,再继续操作。
**重要:**挑战中包含一次性 nonce。保持设备通电,在恢复 POST 完成前不要再次请求挑战。生成新挑战或重启设备都会使之前的 payload 失效。
步骤 1:生成一次性恢复 payload
在浏览器打开以下 URL,将 <device-ip> 替换为 IAMMETER 设备的本地 IP 地址:
http://<device-ip>/api/admin/recovery_challenge
也可以使用 curl 请求挑战:
curl "http://<device-ip>/api/admin/recovery_challenge"
设备返回类似以下响应:
{
"successful": 1,
"alg": "ed25519",
"payload": "reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE"
}
复制完整的 payload 值。不要修改其中的字符、分隔符、字母大小写、设备 SN、MAC 地址或 nonce。

复制 payload 后,不要刷新挑战页面,也不要再次调用
/api/admin/recovery_challenge。每次请求都会立即使之前的挑战失效。
步骤 2:获取签名恢复响应
登录 IAMMETER Contributor 系统并打开:
粘贴步骤 1 的完整 payload 并提交。服务会检查 payload 中的设备 SN 是否关联到你的账号。验证通过后,返回针对该完整 payload 的 Ed25519 签名。

签名仅对步骤 1 中设备生成且未经修改的 payload 有效。如果计划使用 curl 手动提交恢复请求,请原样复制返回的签名。如果同一浏览器能通过局域网访问设备,可直接在 Contributor 页面完成下一步。
步骤 3:将 payload 和签名提交给设备
方式 A:直接在浏览器中完成恢复
如果运行浏览器的电脑与 IAMMETER 设备在同一网络,且浏览器能够打开设备的本地 Web 界面,可以直接从 Contributor Admin Recovery 页面发送签名恢复结果:
- 在 **Step 3: Send to your device(步骤 3:发送到设备)**中输入设备的本地 IP 地址。
- 使用页面上的恢复操作,将带签名的 payload 发送给设备。
- 等待 Recovery completed(恢复完成)。这表示设备已接受签名结果、清除现有本地管理员用户名和密码,并关闭 Admin Security。

此浏览器方式无需将恢复 JSON 复制到单独的命令中。只有浏览器能够直接连接设备本地 IP 地址时才能使用。
方式 B:使用 curl 手动提交恢复请求
运行以下命令,并替换:
- 将
<device-ip>替换为设备的本地 IP 地址; - 将
<original-payload>替换为步骤 1 的完整 payload; - 将
<signature>替换为步骤 2 返回的签名。
curl -X POST "http://<device-ip>/api/admin/recovery" \
-H "Content-Type: application/json" \
-d '{"payload":"<original-payload>","signature":"<signature>"}'
示例:
curl -X POST "http://192.168.1.100/api/admin/recovery" \
-H "Content-Type: application/json" \
-d '{"payload":"reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE","signature":"128_HEX_CHARACTER_SIGNATURE"}'
此请求中的 payload 必须与 Contributor 服务签名的 payload 完全一致。
也可以从 IAMMETER WEM API Test - Admin Security Public 页面发送同样的恢复请求。打开 POST /api/admin/recovery 操作,提供相同的恢复 JSON,并使用能访问设备本地 IP 地址的浏览器发送。Swagger 请求直接发往设备,不经过 IAMMETER Cloud 代理。
验证成功后,设备会:
- 清除现有的本地管理员用户名和密码;
- 关闭 Admin Security;
- 使恢复 nonce 失效,防止再次使用同一 payload 和签名。
打开设备本地 Web 界面,进入 Security 选项卡。如果希望重新启用 Admin Security,请配置新的管理员用户名和密码。
密码恢复故障排查
签名被拒绝
最常见的原因是在生成第一个 payload 后又请求了新的恢复挑战。请请求一个新 payload,获取其签名,并在不刷新挑战页面的情况下提交匹配的一对 payload 和签名。
以下情况也会导致签名被拒绝:
- 设备在生成 payload 后重启;
- payload 被编辑;
- 签名属于其他 payload 或设备;
- 同一 payload 和签名已经成功使用过。
设备报告内存不足
Ed25519 验证需要足够的空闲内存。设备可能返回类似响应:
{
"successful": 0,
"message": "low memory, please change to standalone mode",
"freeMemory": 18000,
"minFreeRequired": 28000
}
重启设备释放临时内存,然后生成新的 payload,并及时完成恢复。重启前创建的 payload 不能重复使用。
为什么恢复需要带签名的一次性挑战
IAMMETER 不提供用于绕过管理员保护、无需认证的恢复出厂设置命令,而是采用以下流程:
- 设备创建包含恢复操作、设备 SN、MAC 地址和随机一次性 nonce 的 payload;
- Contributor 服务验证已登录的 IAMMETER 账号是否有权管理该设备 SN;
- IAMMETER 使用 Ed25519 私钥对该完整 payload 签名;
- 设备使用固件内置公钥验证签名;
- 新挑战、重启或成功恢复都会使当前 nonce 失效。
将授权同时绑定到设备身份和一次性 nonce,可防止之前截获的 payload 和签名在之后被再次使用。
相关 IAMMETER 安全文档
EN 18031 文章介绍安全相关固件工作,不应理解为某款电能表的证书已颁发。认证详情将在正式可用时另行发布。