Home Assistant + IA Local: Cómo Crear un Asistente Doméstico Inteligente Sin Dependencias en la Nube

Hace cinco años, tener un asistente doméstico inteligente significaba ceder tu salón a Amazon, Google o Apple. Hoy, la combinación de Home Assistant con un LLM autoalojado permite construir algo equivalente —o superior— sin que una sola grabación de voz salga de tu red. Y no, no hace falta un data center en el trastero.

El problema: conveniencia vs. soberanía

Los asistentes comerciales funcionan bien porque externalizan la inteligencia. El coste oculto es triple: dependencia de servicios que pueden cambiar de precio o desaparecer, entrenamiento de modelos con tus datos domésticos y latencia inherente a cada petición que cruza Internet. Para muchos lectores de este blog, esas tres líneas rojas ya están cruzadas.

Home Assistant resuelve la orquestación. Un LLM local resuelve la comprensión. Lo que queda es conectar ambos con una arquitectura que no sea un frankenstein inmantenible.

Arquitectura objetivo

Una pila funcional se compone de cuatro capas: captura de voz, procesamiento del lenguaje, lógica de automatización y ejecución de acciones. Esta es la que he probado y desplegado:

  • Home Assistant OS como cerebro orquestador. Gestiona dispositivos, automatizaciones y estado del hogar.
  • Ollama ejecutando un modelo local (Llama 3.1 8B para tareas simples, Qwen 2.5 14B para razonamiento más complejo).
  • Wyoming Protocol + openWakeWord para reconocimiento de palabra clave y transcripción de voz local.
  • Piper (TTS local) para síntesis de voz sin llamadas externas.
  • Mosquitto MQTT como broker para dispositivos que no hablan nativamente HA.

Hardware realista y costes

Para ejecutar un modelo de 8B-14B con latencia aceptable (<2s por respuesta) hace falta aceleración. No es opcional. Estas son las opciones que he evaluado:

  • Mac Mini M2 (8GB): ~560€. Silencioso, eficiente y con una Neural Engine que acelera tanto LLMs como transcripción de voz. Para un hogar con 50-100 entidades es más que suficiente.
  • Mini PC x86 + GPU dedicada (RX 6600 / RTX 3060): ~400-500€ montado. Más versátil si quieres expandir a modelos mayores (32B+) o hacer otros trabajos con CUDA/ROCm.
  • Raspberry Pi 5 (8GB) + Coral TPU: ~150€. Solo viable para orquestación y modelos muy pequeños (3B cuantizados). No lo recomiendo como nodo único si quieres respuestas conversacionales fluidas.

Mi recomendación personal, si partes de cero: el Mac Mini M2. No por fanboyismo, sino porque la eficiencia energética (~7W en reposo, ~25W bajo carga) lo amortiza en menos de dos años frente a un x86 que esté 24/7 encendido.

Integración LLM → Home Assistant: dos enfoques

Home Assistant no sabe hablar con Ollama de forma nativa. Hay dos caminos para inyectar inteligencia:

1. Extensión Local LLM Conversation

La integración oficial más madura. Se configura con la URL de tu instancia Ollama, el modelo y un prompt de sistema que define la personalidad y las capacidades del asistente. El prompt es crítico: debe indicarle al modelo qué entidades domóticas existen, qué puede controlar y cómo debe responder.

Ventaja: rápido de configurar, integrado en el ecosistema HA. Desventaja: el contexto es limitado; no recuerda conversaciones largas ni accede a información externa sin más integraciones.

2. Agente externo con API REST

Para proyectos más ambiciosos, prefiero un pequeño servicio Python (FastAPI) que actúa de proxy inteligente entre la voz del usuario y Home Assistant. Este agente puede:

  • Consultar el estado actual de cualquier dispositivo antes de actuar.
  • Mantener memoria de conversación en Redis o SQLite.
  • Encadenar múltiples llamadas a HA (por ejemplo, "prepara la casa para dormir" puede apagar luces, bajar persianas y ajustar la calefacción).
  • Consultar fuentes externas (calendario, clima) antes de responder.

Es más trabajo inicial, pero la flexibilidad compensa si quieres que el asistente deje de ser un mero interruptor de voz.

Pipeline de voz completo: de la palabra a la acción

El flujo que experimenta el usuario es este:

  • 1. Detección de palabra clave: openWakeWord corre continuamente en el dispositivo de entrada (un micrófono USB o un satélite ESP32 con micrófono). Cuando detecta "Hey Casa" (o tu trigger personalizado), activa la grabación.
  • 2. Transcripción (ASR): Whisper ejecutándose localmente (o faster-whisper en CPU si no tienes GPU) transcribe el audio a texto. En un M2 esto tarda ~300-800ms para frases domésticas típicas.
  • 3. Comprensión y decisión: El LLM recibe el texto transcrito, el contexto del hogar (entidades disponibles, estados actuales) y genera una respuesta junto con la acción a ejecutar.
  • 4. Ejecución: El agente traduce la intención del LLM a llamadas concretas a la API de Home Assistant (encender luz, subir temperatura, etc.).
  • 5. Respuesta de voz: Piper TTS genera el audio de respuesta (~200-400ms) y lo reproduce por el altavoz configurado.

El tiempo total de ida y vuelta, en hardware adecuado, ronda los 2-3 segundos. No es tan rápido como Alexa, pero es privado, personalizable y no depende de que Amazon siga ofreciendo el servicio gratuito.

Lecciones aprendidas en producción

He estado corriendo esta pila durante varias semanas. Algunos aprendizajes que no encontrarás en los tutoriales de setup:

  • El prompt de sistema es el 80% del éxito. Si el LLM no sabe exactamente qué entidades existen y cómo se llaman, inventará nombres o te dirá que no puede hacerlo. Exportar la lista de entidades y exponérsela en el contexto es obligatorio.
  • openWakeWord necesita entrenamiento por habitación. El ruido de fondo cambia. Un modelo entrenado en tu salón fallará en la cocina. Dedica 10 minutos a grabar muestras en cada espacio donde haya un micrófono.
  • Fallbacks son obligatorios. Cuando el LLM falla —y fallará— la automatización debe degradarse con gracia. Mi setup tiene una capa de "intenciones duras" con regex como red de seguridad para las acciones más críticas (luces, alarma, calefacción).
  • Métricas antes de optimizar. Usa las estadísticas de Home Assistant para medir tiempos de respuesta. Si el TTS tarda 2 segundos, no mejores el LLM: mejora el TTS. Los cuellos de botella no siempre están donde crees.

Coste total de la pila

Incluyendo amortización del hardware a 3 años y consumo eléctrico (~15W medio para un M2 24/7):

  • Hardware (Mac Mini M2 8GB): ~15,50€/mes amortizado.
  • Electricidad (~15W, 0,15€/kWh): ~1,60€/mes.
  • Software: 0€. Todo es open source.

Total: ~17€/mes para un asistente doméstico privado, sin límites de peticiones, sin filtrado de palabras clave por políticas corporativas y con capacidad de razonamiento que mejora cada vez que actualizas el modelo.

Próximos pasos

La arquitectura descrita funciona hoy, pero hay dos frentes abiertos que estoy explorando: integrar visión computacional local (para que el asistente "vea" mediante cámaras) y migrar el agente a un framework más estructurado como LangChain o LangGraph para gestionar flujos conversacionales complejos. Si hay interés, cubriré ambos en artículos siguientes.

¿Tienes un asistente doméstico autoalojado? ¿Qué modelo y hardware usas? La sección de comentarios está abierta.

Read more