Home Assistant salió del core: qué pasa con tu configuración


Le pides a Hermes que baje la intensidad de las luces del salón y recibes de vuelta unknown platform: homeassistant. No cambiaste nada ni borraste nada — simplemente ejecutaste hermes update anoche.

Así se ve el “adelgazamiento del core” desde el lado del usuario: un adaptador de plataforma que antes venía dentro de Hermes se mudó al catálogo de plugins. La buena noticia es que el traslado vino con una migración automática, y para la mayoría de la gente nada en su configuración necesita cambiar. Esto es lo que salió, cómo se ejecuta la migración y qué hacer si no aterriza.

Qué salió realmente del core

Home Assistant solía ser parte del kernel: plugins/platforms/homeassistant/ (el adaptador de plataforma del gateway) más tools/homeassistant_tool.py (la herramienta del agente), junto con los toolsets homeassistant / hermes-homeassistant, el enum Platform.HOMEASSISTANT, la fila de activación por env HASS_TOKEN, el extra homeassistant de pip y un montón de entradas codificadas a mano repartidas por la salida de dump, el resumen de setup, la tarjeta de plataforma del dashboard y las listas de herramientas ACP.

#132469 eliminó todo eso. La funcionalidad ahora vive en el plugin de catálogo homeassistant (repo NousResearch/hermes-homeassistant, fijado en 2.0.1 en la revisión). En tu árbol actualizado, plugins/platforms/ ya no tiene un directorio homeassistant.

Tu configuración se queda igual

Esta es la mejor parte: el plugin se construyó para ser mismos nombres, mismas claves de configuración, mismas variables de entorno.

  • HASS_TOKEN y HASS_URL no cambian;
  • platforms.homeassistant en tu configuración de gateway no cambia;
  • los nombres de herramientas ha_* no cambian.

En otras palabras, no hay ninguna clave nueva que aprender. Lo único que necesitas confirmar es que el plugin esté realmente instalado.

Cómo funciona la migración automática

La versión añade una migración genérica de “salió del core” en hermes_cli/left_core_migration.py, y vale la pena leer su diseño porque resuelve la parte más difícil de cualquier división de plugins: mover a los usuarios existentes sin un hilo de soporte.

La tabla es LEFT_CORE, y cada fila dice qué plugin del catálogo instalar más un predicado de solo lectura para “¿este home usaba la funcionalidad?”. Ahora mismo hay exactamente una fila:

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_",),
    ),
)

La prueba de “¿este home lo usaba?” es de solo lectura: HASS_TOKEN en el .env del home (esa única variable activaba tanto el adaptador como las herramientas), la plataforma habilitada en su configuración de gateway (el gateway.json heredado o los bloques gateway.platforms / platforms / gateway.homeassistant, donde gana el último enabled explícito), o homeassistant seleccionado en los toolsets del home. Un HASS_TOKEN que venga del entorno del proceso (systemd, Docker) también cuenta.

Las instalaciones ocurren en tres momentos:

  1. hermes update — instala para cada home de perfil que comparte el venv y usaba la funcionalidad;
  2. inicio del agente — reintenta una vez por proceso para el home activo (los usuarios de escritorio actualizan a través de la app y nunca ejecutan hermes update, así que así es como lo obtienen), respetando security.allow_lazy_installs;
  3. inicio del gateway — también reintenta una vez, y pone en cola el resultado para el primer turno del agente de ese home.

Las instalaciones pasan por la ruta normal del catálogo en el pin revisado, así que la kill list, las restricciones de dependencias y el paso de habilitación se aplican todos. Un detalle considerado: el consentimiento de dependencias es desatendido para estas filas, porque la funcionalidad venía en el core y sus usuarios ya aceptaron esas dependencias entonces.

Dos reglas más anti-molestia:

  • tras un intento fallido (no está en el catálogo, inalcanzable, error de instalación), los reintentos de arranque saltan la fila durante STARTUP_RETRY_SECONDS — así una máquina offline paga un solo viaje de red, no uno en cada hermes chat, mientras que hermes update siempre reintenta;
  • un home se autoinstala como máximo una vez, registrado como _left_core_installed en su config.yaml. Si luego eliminas el plugin, es tu decisión y se mantiene.

Confirmarlo tras la actualización

hermes update
hermes plugins list | grep homeassistant

Si el plugin aparece (habilitado), ya está. Si no se instaló — digamos security.allow_lazy_installs: false, o la máquina ha estado offline — instalarlo a mano funciona igual de bien:

hermes plugins install homeassistant
hermes plugins enable homeassistant

Ten en cuenta que plugins install resuelve el pin revisado desde el catálogo de plugins en lugar de un repositorio arbitrario, así que no estás trayendo código sin revisar. Para saber cómo se aíslan las capacidades de los plugins una vez instalados, consulta el modo de aislamiento del host de plugins y la guía del catálogo de plugins.

La tabla crecerá

LEFT_CORE es genérico; Home Assistant es solo la primera fila. Combinado con las revisiones y comprobaciones de cadena de suministro del catálogo (consulta CI del catálogo de plugins y cadena de suministro), es razonable esperar que más capacidades integradas tomen este camino: eliminadas del core y luego instaladas automáticamente para los usuarios que las tenían.

Para los usuarios esta es una forma más saludable — un kernel más pequeño, actualizaciones más rápidas y adaptadores de plataforma que pueden publicar a su propio ritmo en lugar de esperar a la siguiente minor de Hermes. El coste es que “integrado” ya no significa “siempre presente”, así que echar un vistazo rápido a tus plugins de plataforma tras una actualización es un hábito que vale la pena mantener.

La versión corta

  • La plataforma de gateway de Home Assistant y la herramienta homeassistant salieron del core y ahora son un plugin oficial del catálogo;
  • hermes update lo instala para los perfiles que lo usaban, con un reintento al inicio del agente y del gateway que respeta security.allow_lazy_installs;
  • las claves de configuración, las variables de entorno y los nombres de herramientas no cambian — si hermes plugins list lo muestra, la migración funcionó;
  • si no se instaló, hermes plugins install homeassistant es la ruta manual, y se esperan más entradas en LEFT_CORE.