Home Assistant每天几百条日志?教你优雅屏蔽 Xbox 的刷屏日志
折腾 Home Assistant 的尽头是啥?是永无止境地跟各种奇葩的底层 Bug 斗智斗勇。
最近刚给家里的服务器搞定了 Macvlan 旁路由,彻底打通了智能家居的网络任督二脉。本以为终于可以安逸地享受全屋智能了,结果无意间点开 HA 的历史日志,好家伙,直接被 Xbox 给刷屏了。

抓包案发现场
满屏都是极其离谱的状态切换,一分钟内能在可用和不可用之间反复横跳十几次:
顺手去 Core 日志里扒了一下底层报错,发现了大量这样的 Timeout: Error fetching xbox data: Failed to connect to Xbox Network due to a connection timeout

作为习惯了看 Log 找 Bug 的人,第一反应肯定是本地网络出了问题。但我的旁路由 DNS 劫持和透明代理稳如老狗,终端里连 GitHub 都是秒回 200 状态码,绝对不是本地网络问题。那到底是谁在作妖?
溯源排错:微软 API
去 GitHub 的 Home Assistant 官方源码仓库和 Reddit 上一搜,瞬间破案。原来这不是我们自己配置的锅,而是官方 Xbox 集成的出名老毛病。
罪魁祸首在于微软 Xbox API 极其严格的速率限制和令人堪忧的连接稳定性。Home Assistant 为了获取你的实时游戏状态,会频繁向微软服务器发起轮询。只要网络出现哪怕一两秒的微小波动,或者请求稍微多了一点,微软的 API 就会直接把你的请求掐断。
HA 这边一断连,立刻就把你 Xbox 相关的十几项传感器全部标记为不再可用;等下一秒重新连上,又瞬间把这十几项数据全部更新一遍。一天来回这么折腾几次,你的数据库日志不爆炸才怪。

眼不见为净的解决方案
既然是上游 API 的体质问题,死磕网络是没有意义的。我们只需要保留 Xbox 集成的核心开关状态(用于做灯光联动等自动化),至于那些烦人的头像变更、在线状态变更,直接从数据库层面拦截记录,既能让面板清净,还能极大节省 NAS 硬盘的无谓读写损耗。
打开你的 HA 配置文件 /config/configuration.yaml,直接加上这两段:
# 把 metricclock5308 换成你自己的 Xbox ID
# 屏蔽掉特定实体的数据库写入
recorder:
exclude:
entity_globs:
- "sensor.metricclock5308*"
- "binary_sensor.metricclock5308*"
# 屏蔽掉特定实体的日志簿显示
logbook:
exclude:
entity_globs:
- "sensor.metricclock5308*"
- "binary_sensor.metricclock5308*"
保存文件,去系统设置里重启一下 Home Assistant 核心。


再次进入系统,你的 Xbox 依然能完美触发自动化,但那个疯狂刷屏的日志已经彻底消失了。世界清净。
如果你也在折腾 Home Assistant,遇到这种上游管杀不管埋的日志刺客,善用 recorder 绝对是保平安的最佳策略。
