Направьте все голосовые команды Home Assistant на кастомного агента
Вы хотите, чтобы каждая голосовая команда отправлялась вашему собственному агенту. Возможно, это локальная LLM или ассистент с поддержкой MCP.
В Home Assistant версии 2026.5 и новее стандартный способ сделать это не работает.
Если использовать обычный подстановочный знак (wildcard) в автоматизации, вы получите ошибку HTTP 500. Эта ошибка возникает из-за того, что система ищет список, которого не существует.
Даже если избежать ошибки, встроенные команды будут перехватывать ваши запросы. Если вы спросите «When is the next low tide», Home Assistant может попытаться включить следующую песню вместо ответа.
Вот как решить обе проблемы.
Проблемы
MissingListError: Когда вы используете
{text}в автоматизации, Home Assistant ожидает наличия зарегистрированного списка с именем «text». Поскольку в автоматизациях нельзя определять списки, система выдает ошибку.Перехват интентов (Intent Hijacking): Встроенные команды, такие как «turn on» или «play next», срабатывают раньше, чем ваш кастомный агент успеет получить запрос.
Решение
Вам нужно вынести логику «перехвата всего» из автоматизаций в кастомные фразы (custom sentences). Это позволит определить настоящий подстановочный знак и гарантирует, что ваша команда будет загружена первой.
Шаг 1: Создайте кастомную фразу
Создайте файл в вашей папке custom_sentences. Это зарегистрирует настоящий список подстановочных знаков.
language: "en"
intents:
NaturaliQuery:
data:
- sentences:
- "{text}"
lists:
text:
wildcard: true
Шаг 2: Используйте intent_script
Вместо автоматизации используйте intent_script в вашем configuration.yaml. Это обеспечит обработку ответа и сохранит плавность работы голосового конвейера.
intent_script:
NaturaliQuery:
speech:
text: "One moment."
action:
- action: mqtt.publish
data:
topic: my/agent/ask
payload: '{"text": "{{ text }}"}'
Почему это работает
• Список подстановочных знаков устраняет ошибку HTTP 500.
• Кастомные фразы загружаются раньше встроенных интентов. Ваш агент перехватывает команду первым.
• Использование intent_script позволяет избежать «зависаний» голоса на многих аппаратных сателлитах.
Примечание: Полный подстановочный знак будет перехватывать всё, включая «turn on the lights». Если вы хотите сохранить нативное управление, добавьте префикс к вашей кастомной фразе, чтобы она срабатывала только тогда, когда вам это нужно.
Optional learning community: https://t.me/GyaanSetuAi
