Skip to content

About

小米多模网关自动化看门狗

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Xiaomi Gateway3 Automation Watchdog(小米多模网关自动化看门狗)

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

一个基于 xiaomi_gateway3 集成之上的 Home Assistant 自定义集成。 它专门解决一个常被忽略的问题:

多模网关在 HA 里显示「已连接」,但下挂设备(如开关控灯)的自动化指令实际执行不了。

xiaomi_gateway3 判断「在线」只依赖 MQTT 心跳 / Telnet 端口,并不验证「指令到底有没有真正下发到设备」。 当网关的 Zigbee / BLE 控制通路假死(射频卡住、openmiio 代理挂掉),HA 仍以为一切正常,于是自动化静默失效。

本集成用一个探针来检测「能不能执行」,并在连续失败时硬重启物理网关根治问题。 探针提供两种模式——默认「被动」模式完全不操作设备,零闪烁,详见下文。


工作原理

你指定一个「探针实体」——网关下挂的任意一个开关或灯(甚至一个平时不用、但接在网关下的设备即可)。 看门狗按所选模式检测:

被动模式(默认,不操作设备,零闪烁)✅

  • 看门狗不发任何指令,只观察该设备是否仍被 xiaomi_gateway3 报为 available。
  • 当网关的 Zigbee / BLE 控制通路假死(最常见是 openmiio 代理崩溃)时,xiaomi_gateway3 会把下挂设备标成 unavailable。
  • 一旦探针变成 unavailable → 判定控制通路断了 → 触发重启。
  • 设备全程不会被切换,所以没有闪烁、没有误操作。

被动模式覆盖了你描述的绝大多数故障(网关在线但控制失效)。它的盲点极其罕见: 「设备还能回报自身状态、但网关收得到回报却发不出指令」这种「又聋又瞎的反面」状态——真遇到再切到主动模式。

主动模式(严格回环,会短暂切换一次再复位)

  • 每隔 检测间隔 秒,看门狗向探针发一条反向指令(homeassistant.turn_on/off), 在 指令超时 内回读实体状态是否真的翻转。
    • xiaomi_gateway3 的实体是非乐观的:状态只来自网关的真实回报。所以「发了指令但状态没变」= 控制通路已断。
  • 验证翻转后,看门狗立即把设备切回原始状态,因此不会像旧版那样被长期卡在翻转后的状态。 (每个检测周期仍会有一次极短的闪烁,但检测完即复位。)

连续 失败 N 次 仍不通 → 通过网关 23 端口 Telnet 发送 reboot 硬重启物理网关 (重置射频 + openmiio 代理,这才是治本;单纯重启 HA 集成没用),然后进入 冷却 期等它重新上线。

防误杀:多探针 + 多数表决

单个探针设备自身出问题(电池没电、被拔掉、出范围、坏了)也可能变成 unavailable,但那不是网关的锅。 若只看一台设备,会把健康网关无辜重启,甚至因坏设备一直 unavailable 而陷入「重启→仍失败→再重启」的死循环。

因此本集成支持多个探针实体(建议 ≥2,且尽量用常电设备):

  • 只有全部探针同时失败,才判定为网关控制通路故障并重启;
  • 只要还有任意一台探针正常,就认为网关是好的——单台设备的故障会被忽略并记日志,绝不会重启网关。

此外内置重启防抖(loop guard):若 1 小时内自动重启 ≥3 次仍失败,判定为「非瞬时故障」(坏探针或网关硬件本身不可恢复),自动停止重启并显式报警,避免雪上加霜。


安装(HACS)

  1. HACS → 集成 → 右上角「自定义仓库」→ 类别选「集成」→ 填入本仓库 URL(https://github.com/lenlanF/xiaomi_gateway3_watchdog)→ 添加。
  2. 在 HACS 里找到 Xiaomi Gateway3 Automation Watchdog → 下载 → 重启 Home Assistant。
  3. 「设置 → 设备与服务 → 添加集成」→ 搜索 Xiaomi Gateway3 Automation Watchdog。

手动安装

把本仓库的 custom_components/xiaomi_gateway3_watchdog/ 整个文件夹复制到你的 HA 配置目录 (即和 configuration.yaml 同级的 custom_components/ 下),重启 HA 即可。

前置依赖:需先安装并配置好 xiaomi_gateway3,且网关的 Telnet 已开启(该集成运行时会自动保持 23 端口 Telnet 开启)。


配置

添加集成时分两步:

第 1 步 · 选择网关

  • 若已装 xiaomi_gateway3,会自动列出它配置里的网关 IP(直接选 / 也可手填)。
  • 网关 IP 即 Telnet 重启的目标地址(xiaomi_gateway3 默认已在该 IP 的 23 端口开启 Telnet)。

第 2 步 · 探针与阈值

字段 说明 默认
探针实体 (switch/light) 用于检测的设备 entity_id,多个用逗号或换行分隔(建议 ≥2 台常电设备) 必填(≥1)
探针模式 被动(不操作设备,靠在线状态判断)/ 主动(真实发指令并回读) 被动
检测间隔(秒) 多久做一次健康检查 600
指令超时(秒) 等待状态翻转的最长时间(仅主动模式用) 12
连续失败几次后重启 触发硬重启的阈值 3
重启后冷却(秒) 重启后静默等待网关上线 240
失败时自动重启 是否开启自动硬重启 开

表决规则:只有所有探针同时失败才重启;任一探针正常即判健康,单台设备自身故障不会误重启。 重启防抖:1 小时内自动重启 ≥3 次仍失败 → 停止自动重启并报警(检查探针/网关硬件)。


生成的实体(每个网关一个看门狗设备)

实体 类型 作用
binary_sensor.<网关>_自动化健康 二元传感器 on=网关能执行指令;off=不能执行。属性含连续失败次数、上次错误、上次重启时间、各探针明细、loop_guard
button.<网关>_立即检测 按钮 立刻跑一次健康检查
button.<网关>_重启网关 按钮 立刻硬重启物理网关
switch.<网关>_自动重启 开关 开/关「连续失败自动重启」

这些实体都挂在名为「网关看门狗 」的设备下,可直接在仪表盘用,也可在自动化里用 button.press 调用。


常见问题

Q:支持哪些网关? A:所有被 xiaomi_gateway3 支持的型号——小米多模网关(Gateway 3,lumi.gateway.mgl03)、 小米多模网关 2 / Smart Home Hub(Mijia_Hub_V2)。 注意:老款「小米智能网关」(DGNWG02LM)不在 xiaomi_gateway3 支持列表,本集成也无法覆盖。

Q:重启靠什么?需要 token 吗? A:走 xiaomi_gateway3 同款 Telnet reboot,按登录横幅自动识别型号 (MGW=admin/admin,MGW2/Hub=root/空密码),不需要单独提供 token,只要网关 IP 可达且 23 端口 Telnet 已开启 (xiaomi_gateway3 运行时会自动保持开启)。

Q:探针设备会被频繁开关,很烦? A:默认就是「被动」模式,完全不操作设备,靠设备是否 available 判断,零闪烁零误操作。只有切到「主动」模式才会短暂切换(且检测完立即复位)。被动模式下甚至可以直接用一盏正常在用的灯当探针。

Q:会不会因为「探针设备自己坏了」导致健康网关被重启? A:老版本会。现在已修复——支持多个探针 + 多数表决:只有全部探针同时失败才重启;只要有一台正常就判健康,单台设备自身故障(电池没电/被拔/出范围/坏掉)会被忽略并记日志,绝不误重启。 另外还有重启防抖:1 小时内自动重启 ≥3 次仍失败会停止自动重启并报警,杜绝「坏设备→无限重启健康网关」的死循环。建议至少配 2 台常电探针。

Q:只想监控、不想自动重启? A:把「失败时自动重启」开关关掉即可。看门狗仍会标记 binary_sensor 为 off 并记日志,你手动点「重启网关」按钮。

Q:重启会不会影响其它正常设备? A:会短暂断网(网关重启约 1 分钟),期间该网关下所有 Zigbee/BLE 设备暂时不可用,重启后自动恢复。这是修复「假死」的必要代价。


目录结构

xiaomi_gateway3_watchdog/            # 仓库根(即 HACS 自定义仓库)
├── hacs.json                       # HACS 元数据
├── README.md                       # 本文件
├── LICENSE
├── .gitignore
└── custom_components/
    └── xiaomi_gateway3_watchdog/    # HA 集成本体(整个文件夹复制到 config/custom_components/)
        ├── __init__.py
        ├── manifest.json
        ├── const.py
        ├── config_flow.py
        ├── coordinator.py        # 看门狗核心:探针回环检测 + 失败计数 + 触发重启 + 防抖
        ├── shell.py              # Telnet 硬重启(复刻 xiaomi_gateway3 源码,按横幅自动识别型号)
        ├── binary_sensor.py      # 健康状态
        ├── button.py             # 立即检测 / 重启网关
        ├── switch.py             # 自动重启开关
        └── translations/
            ├── en.json
            └── zh-Hans.json

About

小米多模网关自动化看门狗

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages