Home Assistant

AI Tasks in Home Assistant: LLMs strukturiert nutzen

Mit Home Assistant 2025.6 wurde ai_task als eigene Domain eingeführt – ein lange überfälliger Baustein, der das Aufrufen von Sprachmodellen aus Automationen heraus in eine strukturierte, reproduzierbare Form bringt. Wer bisher OpenAI nur über die conversation-Domain angesprochen hat, kennt das Problem: Antworten kamen als Freitext, mussten mit Templates geparst werden und brachen bei jedem Modell-Update. Mit ai_task lassen sich Aufgaben jetzt als JSON-Schema definieren, das Modell liefert strukturierte Daten zurück, und Automationen können diese ohne Parsing direkt verwenden.

Was ai_task von conversation unterscheidet

Die conversation-Entity (im System als conversation.openai_conversation) ist für Dialoge optimiert: Du sagst etwas, das Modell antwortet im natürlichen Sprachstil. Das ist perfekt für Sprachassistenten und Chat-UIs, aber ungeeignet, wenn die Antwort in einer Automation weiterverarbeitet werden soll.

ai_task (Entität ai_task.openai_ai_task_2) verfolgt einen anderen Ansatz: Du übergibst eine Aufgabe mit klarem Eingabekontext und optional einem Schema, das Modell liefert eine maschinenlesbare Antwort. Die zugrundeliegende Logik nutzt Function Calling bzw. Structured Outputs der LLM-Provider. Verfügbar sind aktuell OpenAI, Anthropic, Google Gemini und lokale Modelle via Ollama.

Setup-Beispiel: tägliche Kalender-Synthese

Ein praktisches Einsatzfeld: Morgens um 06:30 Uhr alle Kalender-Einträge des Tages durch das Modell schicken und drei Prioritäten zurückbekommen. Die Eingabe ist ein Liste von Terminen, die Ausgabe ein strukturiertes Objekt mit den drei wichtigsten Punkten und einer Empfehlung für die Tageskleidung anhand der Wettervorhersage.


automation:
  - alias: Tages-Briefing per AI Task
    trigger:
      - platform: time
        at: "06:30:00"
    action:
      - service: ai_task.generate_data
        target:
          entity_id: ai_task.openai_ai_task_2
        data:
          task_name: tages_briefing
          instructions: >
            Erstelle aus den Kalender-Einträgen ein priorisiertes
            Tages-Briefing für einen Schweizer Berufstätigen.
          input:
            calendar: "{{ state_attr('calendar.privat', 'events') }}"
            weather: "{{ states('sensor.weather_station_outdoor_module_temperatur') }}"
          structure:
            top_termin:
              description: Wichtigster Termin des Tages
              required: true
              selector:
                text:
            risiko:
              description: Konflikt oder Stress-Risiko
              required: false
              selector:
                text:
            kleidung:
              description: Kleidungsempfehlung anhand Wetter
              required: true
              selector:
                text:
        response_variable: briefing
      - service: tts.cloud_say
        data:
          entity_id: media_player.homepod
          message: >
            Guten Morgen. Top-Termin heute: {{ briefing.data.top_termin }}.
            Empfehlung: {{ briefing.data.kleidung }}.


Wichtig ist die structure-Definition: Sie zwingt das Modell, die Antwort in genau diese Felder zu pressen. Wer einen Wert nicht braucht, lässt ihn weg. Wer ihn braucht, kann sich auf das Format verlassen.

Bild-Eingabe mit Roborock-Karten

ai_task unterstützt auch Bild-Eingaben. Eine elegante Anwendung: Die Roborock-Karte nach jeder Reinigung an das Modell schicken und prüfen lassen, ob ein Bereich nicht abgedeckt wurde. Mehr zu Saugroboter-Karten und Zonen-Reinigung steht im Beitrag Saugroboter-Karten und Zonen-Reinigung mit Roborock S6 MaxV.


action:
  - service: ai_task.generate_data
    target:
      entity_id: ai_task.openai_ai_task_2
    data:
      task_name: roborock_karte_pruefen
      instructions: >
        Prüfe diese Reinigungskarte. Gibt es ungereinigte Bereiche
        oder verdächtige Hindernisse? Antworte knapp.
      attachments:
        - media_content_id: "{{ states('image.roborock_s6_maxv_erdgeschoss') }}"
          media_content_type: image/png
      structure:
        status:
          description: ok oder warnung
          selector:
            select:
              options: [ok, warnung]
        bemerkung:
          description: Erläuterung wenn warnung
          selector:
            text:
    response_variable: roborock_check


Kostenkontrolle und Privatsphäre

Jeder ai_task-Aufruf kostet API-Tokens. Wer OpenAI nutzt, sollte das günstigere gpt-4o-mini-Modell für Standard-Aufgaben in der Integration konfigurieren – das senkt die Kosten pro Anfrage auf wenige Rappen monatlich. Wer aus Datenschutzgründen keine Daten an OpenAI senden möchte, kann Ollama lokal auf einem Mini-PC betreiben und mit Llama 3.2 oder Qwen 2.5 vergleichbare Resultate für einfache Strukturierungsaufgaben erzielen. Die Anbindung erfolgt über die Ollama-Integration, der Aufruf ist identisch.

Fazit – der nächste Schritt

ai_task macht aus dem LLM in Home Assistant zum ersten Mal ein zuverlässiges Werkzeug für Automationen. Wer bisher mit Templates und brüchigen Parsing-Pipelines kämpft, sollte den Wechsel ernsthaft prüfen. Erster konkreter Schritt: Integration einrichten, eine einfache Aufgabe wie das morgendliche Briefing implementieren und das Resultat eine Woche beobachten. Wer schon die Voice-Pipeline mit Dual-Wake-Word eingerichtet hat, findet im Beitrag Dual Wake-Word und Dual Assistant mit HA Voice die ergänzende Frontend-Schicht zu den neuen Backend-Aufgaben.

← Zurück zur Übersicht