Instrada tutti i comandi vocali di Home Assistant verso un agente personalizzato
Vuoi che ogni comando vocale venga inviato al tuo agente personale. Potrebbe trattarsi di un LLM locale o di un assistente con supporto MCP.
Su Home Assistant 2026.5 e versioni successive, il metodo standard per farlo non funziona.
Se utilizzi un semplice carattere jolly (wildcard) in un'automazione, riceverai un errore HTTP 500. Questo errore si verifica perché il sistema cerca una lista che non esiste.
Anche se eviti l'errore, i comandi integrati intercetteranno le tue richieste. Se chiedi "Quando sarà la prossima bassa marea?", Home Assistant potrebbe invece provare a riprodurre la canzone successiva.
Ecco come risolvere entrambi i problemi.
I Problemi
MissingListError: Quando utilizzi
{text}in un'automazione, Home Assistant si aspetta una lista registrata chiamata "text". Poiché non è possibile definire liste nelle automazioni, il sistema va in crash.Intent Hijacking: I comandi integrati come "accendi" o "riproduci successivo" corrispondono alle tue parole prima che il tuo agente personalizzato abbia la possibilità di intervenire.
La Soluzione
Devi spostare la logica di intercettazione totale (catch-all) dalle automazioni alle frasi personalizzate (custom sentences). Ciò ti consente di definire un vero carattere jolly e garantisce che il tuo comando venga caricato per primo.
Passaggio 1: Crea una frase personalizzata
Crea un file nella cartella custom_sentences. Questo registrerà una vera lista wildcard.
language: "en"
intents:
NaturaliQuery:
data:
- sentences:
- "{text}"
lists:
text:
wildcard: true
Passaggio 2: Usa un intent_script
Invece di un'automazione, usa un intent_script nel tuo configuration.yaml. Questo gestisce la risposta e mantiene fluido il flusso vocale.
intent_script:
NaturaliQuery:
speech:
text: "One moment."
action:
- action: mqtt.publish
data:
topic: my/agent/ask
payload: '{"text": "{{ text }}"}'
Perché questo funziona
• La lista wildcard interrompe l'errore HTTP 500.
• Le frasi personalizzate vengono caricate prima degli intent integrati. Il tuo agente intercetta il comando per primo.
• L'uso di intent_script evita blocchi vocali (deadlocks) su molti satelliti hardware.
Nota: Un carattere jolly totale intercetterà tutto, inclusi comandi come "accendi le luci". Se desideri mantenere il controllo nativo, aggiungi una parola di prefisso alla tua frase personalizzata, in modo che si attivi solo quando lo desideri.
Optional learning community: https://t.me/GyaanSetuAi
