Przekieruj wszystkie komendy głosowe Home Assistant do własnego agenta

Chcesz, aby każda komenda głosowa trafiała do Twojego własnego agenta. Może to być lokalny model LLM lub asystent z obsługą MCP.

W wersji Home Assistant 2026.5 i nowszych standardowy sposób na osiągnięcie tego celu nie działa.

Jeśli użyjesz samego znaku wieloznacznego (wildcard) w automatyzacji, otrzymasz błąd HTTP 500. Błąd ten występuje, ponieważ system szuka listy, która nie istnieje.

Nawet jeśli unikniesz błędu, wbudowane komendy przejmą Twoje zapytania. Jeśli zapytasz „Kiedy będzie następny odpływ”, Home Assistant może zamiast tego spróbować odtworzyć kolejną piosenkę.

Oto jak rozwiązać oba te problemy.

Problemy

  1. MissingListError: Gdy używasz {text} w automatyzacji, Home Assistant oczekuje zarejestrowanej listy o nazwie „text”. Ponieważ nie można definiować list w automatyzacjach, system ulega awarii.

  2. Przejęcie intencji (Intent Hijacking): Wbudowane komendy, takie jak „turn on” lub „play next”, dopasowują się do Twoich słów, zanim Twój własny agent będzie miał szansę na ich przetworzenie.

Rozwiązanie

Musisz przenieść logikę typu „catch-all” z automatyzacji do własnych zdań (custom sentences). Pozwala to na zdefiniowanie prawdziwego znaku wieloznacznego i gwarantuje, że Twoja komenda zostanie załadowana jako pierwsza.

Krok 1: Utwórz własne zdanie

Utwórz plik w folderze custom_sentences. Rejestruje to prawdziwą listę wieloznaczną.

language: "en"
intents:
  NaturaliQuery:
    data:
      - sentences:
          - "{text}"
lists:
  text:
    wildcard: true

Krok 2: Użyj intent_script

Zamiast automatyzacji, użyj intent_script w pliku configuration.yaml. Obsługuje on odpowiedź i zapewnia płynność potoku głosowego (voice pipeline).

intent_script:
  NaturaliQuery:
    speech:
      text: "Chwileczkę."
    action:
      - action: mqtt.publish
        data:
          topic: my/agent/ask
          payload: '{"text": "{{ text }}"}'

Dlaczego to działa

• Lista wieloznaczna eliminuje błąd HTTP 500. • Własne zdania są ładowane przed wbudowanymi intencjami. Twój agent jako pierwszy przechwytuje komendę. • Użycie intent_script zapobiega blokadom głosowym (voice deadlocks) na wielu satelitach sprzętowych.

Uwaga: Pełny znak wieloznaczny przechwyci wszystko, w tym „turn on the lights”. Jeśli chcesz zachować natywne sterowanie, dodaj słowo prefiksu do swojego własnego zdania, aby uruchamiało się tylko wtedy, gdy tego chcesz.

Źródło: https://dev.to/clarkbw--/route-all-home-assistant-voice-to-a-custom-agent-with-a-wildcard-sentence-4iee

Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi