Голосовой ассистент Home Assistant

Голосовой ассистент Home Assistant (Assist) принимает команды голосом, управляет устройствами и отвечает синтезированной речью. Для локальной работы настройте распознавание Whisper и синтез Piper, затем подключите телефон с приложением Home Assistant или голосовое устройство.

Что понадобится

Для локальной установки Whisper и Piper в виде приложений нужен Home Assistant OS. Если Home Assistant еще не установлен, начните с гайда по установке Home Assistant. Про контейнерную установку есть отдельный гайд про Docker.

  • телефон с приложением Home Assistant или голосовое устройство;
  • настроенное распознавание и синтез речи;
  • для потокового распознавания фразы активации (streaming) - Home Assistant OS 2023.10 или новее и готовый Assist-пайплайн, локальный или облачный; пайплайн - последовательность обработки голосового запроса;
  • для прошивки ATOM Echo из браузера - само устройство, кабель USB-C, логин и пароль Wi-Fi 2.4 GHz и настольный Chrome или другой Chromium-браузер.

Прошивка ATOM Echo из браузера не работает на планшете и телефоне.

Настройка ассистента

Запустите Whisper и Piper, создайте ассистента, откройте ему доступ к сущностям и подключите фразу активации.

1. Сервисы распознавания и синтеза

Установите и запустите два аддона (теперь apps) - Whisper и Piper. Первый расшифровывает речь, второй синтезирует голос. После запуска примите обнаруженные сервисы в Settings > Devices & services кнопкой Add. Оба используют Wyoming Protocol - протокол связи с сервисами речи.

Piper оптимизирован под Raspberry Pi 4. Качество синтеза проверьте на нужном языке.

Дальше создайте ассистента в Settings > Voice assistants через Add assistant. Задайте имя и язык общения, в качестве Conversation agent выберите Home Assistant, для Speech-to-text укажите Whisper, для Text-to-speech - Piper, и проставьте языки обоих сервисов.

Если автообнаружение (discovery) не сработало, добавьте сервисы вручную через Add Integration - Whisper и Piper - и пройдите подсказки мастера.

2. Доступ сущностей к голосу

Откройте вкладку Expose в Settings > Voice assistants, выберите сущность и включите для нее Assist. Для массовой настройки есть кнопка Expose entities - отметьте все сущности, которыми хотите управлять голосом.

3. Установка openWakeWord

Установите и запустите openWakeWord в разделе Settings > Apps > openWakeWord кнопкой Install. Затем в Settings > Devices & services на вкладке Discovered нажмите Configure у обнаруженного Wyoming-компонента и подтвердите ввод кнопкой Submit.

4. Фраза активации у ассистента

В Settings > Voice assistants откройте меню из трех точек в правом верхнем углу ассистента и выберите Add streaming wake word. В поле Streaming wake word engine укажите openwakeword, начальная тестовая фраза - ok nabu. Существующего ассистента сохраните кнопкой Update, нового создавайте через Create.

Подключение ATOM Echo

Откройте официальную страницу прошивки в настольном браузере.

  1. Подключите устройство кабелем USB-C к компьютеру, на странице туториала нажмите Connect и выберите USB-последовательное устройство.
  2. Нажмите Install Voice Assistant, затем Install - в устройство установится голосовая прошивка.
  3. Кнопкой Next перейдите к настройке Wi-Fi 2.4 GHz.
  4. Нажмите Add to Home Assistant и подтвердите диалог кнопкой OK.
  5. Примите предложение настройки и пройдите мастер - выберите фразу активации и голос, завершите кнопкой Done.

Скажите фразу активации, дождитесь, когда светодиод замигает синим, и произнесите поддерживаемую команду.

Отладка пайплайна

В Settings > Voice assistants откройте Debug и выберите нужный запуск из выпадающего списка - видно, что происходило на каждом этапе обработки запроса.

Если команды выполняются, но голосового ответа нет, проверьте, что устройство видит локальный адрес Home Assistant - ответ оно скачивает с вашего сервера. В Settings > System > Network для Local Network выберите Automatic. При конфигурации YAML без default_config: добавьте еще и media_source:.

Другие варианты

microWakeWord распознает фразу активации на самом устройстве, например на ESP32-S3-BOX-3 и Android-телефонах. Streaming openWakeWord обрабатывает звук на сервере Home Assistant и расходует ресурсы сервера и сети на каждый сателлит - голосовое устройство-клиент.

Частые проблемы

При недоступном адресе Home Assistant устройство не может скачать озвученный ответ. У пользователей форума помогали решения из таблицы; число веток указано для каждой проблемы.

ПроблемаТекст ошибкиЧто помогало пользователям
Аудио TTS (синтез речи) не скачивается, Home Assistant отдает недоступный адрес (4 ветки форума)Retrieving artwork through `readpicture` command failed: [5@0] {readpicture} CURL failed: Failed to connect to 172.18.0.2 port 8123 after 3080 ms: Couldn't connect to server.Для Sonos в разных VLAN (виртуальных сетях) - internal URL с IP хоста и портом 8123 плюс правка правил файрвола; для Sonos также использовали Chime TTS с локальной директорией и рабочим URL, собранным через Jinja2; для MPD - internal_url с IP Home Assistant в core.config; для Google Home Mini - закомментировать external_url и country, затем исправить адреса в настройках сети; для Squeezebox Radio - добавить IP Home Assistant в поле внешнего URL
Сателлит распознает речь, но динамик молчит (3 ветки)-В схеме с MAX98357 - пропаять площадку для вывода 5V на Vin (частично); для DAC (цифро-аналогового преобразователя) без резистора на выводе SD - подключить SD к 3.3V; для Atom Echo с нерабочей штатной конфигурацией динамика - забрать устройство в ESPHome Builder, собрать и установить онлайн-конфигурацию (частично)
Устройства и сервисы голоса не обнаруживаются в сети (3 ветки)-Для Home Assistant Voice Preview Edition (Voice PE) в другой подсети - сетевое автообнаружение mDNS с пересылкой между подсетями (mDNS forwarding); для необнаруженного голосового аддона (apps) - добавить Wyoming вручную с хостом и портом, затем создать Assist-пайплайн и включить openWakeWord; для сателлита в отдельной подсети через Tailscale - статический IP и ручное добавление
Ошибки памяти при голосовых ответах (2 ветки)[11:04:54.528][E][speaker_media_player.pipeline:112]: Media reader encountered an error: ESP_ERR_NO_MEMобновление прошивки Voice PE до 25.9.0, куда входят исправления 25.7.0
Прошивка ESPHome не собирается или не проходит проверку после обновлений (3 ветки) Component media_source.http_request requires component http_request.Для Voice PE с указанной ошибкой проверки - добавить http_request в конец YAML
Голосовой ответ нужно выводить на другую колонку (2 ветки)-автоматизация conversation с tts.speak и вспомогательным списком input-select для выбора колонки (частично); вместе с ней останавливать медиаплеер Atom Echo, когда он начинает воспроизводить

Частые вопросы

Какие команды понимает Speech-to-Phrase?

Speech-to-Phrase распознает заранее заданные команды управления домом. Он работает локально и быстрее на слабом железе, но не расшифровывает произвольную речь. Списки покупок, именованные таймеры и объявления из коробки недоступны. Для свободной речи есть Whisper, которому нужно больше вычислительных ресурсов, чем Speech-to-Phrase.

Нужно ли вручную включать интеграцию пайплайна?

Да, если собственная конфигурация не включает стандартную интеграцию. В этом случае добавьте assist_pipeline: в configuration.yaml и перезапустите Home Assistant. В конфигурации по умолчанию интеграция пайплайна уже есть. Она настраивается автоматически, когда требуется другим интеграциям, поэтому при стандартной конфигурации вручную добавлять эту запись не нужно.

Какое устройство выбрать для голоса?

Из готовых устройств документация рекомендует Home Assistant Voice Preview Edition. Assist также доступен через иконку на панели управления и в приложении Home Assistant, поэтому отдельное голосовое устройство покупать не обязательно. Можно использовать совместимые готовые и самодельные устройства. Совместимое оборудование может провести настройку через мастер.

Что нужно для прошивки ESP32-S3-BOX?

Нужны Home Assistant OS 2023.12 или новее, настроенный пайплайн, настольный Chrome или Edge, Wi-Fi 2.4 GHz и кабель USB-C. Отдельная инструкция охватывает ESP32-S3-BOX, BOX-3(B) и BOX-Lite. При прошивке BOX-3 подключайте кабель к самой коробке и компьютеру. Разъем док-станции, синей части устройства, для этого не используйте.

Чем облачный ассистент отличается от локального?

Подписка Home Assistant Cloud переносит распознавание и синтез речи в облако. Туда уходит только аудио, действия с устройствами выполняет локальный Home Assistant. Ассистент создается автоматически при подключении облака. Проверьте региональные настройки языков в Settings > Voice assistants (Speech-to-text, Text-to-speech). Подробности - в гайде об удаленном доступе и Nabu Casa.

Андрей Ковалев, редактор. Собирает решения из веток форума Home Assistant и сверяет команды и настройки с официальной документацией.