10分钟排查小米家联动冲突:从定位到修复的完整手册
【免费下载链接】ha_xiaomi_homeXiaomi Home Integration for Home Assistant项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home
灯闪了三下又灭了,空调温度在26和28之间来回跳,风扇档位在高风低风之间反复横跳。Home Assistant 里小米家接入的设备一旦出现这种"自己跟自己较劲"的行为,大概率不是设备坏了,而是联动冲突:两条自动化规则正在抢同一个设备属性。
按下面的四问诊断走一遍,基本能定位90%的同类问题,再用四套方案任选其一就能修掉。
为什么两条自动化规则会打架
表面现象:设备状态来回变,HA 里实体显示正常,日志里每条指令都显示"成功"。
中间环节:两条自动化在很短的时间差内先后触发,比如"日落开灯"和"有人开灯"都往同一盏灯发送开灯指令。
底层机制:一个设备属性同一时刻只能有一个值,后到的指令直接覆盖先到。这就是属性控制权冲突。本项目里,所有自动化服务最终都收敛为一次属性写入,例如custom_components/xiaomi_home/miot/miot_device.py:L1298的set_property_async会把目标值发给设备,两条指令时间差1.2秒,设备只认最后一条:
规则A: set_temperature 26 规则B: set_temperature 28 # 1.2秒后到达,覆盖A好比两个人同时拧同一个旋钮,后拧的人说了算,旋钮最终停在谁都不想的位置。
顺着四个问题锁定冲突点
🔍 先在 configuration.yaml 里把custom_components.xiaomi_home的日志级别调到 debug,手动触发一次嫌疑规则,然后在日志里找该设备的写入记录。
几条写入指令?
- 正常:只有1条
- 异常:2条以上且间隔小于5秒 → 明确是规则冲突,进第2问
- 异常:只有1条但设备没执行 → 不是冲突,直接跳到第4问查链路
两条指令分别来自哪里?
- 正常:一条来自自动化、一条来自米家App手动操作,属正常覆盖
- 异常:都来自自动化 → 到自动化页面搜设备实体ID(如
climate.xiaomi_ac_1234),列出所有碰过这个属性的规则
触发条件是否重叠?
- 正常:触发时点不同,一条按时间、一条按人在不在
- 异常:都监听"有人移动"或同一时间窗口 → 两条规则本质在做同一件事,优先合并而不是互斥
链路延迟是否正常?
- 正常:指令发出后1~2秒设备响应
- 异常:云控场景下明显变慢、设备上下线频繁 → 说明延迟在放大冲突窗口,看家里有没有米家中枢网关可以走本地
四套方案,按代价从低到高挑
⭐ 合并规则,一条规则管一个属性
- 适用场景:第3问确认触发条件重叠,多条规则控制同一属性
- 操作步骤:保留最常触发的那条,删掉其余;把动作改成 choose 分支,不同条件对应不同目标值;测试一次后启用
- 预期效果:出口只剩一条指令,从源头消灭覆盖
- 注意事项:choose 分支留一个默认分支兜底,避免条件都不满足时什么都不发生
加互斥条件,后到者自觉让路
- 适用场景:两条规则各有业务意义不能合并(比如"离家"和"睡眠"都要改空调)
- 操作步骤:在动作前加一条模板条件,属性30秒内刚被改过就跳过本次执行
- 预期效果:重复指令被拦在自动化层,设备只收到第一次的值
- 注意事项:30秒是经验值;温度这类本身就频繁变化的属性,把窗口放宽到2分钟
condition: - condition: template value_template: > {{ (now() - states.climate.xiaomi_ac_1234.last_changed).total_seconds() > 30 }}把自动化模式设为 single
- 适用场景:同一条规则被高频重复触发(人体传感器最典型),指令排队挤进设备
- 操作步骤:把该自动化的模式改为
mode: single;把时间重复触发改成状态变化触发 - 预期效果:同一时刻最多一次执行,重复触发直接丢弃
- 注意事项:它只治"同一条规则自己刷自己",治不了两条不同规则互掐
mode: single换本地控制,缩短冲突窗口
- 适用场景:第4问确认延迟大,且局域网内有米家中枢网关(固件3.3.0_0023以上)
- 操作步骤:在小米家集成的配置流程里把控制模式从云端改为自动;重启集成;在日志确认已连上中枢网关
- 预期效果:指令往返从云链路变成局域网直连,两条指令的时间差天然缩小,冲突概率随之下降
- 注意事项:本地仅覆盖部分设备,中枢网关同时可用时优先于LAN直连
| 方案 | 治什么 | 代价 |
|---|---|---|
| 合并规则 | 规则互掐 | 要整理旧规则 |
| 互斥条件 | 重复指令 | 每条规则多写一段逻辑 |
| mode: single | 同规则重复触发 | 解决不了规则间冲突 |
| 本地控制 | 延迟抖动 | 依赖中枢网关 |
防复发的三条习惯
- 规则命名格式:[房间][设备][动作],如"[客厅][灯][日落开灯]"。冲突出现时,在自动化页面按设备名一搜,候选规则立刻现形。
- 一个属性一个主人:新建规则前先搜目标实体,确认它已有规则在管,先合并再启用,而不是两条规则各写各的。
- 每月一次实体审计:在 automation.yaml 里搜同一个 entity_id,同一个设备属性出现在3条以上规则里,就是隐患点,趁没人投诉时合并掉。
✅ 今天就可以做的五件事
- 找到出问题的设备,手动触发一次嫌疑规则,确认日志5秒内出现两条写入指令
- 在自动化页面搜该设备实体ID,列出所有碰过同一属性的规则
- 把同属性规则合并成一条,或给高频触发的规则设上
mode: single - 局域网有中枢网关的,把控制模式改为自动,观察延迟是否降回秒级以内
- 复杂场景搞不定的,把设备型号和自动化截图提交到项目 Issue,社区会帮你逐条诊断
【免费下载链接】ha_xiaomi_homeXiaomi Home Integration for Home Assistant项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考