Skip to content
BotServBotServ
Home AssistantOllamaAsistente de vozSmart HomeIA

Integrar Home Assistant con Ollama

Integra Home Assistant con Ollama. Asistente de voz, automatizaciones con IA, control por voz local y ejemplos prácticos.

S

schutzgeist

7 min read
Integrar Home Assistant con Ollama

Integrar Home Assistant con Ollama

Qué cubre este artículo

  • Cómo configurar Ollama como backend de IA para Home Assistant.
  • Cómo usar el asistente de voz local con Ollama.
  • Cómo estructurar automatizaciones con decisiones basadas en IA.
  • Ejemplos prácticos de comandos en lenguaje natural y control inteligente.
  • Mejores prácticas para rendimiento y privacidad.

Introducción: Home Assistant con Ollama

Home Assistant incluye un asistente de voz llamado Assist. Por defecto, depende de servicios en la nube. Con Ollama como backend, todo permanece local: hablas, Whisper transcribe, Ollama interpreta y decide, Home Assistant ejecuta. Ningún dato abandona tu red.

Este artículo está orientado a usuarios que desean conectar Home Assistant con IA local. Encontrarás conceptos fundamentales en Home Assistant y Ollama.

¿Por qué necesito Home Assistant con Ollama?

Los asistentes de voz estándar (Alexa, Google) envían tus comandos de voz a la nube. Home Assistant con Ollama procesa todo localmente: “enciende la luz de la sala” se transcribe con Whisper, se interpreta con Ollama y se ejecuta en Home Assistant, sin que un byte salga de tu casa.

Home Assistant con Ollama: conceptos clave

Ollama se integra en Home Assistant como agente de conversación. Assist (el asistente de voz) utiliza entonces Ollama en lugar de servicios en la nube. Además, puedes usar Ollama en automatizaciones y scripts para tomar decisiones inteligentes.

La idea central es simple: IA local como cerebro para tu hogar inteligente.

Para quién está pensado este artículo

  • Usuarios de Home Assistant que quieren IA local.
  • Personas conscientes de privacidad que rechazan asistentes de voz en la nube.
  • Autohospedadores que ejecutan Ollama en su hogar inteligente.
  • Entusiastas que construyen control por voz natural.

Resulta útil tener experiencia previa con Home Assistant y Ollama.

Términos importantes

  • Home Assistant - Plataforma de hogar inteligente. Utilidad: la base del sistema.
  • Assist - Asistente de voz de HA. Utilidad: control por voz.
  • Ollama - Servidor de modelos local. Utilidad: el backend de IA.
  • Whisper - Conversión de voz a texto. Utilidad: entrada de voz.
  • Piper - Conversión de texto a voz. Utilidad: salida de voz.
  • Conversation Agent - Backend de IA para Assist. Utilidad: la conexión.
  • Wyoming - Protocolo para servicios de voz. Utilidad: para Whisper/Piper.

Configuración: Ollama como agente de conversación

1. Ollama en ejecución

# Ollama se ejecuta en http://ollama:11434
# Descargar modelo:
ollama pull llama3.1

2. Integración de Ollama en HA

# configuration.yaml
ollama:
  url: http://ollama:11434

O a través de la interfaz:

  1. Settings → Devices & Services → Add Integration
  2. Busca “Ollama”
  3. Ingresa la URL: http://ollama:11434
  4. Selecciona el modelo: llama3.1

3. Configurar Assist

# configuration.yaml
conversation:
  intents:
    # Custom Intents aquí

En la interfaz:

  1. Settings → Voice Assistants → Assist
  2. Conversation Agent: Ollama
  3. STT: Whisper (local)
  4. TTS: Piper (local)

Asistente de voz completamente local

Entrada de voz
    │
    ▼
Whisper (STT) ──► Texto
    │
    ▼
Ollama (LLM) ──► Interpreta comando
    │
    ▼
Home Assistant ──► Ejecuta
    │
    ▼
Piper (TTS) ──► Salida de voz

Contenedores Wyoming para Whisper y Piper

version: "3.8"

services:
  whisper:
    image: rhasspy/wyoming-whisper:latest
    container_name: whisper
    restart: unless-stopped
    ports:
      - "10300:10300"
    volumes:
      - whisper_data:/data
    command: --model small --language de
    networks:
      - smarthome

  piper:
    image: rhasspy/wyoming-piper:latest
    container_name: piper
    restart: unless-stopped
    ports:
      - "10200:10200"
    volumes:
      - piper_data:/data
    command: --voice de_DE-thorsten-high
    networks:
      - smarthome

  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    networks:
      - smarthome

  homeassistant:
    image: homeassistant/home-assistant:latest
    container_name: homeassistant
    restart: unless-stopped
    ports:
      - "8123:8123"
    volumes:
      - ha_config:/config
    networks:
      - smarthome

volumes:
  whisper_data:
  piper_data:
  ollama_data:
  ha_config:

networks:
  smarthome:
    driver: bridge

Ejemplo práctico 1: Comandos en lenguaje natural

# Automatización de Home Assistant
automation:
  - alias: "Control de luz con IA"
    trigger:
      - platform: conversation
        command:
          - "Enciende la luz [en] {room}"
          - "Apaga la luz [en] {room}"
    action:
      - service: light.toggle
        target:
          area_id: "{{ trigger.slots.room }}"

O de forma más compleja con Ollama:

automation:
  - alias: "Interpretar comando de IA"
    trigger:
      - platform: event
        event_type: voice_command
    action:
      - service: ollama.generate
        data:
          prompt: "Interpreta: '{{ trigger.event.data.command }}'
                   Acciones disponibles: licht_an, licht_aus, temperatur,
                   musik_an, musik_aus, rollo_hoch, rollo_runter
                   Responde como JSON: {action, entity, params}"
        response_variable: ki_response
      - choose:
          - conditions: "{{ 'licht' in ki_response.text }}"
            sequence:
              - service: light.toggle
                data:
                  entity_id: "{{ ki_response.entity }}"

Ejemplo práctico 2: Control inteligente de temperatura

automation:
  - alias: "Clima con IA"
    trigger:
      - platform: time_pattern
        minutes: "/15"
    action:
      - service: ollama.generate
        data:
          prompt: |
            Datos actuales:
            - Temperatura exterior: {{ states('sensor.aussentemperatur') }}°C
            - Temperatura interior: {{ states('sensor.innentemperatur') }}°C
            - Humedad: {{ states('sensor.luftfeuchtigkeit') }}%
            - Presente: {{ states('person.max') }}
            - Hora: {{ now().strftime('%H:%M') }}
            - Día: {{ now().strftime('%A') }}

            ¿Qué debería hacer la calefacción/aire acondicionado?
            Responde: calentar, enfriar, apagar, o ventilar
            + una breve justificación
        response_variable: ki_decision
      - choose:
          - conditions: "{{ 'calentar' in ki_decision.text }}"
            sequence:
              - service: climate.set_hvac_mode
                data:
                  hvac_mode: heat
          - conditions: "{{ 'enfriar' in ki_decision.text }}"
            sequence:
              - service: climate.set_hvac_mode
                data:
                  hvac_mode: cool

Ejemplo práctico 3: Informe matutino

automation:
  - alias: "Informe de la mañana"
    trigger:
      - platform: time
        at: "07:30:00"
    action:
      - service: ollama.generate
        data:
          prompt: |
            Crea un informe matutino breve:
            - Clima: {{ states('weather.home') }}
            - Temperatura exterior: {{ states('sensor.aussentemperatur') }}°C
            - Hoy: {{ now().strftime('%A, %d.%m.%Y') }}
            - Calendario: {{ states('calendar.personal') }}
            - Precio de electricidad: {{ states('sensor.strompreis') }} centavos/kWh

            Resume todo en 3 oraciones.
        response_variable: briefing
      - service: notify.notify
        data:
          title: "Informe matutino"
          message: "{{ briefing.text }}"
      - service: tts.speak
        data:
          message: "{{ briefing.text }}"
          media_player_entity_id: media_player.kueche

Caso práctico 4: Análisis de seguridad

automation:
  - alias: "KI-Sicherheitsanalyse"
    trigger:
      - platform: state
        entity_id: binary_sensor.bewegung
        to: "on"
    condition:
      - condition: time
        after: "23:00"
        before: "06:00"
    action:
      - service: ollama.generate
        data:
          prompt: |
            Nächtliche Bewegung erkannt:
            - Sensor: {{ trigger.entity_id }}
            - Zeit: {{ now().strftime('%H:%M') }}
            - Personen zu Hause: {{ states('group.personen') }}
            - Letzte Alarme: {{ states('sensor.letzte_alarme') }}

            Ist das verdächtig? Antworte: normal/verdaechtig + Grund
        response_variable: analyse
      - choose:
          - conditions: "{{ 'verdaechtig' in analyse.text }}"
            sequence:
              - service: notify.notify
                data:
                  title: "Sicherheitsalarm"
                  message: "{{ analyse.text }}"
              - service: camera.snapshot
                data:
                  entity_id: camera.flur

Notas de seguridad

  • Todo en local: Ollama, Whisper, Piper, todo funciona localmente. No necesitas la nube.
  • Tokens: Mantén el token de Home Assistant para la integración con Ollama al mínimo.
  • Validación: Las decisiones de IA en acciones críticas (abrir puertas, activar alarmas) requieren confirmación humana. Consulta Aprobación manual.
  • Registro: Documenta las decisiones de IA. Consulta Protocolo.

Obstáculos comunes

  • Modelo demasiado lento: Los modelos grandes (>13B) son lentos para procesamiento de voz en tiempo real. Usa llama3.1:8b o phi3.
  • Modelo Whisper: small es un buen equilibrio. large es más preciso, pero más lento.
  • Voz en alemán: Para Piper usa de_DE-thorsten-high para una buena calidad.
  • Contexto demasiado largo: Demasiadas entidades en el prompt sobrecargan el modelo. Filtra las relevantes.
  • IA interpreta mal: “Luz encendida” puede afectar múltiples entidades. Usa prompts precisos con lista de entidades.

Enlaces de interés

Puntos clave:

  • Home Assistant + Ollama = asistente de voz completamente local.
  • Whisper para STT, Ollama para comprensión, Piper para TTS.
  • IA en automatizaciones para tomar decisiones inteligentes.
  • Todo local, sin nube, sin salida de datos.
  • Modelos pequeños (8B) para tiempo real, grandes para análisis.

Preguntas frecuentes

¿Cómo conecto Ollama con Home Assistant?

A través de la integración Ollama en Home Assistant: Settings → Devices & Services → Add Integration → Ollama → ingresa la URL.

¿Puedo ejecutar el asistente de voz completamente en local?

Sí. Whisper para conversión de voz a texto, Ollama para comprensión, Piper para síntesis de voz. Todo se ejecuta localmente, sin necesidad de nube.

¿Qué modelo de Ollama usar para casa inteligente?

llama3.1:8b o phi3:mini para comandos de voz rápidos. Para análisis más complejos (reportes, tendencias) puedes usar un modelo más grande.

¿Qué modelo de Whisper debo usar?

small equilibra bien velocidad y precisión. tiny es muy rápido (menos preciso). large máxima precisión (lento).

¿Cuál es la velocidad del control por voz?

Whisper small: 1-2 segundos para transcripción. Ollama 8B: 2-5 segundos para interpretación. Total: 3-7 segundos desde la voz hasta la acción.

¿Mis datos se mantienen privados?

Completamente. Whisper, Ollama y Piper se ejecutan localmente. Los datos de voz no salen de tu red. Esta es la principal ventaja sobre Alexa o Google.

¿Qué hardware necesito?

Para Whisper small + llama3.1:8b: alrededor de 10 GB de VRAM. Una RTX 3060 12GB es suficiente. Solo CPU es más lento, pero viable.

¿Qué pasa si la IA entiende mal?

La IA puede interpretar mal los comandos. Para acciones críticas (abrir puertas, activar alarmas) requiere confirmación. Los prompts precisos ayudan.

Fuentes y referencias

Volver al blog
Share:

Entradas relacionadas