本帖最后由 tiejiang 于 2026-6-22 22:45 编辑
小米路由器 Home Assistant 集成 | 本地 API 实时监控,无需云端
🆕 v1.5.0 新功能:路由器重启按钮
集成会自动创建一个 重启路由器 按钮实体button.miwifi_router_reboot,点击即可远程重启路由器。
点击按钮即发送重启命令到路由器
自动使用 stok 认证机制(过期会自动重新登录)
重启后路由器 1-2 分钟恢复,期间传感器显示不可用,恢复后自动重新连接
配合 HA 自动化可实现"断网自动重启路由器"
中文显示"重启路由器",英文显示"Reboot Router"
V1.4.0 实现:用户可选单位在集成配置里新增了两个下拉选项:
- 实时网速传感器单位(speed_unit):Auto / B/s / kB/s / MB/s / GB/s / KiB/s / MiB/s / GiB/s
- 累计流量传感器单位(total_unit):Auto / B / kB / MB / GB / TB / KiB / MiB / GiB / TiB
选好单位后,传感器状态值会按所选单位自动换算。比如选 MB/s,下载速度就直接显示 5.23 而不是 5230000。
v1.3.10 修复了老固件路由器无法正常登录的bug,请不能正常使用的下载最新版本。
v1.3.5 新增
MiWiFi 路由器登录密码的哈希算法因固件版本不同而异:
- 新固件(如 BE5000):使用 SHA256+SHA256
- 老固件(如 AX3600、AC2100、AX9000):使用 SHA1+SHA1
本集成在登录前自动读取路由器 init_info 接口中的 newEncryptMode 字段自动判断加密方式
如果还是出现invalid-auth,你也可以在浏览器中访问 http://路由器IP/cgi-bin/luci/api/xqsystem/init_info,查看返回的 newEncryptMode 字段值,并反馈,帮助完善兼容性。
-------------------------------------------------------------------------------------------------------------------------------------------
之前一直用 xiaomi_home 和 hass-xiaomi-miot 接路由器,结果传感器全是"未知"并且很多属性都没有,就所以自己用AI写了一个,直接走路由器本地 Web API,所有数据实时获取,不依赖任何云端服务。
功能介绍
路由器传感器
接入后自动创建以下传感器,无需任何配置:
| 传感器 | 说明 | 单位 |
| Download Speed | WAN 下载速率 | B/s |
| Upload Speed | WAN 上传速率 | B/s |
| Download Total | 累计下载量 | B |
| Upload Total | 累计上传量 | B |
| Online Devices | 在线设备数 | 台 |
| CPU Load | CPU 负载 | % |
| Memory Usage | 内存使用率 | % |
设备追踪
每个连接到路由器的设备都会自动创建 device_tracker 实体:
- 在线/离线状态实时检测(home / not_home)
- 单设备速率数据(upload_speed / download_speed、累计流量、峰值速率)
- 信号强度、频道、OUI 等额外信息
🆕 设备传感器(v1.3.0 新增)
在集成配置界面手动选择需要监控的设备,每个选中设备自动创建
4 个独立传感器:
| 传感器 | 说明 | 单位 |
| {设备名} Download Speed | 设备下载速率 | B/s |
| {设备名} Upload Speed | 设备上传速率 | B/s |
| {设备名} Download Total | 设备累计下载量 | B |
| {设备名} Upload Total | 设备累计上传量 | B |
为什么要单独做设备传感器? 因为 device_tracker 的速率数据是属性(attribute),Home Assistant 不会记录属性的历史变化,无法在图表中展示。设备传感器是独立的传感器实体,支持历史记录,可以直接用在 mini-graph-card 等图表卡片里画曲线。
性能优化
集成做了分层轮询优化,不会给路由器造成额外负担:
- 实时数据 10s + 设备列表 30s + 静态信息 5min,请求量减少 60%+
- 在线设备数变化时立即轮询设备列表,离线检测延迟 < 10 秒
- 登录 token 缓存 10 分钟,减少认证开销
- HTTP Keep-Alive 复用连接,每次请求节省约 50ms
支持型号
所有运行 MiWiFi 固件的小米路由器均可使用:
| 型号 | 平台 | 状态 |
| Xiaomi BE5000 | RD18 | ✅ 已验证 |
| Xiaomi BE3600 | RD09 | 🔶 理论兼容 |
| Xiaomi AX9000 | RA69 | 🔶 理论兼容 |
| Xiaomi AX6000 | RA67 | 🔶 理论兼容 |
| Xiaomi AX3600 | RA70 | 🔶 理论兼容 |
| Xiaomi AX3000T | RB01 | 🔶 理论兼容 |
| Redmi AX6 | RA69 | 🔶 理论兼容 |
| Redmi AX5 | RB03 | 🔶 理论兼容 |
| Redmi AC2100 | RM2100 | 🔶 理论兼容 |
- ✅ 已验证:经实际设备测试确认可用
- 🔶 理论兼容:基于相同 MiWiFi 固件 API 推断兼容,未经实际设备验证
其他运行 MiWiFi 固件的路由器理论上均兼容,欢迎反馈测试结果,验证后升级为 ✅。
如何判断我的路由器是否支持?
只需在浏览器中直接访问以下两个地址之一(将 192.168.31.1 替换为你的路由器 IP)。新固件和老固件使用不同的 URL 路径,本集成会自动尝试这两个地址:
地址 1(新固件):
http://192.168.31.1/api/xqsystem/init_info
地址 2(老固件):
http://192.168.31.1/cgi-bin/luci/api/xqsystem/init_info
判断方法:
- 任一地址显示 JSON 数据,包含路由器型号、固件版本等信息,说明完全支持:
// 新固件示例 (BE5000)
{"hardware":{"platform":"RD18","version":"1.0.53","displayName":"Xiaomi BE5000"}, "newEncryptMode":1, ...}
// 老固件示例 (AX3600, 没有 newEncryptMode 字段或字段为 0)
{"romversion":"1.0.168","countrycode":"CN","code":0,"model":"xiaomi.router.ra70","hardware":"RA70",...}
💡 这些接口都不需要登录即可访问。集成会自动按"地址 1 → 地址 2"的顺序尝试,并用返回结果决定登录算法,所以你不需要手动选择算法 —— 默认的"Auto-detect"模式已经覆盖所有情况。
如果自动检测后登录仍然失败,可以在集成配置里手动选择 Force SHA1 或 Force SHA256 作为兜底。
安装
配置
新建条目
纯 UI 配置,不需要写 YAML:
- 设置 → 设备与服务 → 添加集成,搜索 "MiWiFi Router"
- 填写连接信息:
- 路由器 IP 地址:默认 192.168.31.1
- 路由器管理密码:MiWiFi 管理界面登录密码
- 实时数据轮询间隔(scan_interval):默认 10 秒
- 设备列表轮询间隔(device_scan_interval):默认 30 秒
- 连接成功后,会进入 选择需添加传感器的设备 步骤:
- 勾选需要监控的设备(也可以跳过,之后再加)
- 每个选中设备将创建 4 个独立传感器
- 提交完成
修改配置
- 设置 → 设备与服务 → MiWiFi Router → ⚙️ 配置
- 在 需添加传感器的设备 下拉框中勾选/取消设备
- 提交后集成自动重载,传感器立即生效
使用示例
设备速率图表
用 mini-graph-card 展示设备实时速率:
- type: custom:mini-graph-card
- entities:
- - sensor.xiaomizhu_lu_you_qi_istoreos_download_speed
- - sensor.xiaomizhu_lu_you_qi_istoreos_upload_speed
- name: istoreos 网速
- hours_to_show: 1
复制代码
自动化:设备上线通知
- automation:
- - alias: "手机连接WiFi通知"
- trigger:
- - platform: state
- entity_id: device_tracker.miwifi_router_device_xx_xx_xx_xx_xx_xx
- to: "home"
- action:
- - service: notify.mobile_app
- data:
- title: "设备上线"
- message: "{{ trigger.to_state.attributes.friendly_name }} 已连接WiFi"
复制代码
自动化:设备离线检测
- automation:
- - alias: "设备离线通知"
- trigger:
- - platform: state
- entity_id: device_tracker.miwifi_router_device_xx_xx_xx_xx_xx_xx
- to: "not_home"
- for:
- minutes: 5
- action:
- - service: notify.mobile_app
- data:
- title: "设备离线"
- message: "{{ trigger.from_state.attributes.friendly_name }} 已断开WiFi超过5分钟"
复制代码
查看设备速率(device_tracker 属性)
- # 在模板中使用
- {{ state_attr('device_tracker.miwifi_router_device_xx_xx_xx_xx_xx_xx', 'download_speed_human') }}
- # 输出: "2.45 MB/s"
- {{ state_attr('device_tracker.miwifi_router_device_xx_xx_xx_xx_xx_xx', 'upload_speed_human') }}
- # 输出: "156.00 KB/s"
复制代码
常见问题
Q: 传感器显示"未知"?
检查路由器 IP 和密码是否正确,确保 HA 和路由器在同一局域网。
Q: 实时数据轮询间隔和设备列表轮询间隔有什么区别?
- 实时数据轮询间隔(scan_interval):控制 WAN 上下行速率、累计流量、CPU 负载、内存使用率等路由器自身传感器的刷新频率。这些数据变化快,默认 10 秒即可获得平滑的速率曲线。
- 设备列表轮询间隔(device_scan_interval):控制设备在线状态、设备速率属性、设备传感器的刷新频率。设备列表 API 响应较重(包含所有连接设备的详细信息),默认 30 秒可以在及时检测上下线的同时减少对路由器的请求压力。
简单来说:想看更流畅的网速曲线就调小 scan_interval;想更快发现设备上下线就调小 device_scan_interval,但不要设得太小以免增加路由器负担。
Q: 和 xiaomi_home / hass-xiaomi-miot 有什么区别?
那两个集成走 MIoT 协议,但路由器固件不响应属性读取请求,所以传感器全部显示"未知"。本集成走路由器本地 Web API,直接获取实时数据。
Q: 会影响路由器性能吗?
不会。HTTP Keep-Alive 复用连接,分层轮询减少请求量。路由器管理界面每 2 秒轮询,本集成默认 10 秒,负载远低于网页管理。
Q: device_tracker 的速率数据和设备传感器有什么区别?
device_tracker 的速率是属性(attribute),HA 不记录属性历史,无法直接画图。设备传感器是独立实体,支持历史记录,可直接用于图表。如果需要在仪表盘中展示设备速率曲线,请选中对应设备创建传感器。
[size=1.25em]
Q: 出现 invalid-auth 错误?
通常是密码输入错误。如果确认密码无误,可能是路由器固件使用的加密算法不同。v1.3.5+ 已支持自动检测加密方式(SHA256/SHA1),请更新到最新版本。你也可以在浏览器中访问 http://路由器IP/cgi-bin/luci/api/xqsystem/init_info,查看返回的 newEncryptMode 字段值,并在 GitHub Issues 中反馈,帮助完善兼容性。
如果觉得有用,欢迎到 GitHub 点个 ⭐,也欢迎反馈使用情况和测试结果!