Home Assistant 被移出核心:你的智能家居配置会怎样

早上你让 Hermes 把客厅的灯调暗,它回你一句 unknown platform: homeassistant。你没有改过任何配置,也没删过任何东西,只是昨晚跑了一次 hermes update。
这就是“核心瘦身”落到用户身上的样子:一个以前内置在 Hermes 里的平台适配器,被搬进了插件目录。好消息是官方给这次搬家配了自动迁移,绝大多数人的配置一个字都不用改。这篇文章说清楚它搬了什么、迁移是怎么跑的、以及万一没搬成功你该做什么。
搬走了什么
Home Assistant 过去是内核的一部分:plugins/platforms/homeassistant/(gateway 平台适配器)加上 tools/homeassistant_tool.py(agent 工具),还有对应的 homeassistant / hermes-homeassistant toolset、Platform.HOMEASSISTANT 枚举、HASS_TOKEN 的环境变量自动启用行、pip 的 homeassistant extra,以及散落在 dump、setup 摘要、dashboard 平台卡片、ACP 工具清单等处的一堆硬编码条目。
这些在 #132469 里全部移除,功能整体搬到官方插件目录里的 homeassistant 插件(仓库 NousResearch/hermes-homeassistant,评审时锁定在 2.0.1)。在你升级后的 plugins/platforms/ 里,已经看不到 homeassistant 这个目录了。
你的配置不用改
这是这次迁移最省心的地方:插件的目标是同名、同配置键、同环境变量。
HASS_TOKEN、HASS_URL不变;- gateway 配置里的
platforms.homeassistant不变; - 工具名
ha_*不变。
换句话说,你不需要去翻文档找新的键名。你唯一需要确认的是那个插件确实装上了。
迁移是怎么自动跑的
官方新加了一个通用的“离开核心”迁移机制,文件是 hermes_cli/left_core_migration.py。它的设计很值得一看,因为它解决了插件化最难的一步:老用户怎么无感过渡。
迁移表叫 LEFT_CORE,每一行描述“哪个插件 + 怎么判断这个 home 用过它”。目前只有一行:
LEFT_CORE: tuple[LeftCoreFeature, ...] = (
LeftCoreFeature(
plugin="homeassistant", label="Home Assistant", in_use=homeassistant_in_use,
unchanged="HASS_TOKEN/HASS_URL, platforms.homeassistant and the ha_* tool names are unchanged",
secret_env=("HASS_TOKEN",), private_env=("HASS_URL",),
toolsets=("homeassistant",), off_platforms=("acp", "webhook"), platform="homeassistant",
enable_env=("HASS_TOKEN",), channel_env_prefixes=("HASS_",),
),
)
判断“这个 home 用过 Home Assistant”的依据是只读的:它的 .env 里有 HASS_TOKEN(这一个变量同时启用了适配器和工具)、gateway 配置里打开了这个平台(兼容旧的 gateway.json、gateway.platforms / platforms / gateway.homeassistant 几种写法,最后一个显式的 enabled 说了算)、或者 toolset 里选了 homeassistant。进程环境里来自 systemd / Docker 的 HASS_TOKEN 也算。
安装时机有三个:
hermes update—— 为共享同一个 venv、且用过该功能的每个 profile home 安装;- agent 启动时 —— 对当前 home 每个进程重试一次(桌面端用户从 app 更新、不会跑
hermes update,靠这条路补上),并遵守security.allow_lazy_installs; - gateway 启动时 —— 同样重试一次,结果排队等这个 home 的第一次 agent 会话投递。
安装走的是正常的目录安装通道,锁在评审过的 pin 上,会过一遍 kill list、依赖约束和启用步骤。有一个细节很体贴:依赖确认对这批行免交互——这些依赖在核心时代用户早就接受了。
另外两个防打扰设计:
- 安装失败(目录里没有、网络不通、装不上)之后,启动时的重试会跳过
STARTUP_RETRY_SECONDS的冷却期,这样离线机器只付一次网络往返,而不是每次hermes chat都等;hermes update则永远重试。 - 每个 home 只会被自动安装一次,记录在它
config.yaml的_left_core_installed键里。之后再想卸载,是你自己的选择,不会被“修复性重装”。
升级后该怎么确认
hermes update
hermes plugins list | grep homeassistant
看到插件在列表里(启用状态)就结束了。如果因为 security.allow_lazy_installs: false、或者机器一直离线导致没装上,手动装一次同样有效:
hermes plugins install homeassistant
hermes plugins enable homeassistant
注意 plugins install 走的是插件目录(catalog)里的评审 pin,不是任意仓库,所以不会引入来路不明的代码。想看插件能力的隔离设计,可以读插件宿主隔离模式和插件目录指南。
这个表以后会长
LEFT_CORE 是一个通用表,Home Assistant 只是第一行。结合插件目录现在的评审与供应链检查流程(见插件目录的 CI 与供应链),可以预期以后还会有更多内置能力走同样的路径:先从内核移除,再由迁移机制自动给老用户装上。
对用户来说,这是一个更健康的形态:内核更小、更新更快,单个平台适配器可以独立发版,而不是等下一次 Hermes 主版本。代价是“内置”不再等于“一定存在”——升级后顺手确认一下你在用的平台插件,是个值得养成的习惯。
小结
- Home Assistant 的 gateway 平台与
homeassistant工具已从内核移除,改由官方目录插件提供; hermes update会为用过它的 profile 自动安装,agent / gateway 启动时会补一次,遵守security.allow_lazy_installs;- 配置键、环境变量、工具名全部不变,
hermes plugins list能看到就说明迁移成功; - 装不上时
hermes plugins install homeassistant手动补即可;LEFT_CORE表后续还会接纳更多条目。