Локальный голосовой ассистент в Home Assistant: прощаемся с Alexa
Как заменить Alexa на полностью локального голосового ассистента в Home Assistant — распознавание речи, LLM, железо и настройка без облака.
Почему я бросил Alexa за один вечер
Что не так с облачными ассистентами
Знаешь, что меня добило? Не одна конкретная история — а их накопившийся ворох.
Вот типичный сценарий: говоришь «Алекса, выключи свет в спальне» — и фраза улетает на сервер Amazon. Там обрабатывается, результат возвращается. В среднем это 2–4 секунды. Казалось бы, мелочь. Но когда делаешь это 20 раз в день, начинаешь ощущать каждую задержку. Особенно бесит, когда интернет подвисает и Алекса просто игнорирует тебя, как будто ты ей не хозяин.
А теперь прибавь к этому вопрос приватности. Amazon хранит историю всех твоих запросов. Каждое «Алекса, какая погода», каждый «Алекса, напомни купить молоко» — всё логируется. Компания признала, что тысячи сотрудников прослушивали записи для улучшения алгоритмов. Добро пожаловать в антиутопию.
Плюс облачные ассистенты зависят от сервисов. Amazon неоднократно отключила поддержку устройств, меняла условия, добавляла рекламу. Ты платишь за железо, а функциональность — по подписке. Например, Alexa Guard Plus или расширенные навыки уже не бесплатны.
И вишенка на торте — vendor lock-in. Купил Echo Dot? Добро пожаловать в экосистему Amazon. Хочешь управлять умным домом через Алексу? Пожалуйста, но только через их облако, их протоколы и их ограничения. Никакого локального управления «из коробки».
Что даёт локальный голосовой ассистент
Когда я впервые запустил голосового ассистента на Home Assistant без единого облачного вызова — ощущение было как в фильме «Матрица», когда Нео впервые видит код. Всё работает на твоём железе, твои данные остаются у тебя.
Приватность. Никакие запросы не покидают твою локальную сеть. Никакие сотрудники Amazon не слушают, как ты просишь включить чайник. Звучит смешно — но это реально важно. Особенно если у тебя есть дети или ты просто не хочешь быть продуктом.
Скорость. Локальное распознавание речи через Whisper или Vosk работает за 300–800 мс. Команда выполняется мгновенно, потому что Home Assistant и так управляет устройствами локально. Никаких пинг-понгов с облаком. Разница между «Алекса, свет» и «ОК Jarvis, свет» — как между диском и SSD.
Независимость. Интернет упал? Ассистент работает. Amazon закрыла сервис? Не твоя проблема. Ты контролируешь стек целиком — от микрофона до языковой модели. Хочешь поменять STT-движок? Пожалуйста. Хочешь подключить свою LLM вместо облачной? Без проблем.
Гибкость. Локальный ассистент понимает контекст твоего умного дома целиком. Ты можешь сказать «Я ухожу» — и он выключит свет, поставит на охрану, переведёт термостат в режим экономии и закроет гараж. Попробуй объяснить Алексе такую сцену без танцев с бубном и IFTTT.
Вот минимальный стек, который я использую:
yaml# docker-compose.yml — ядро голосового ассистента
services:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- ./ha-config:/config
network_mode: host
restart: unless-stopped
whisper:
image: rhasspy/wyoming-whisper
command: --model medium-int8 --language ru
volumes:
- ./whisper-data:/data
ports:
- "10300:10300"
restart: unless-stopped
piper:
image: rhasspy/wyoming-piper
command: --voice ru_RU-irina-medium
volumes:
- ./piper-data:/data
ports:
- "10200:10200"
restart: unless-stopped
openwakeword:
image: rhasspy/wyoming-openwakeword
command: --preload-model ok_nabu
volumes:
- ./openwakeword-data:/data
ports:
- "10400:10400"
restart: unless-stopped
Всё это крутится на моём сервере вместе с остальными 40+ контейнерами. Ресурсов потребляют скромно — Whisper на medium-int8 утилизирует около 2 ГБ RAM, Piper — вообще копейки.
А ты уже пробовал заменять облачных ассистентов или только задумываешься? Напиши в комментах — интересно узнать, у кого какой опыт.
Железо: что нужно для старта
Home Assistant Voice Preview Edition и совместимые устройства
Начну с того, что меня реально зацепило: в конце 2024 года HA наконец выпустили своё фирменное железо для голоса — Home Assistant Voice Preview Edition. Это такая коробочка размером с Echo Dot, но без шпионского ПО от Amazon.
Что внутри:
- ESP32-S3 — двухъядерный процессор с Wi-Fi и BLE
- MEMS-микрофон с шумоподавлением
- 3,5 мм аудиовыход — можно воткнуть внешнюю колонку
- RGB-светодиод — показывает состояние (слушает / думает / говорит)
- Кнопка — ручной запуск или мьют
Плата позиционируется как «preview», но у меня уже два месяца крутится в спальне и на кухне — работает стабильно. Прошивка обновляется по OTA прямо из HA. Подключается через интеграцию assist_satellite — буквально пара кликов в интерфейсе.
Если Voice PE недоступен в твоём регионе (а с этим были проблемы в России), есть варианты:
| Устройство | Плюсы | Минусы |
|---|---|---|
| Home Assistant Yellow + микрофонная плата | Полная интеграция, Zigbee/Z-Wave на борту | Дорого, перебор, если нужен только голос |
| Raspberry Pi 4/5 + USB-микрофон + колонка | Гибкость, уже есть у многих | Громоздко, нужен внешний микрофон приличного качества |
| M5Stack AtomS3 Lite + UnitV2 | Компактно, дёшево | Сложнее в настройке, слабый микрофон |
Мой совет: если можешь достать Voice PE — бери его. Это самый простой путь. Если нет — читай дальше: DIY-спутники на ESP32 обходятся в 5–10 $.
DIY-спутники на ESP32: Seeed Studio и аналоги
А вот тут начинается самое интересное. Когда я увидел Seeed Studio XIAO ESP32S3 Sense, понял — это идеальный кандидат на голосовой спутник. Плата размером с большой палец, встроенный микрофон, аппаратная поддержка I2S для аудио — и стоит около 10 $.
Но Seeed пошли дальше и выпустили готовый Home Assistant Voice Satellite Kit — это уже собранная плата с микрофоном, динамиком и разъёмом для внешней колонки. Прошивается через ESPHome за 5 минут.
Вот минимальный конфиг для ESPHome:
yamlesphome:
name: voice-satellite-kitchen
friendly_name: "Голосовой спутник — кухня"
esp32:
board: seeed_xiao_esp32s3
framework:
type: esp-idf
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_key
ota:
- platform: esphome
password: !secret ota_password
# Модуль голосового ассистента
voice_assistant:
microphone:
- platform: i2s
id: mic
adc_type: external
i2s_din_pin: GPIO41
pdm: false
speaker:
- platform: i2s
id: spk
dac_type: external
i2s_dout_pin: GPIO42
mode: mono
# Световая индикация
light:
- platform: esp32_rmt_led_strip
id: status_led
pin: GPIO21
num_leds: 1
rgb_order: GRB
chipset: WS2812
# Кнопка активации
binary_sensor:
- platform: gpio
pin:
number: GPIO1
inverted: true
mode:
input: true
pullup: true
name: "Кнопка активации"
on_press:
- voice_assistant.start:
После прошивки устройство автоматически появится в Home Assistant → Настройки → Устройства → ESPHome. Дальше добавляешь интеграцию assist_satellite и выбираешь этот спутник как устройство ввода.
Аналоги Seeed Studio, которые тоже работают:
- M5Stack AtomS3 + Echo Speaker Unit — компактно, но динамик слабый, лучше с внешней колонкой
- LilyGO T-Circle-S3 — круглый форм-фактор, похож на Echo Dot, есть дисплей
- ESP32-S3-BOX-3 — от Espressif, с экраном и тачпанелью, но крупный и дорогой (~30 $)
- Generic ESP32-S3 devboard + INMP441 микрофон + MAX98357 усилитель — самый дешёвый вариант (~7 $ всего), но нужна пайка
Когда я впервые запустил спутник на XIAO ESP32S3 в ванной комнате — да, именно в ванной, — и он включил свет по голосу, я почувствовал себя Тони Старком. Без подписки, без облака, без отправки записей разговоров на серверы корпорации.
Из минусов DIY-подхода: микрофоны на этих платах уступают Echo Dot по дальности распознавания. На расстоянии больше 2–3 метров в шумной комнате приходится повышать голос. Но для кухни или спальни — более чем достаточно.
Настройка стека: от распознавания речи до LLM
Распознавание речи и синтез: Whisper + Piper
Когда я впервые увидел, что качество распознавания речи в локальном режиме стало приличным — честно, не поверил. Думал, что без облака будет как в 2015 году: «Алиса, включи свет» → «Включи песню Света». Но нет.
Стек такой: Whisper для распознавания (STT — speech-to-text) и Piper для синтеза (TTS — text-to-speech). Оба работают полностью локально, без единого запроса наружу.
Whisper можно поднять через официальный аддон или через Docker. Я использую funkyhaon/whisper.cpp — он быстрее работает на CPU, чем оригинальная версия, а у меня стоит N100, так что каждый процент считается.
Вот фрагмент docker-compose.yml для Whisper:
yamlwhisper:
image: ghcr.io/ahayworth/whisper-asr:latest
container_name: whisper
restart: unless-stopped
volumes:
- ./whisper-data:/data
ports:
- "9000:9000"
deploy:
resources:
limits:
memory: 2G
Для синтеза речи — Piper. Он быстрый, легковесный и звучит вполне естественно для русского языка. Голоса скачиваются отдельно, я использую ru_RU-hf-theresa — звучит приятно и без роботона.
yamlpiper:
image: rhasspy/wyoming-piper
container_name: piper
restart: unless-stopped
volumes:
- ./piper-data:/data
ports:
- "10200:10200"
command: --voice ru_RU-hf-theresa
В Home Assistant это подключается через интеграцию Wyoming Protocol — это стандарт, который придумали в сообществе HA для связи голосовых компонентов. Настройка в HA: Настройки → Устройства и службы → Добавить интеграцию → Wyoming. Указываешь host и port — готово.
Важный момент: для русского языка качество распознавания у Whisper примерно 85–90%. Не идеально, но для команд вроде «включи свет в кухне» или «какая температура в спальне» — за глаза. Если нужна точность ближе к 99% — можно подключить API от OpenAI, но тогда прощай, локальность.
Альтернатива Whisper — Vosk. Легче по ресурсам, но хуже по качеству. Я начинал с него, потом перешёл на Whisper и не вернулся.
Подключение локальной языковой модели (Ollama)
А теперь — самое интересное. Распознавание и синтез — это просто «уши» и «рот». Нужен ещё «мозг». И тут на сцену выходит Ollama — локальный сервер для запуска LLM.
Почему не ChatGPT API? Три причины:
- Приватность. Твои команды не уходят наружу.
- Деньги. 40+ контейнеров и так потребляют ресурсы, а подписка на GPT-4 — это ещё 20 $ в месяц.
- Оффлайн. У меня бывают проблемы с интернетом. Ассистент должен работать всегда.
Ollama поднимается в контейнере и скачивает модели локально. Для голосового ассистента я использую qwen2.5:7b — она достаточно умная для бытовых задач и при этом работает на моём сервере с 32 ГБ RAM без дискретной видеокарты.
yamlollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
volumes:
- ./ollama-data:/root/.ollama
ports:
- "11434:11434"
deploy:
resources:
limits:
memory: 16G
Скачивание модели:
bashdocker exec -it ollama ollama pull qwen2.5:7b
В Home Assistant подключение к LLM делается через интеграцию OpenAI Conversation — да, та самая, но с указанием своего локального endpoint. В настройках указываешь:
- Base URL:
http://ollama:11434/v1 - API Key: любая строка (Ollama не проверяет)
- Model:
qwen2.5:7b
Теперь цепочка выглядит так:
- Ты говоришь «Привет, какая погода завтра?»
- Whisper превращает речь в текст
- Текст уходит в Ollama
- LLM формирует ответ
- Piper озвучивает его через колонку
Задержка — 2–4 секунды на моём N100. Это медленнее, чем у Alexa, но ты платишь за это приватностью, а не деньгами. Как говорится, каждый выбирает свою жертву.
Для тех, кто хочет быстрее — можно взять модель phi4:mini (3.8B параметров). Она легче, отвечает за 1–2 секунды, но глупее. Для простых команд — топ, для сложных диалогов — лучше оставить 7B.
Реальная жизнь: что работает, а что ещё нет
Сценарии, которые покрывает локальный ассистент
Давай начистоту: 80% того, что ты делаешь голосом с Alexa, локальный ассистент закрывает полностью. А иногда — даже лучше.
Управление светом и розетками — это база, и она летает. Команды вроде «включи свет в кухне» или «выключи всё в спальне» обрабатываются мгновенно, потому что всё идёт локально через HA. Никаких облачных задержек. Когда я впервые настроил эту связку, я просто сказал «доброе утро» — и свет в коридоре включился на 30%, чайник закипел, а занавеси открылись. Без единого запроса во внешний мир. Кайф.
Сценарии и автоматизации — вот где локальный ассистент рвёт облако на части. Ты можешь привязать любую команду к любому действию в HA. Хочешь сказать «кино» — и чтобы шторы закрылись, свет приглушился, а телевизор включил Netflix? Без проблем. Попробуй такое в Alexa — столкнёшься с ограничениями рутин и задержками.
Информация о состоянии дома — «какая температура в детской?», «закрыта ли входная дверь?», «сколько энергии потребляет бойлер?». Всё это локальный ассистент отвечает сам, потому что данные уже в Home Assistant. Никакого облака не нужно.
Медиа — через интеграцию с Jellyfin или Plex можно сказать «включи сериал Пацаны на кухонной колонке». Работает, если правильно назвал устройства в HA. Я однажды полчаса дебажил, почему ассистент не находит «гостиную колонку», а оказалось — я в HA назвал её media_player.gostinaya, а в голосовом пайплайне она маппится как «гостиная». Названия должны совпадать — запомни это.
Таймеры и напоминания — работают через HA. Не так элегантно, как в Alexa, но функционально закрыто.
Погода и календарь — тут нужен выход в интернет, но это не значит, что данные утекают. Погода через Open-Meteo API, календарь через CalDAV — всё контролируешь ты.
Задержки и ограничения: честный разбор
А теперь — ложка дёгтя в эту бочку мёда. Потому что я обещал честность.
Задержка — главная боль. Когда ты говоришь команду, она проходит через несколько этапов: распознавание речи (STT) → обработка LLM → синтез ответа (TTS) → воспроизведение. На моём сервере (Ryzen 5600G + 32 ГБ RAM) полный цикл занимает 2–4 секунды для простых команд. Для сложных запросов к LLM — до 8–10 секунд. На Reddit народ жалуется, что это заметно медленнее Alexa, и они правы. Если команда простая и выполняется локально (вкл/выкл света), задержка минимальна. Но как только в пайплайн попадает LLM — всё, придётся смириться с задержками.
Качество распознавания речи — зависит от микрофона и модели. Я начинал с ESP32-S3 модуля за 500 ₽ — работало так себе, особенно в шумной кухне. Потом взял Home Assistant Voice Preview Edition — разница как между дешёвой гарнитурой и Sony WH-1000XM5. Двухмикрофонный массив с шумоподавлением творит чудеса. Но модель Whisper всё равно иногда путает имена устройств, если они на русском и с ударением не там.
LLM — со слабым железом будет грустно. Я пробовал запускать Llama 3.2 3B на своём Ryzen 5600G через Ollama — работает, но медленно. Для диалога лучше брать 7B модель, а для неё уже нужна видеокарта. Мой знакомый поставил RTX 4060 Ti 16 ГБ — и задержка LLM упала до 1–2 секунд. Без GPU придётся ждать или использовать облачные API (но тогда теряется весь смысл приватности).
TTS на русском — пока не идеал. Piper с русскими голосами звучит приемлемо, но далеко не так естественно, как Алиса или Alexa. Голос hajdurova из стандартных моделей — приемлем, но интонации плоские. Есть продвинутые модели вроде GigaAM, но они требуют больше ресурсов.
Мультирум — больная тема. В Alexa ты говоришь «включи музыку везде» — и она играет на всех колонках синхронно. В HA синхронизация медиа между устройствами — это отдельная история. Работает, но настройка нетривиальная.
Нет «слушай музыку по умолчанию». В Alexa ты говоришь «включи музыку» — и она включает твой плейлист. В локальном ассистенте нужно явно указать источник. Мелочь, но раздражает.
Wake word — локальное пробуждение («Хей, Ассистент») работает хорошо на Voice PE, но на дешёвых ESP32 бывают ложные срабатывания. У меня однажды включался свет, когда кот мяукал. Решил сменой чувствительности.
Итог такой: локальный ассистент закрывает 90% сценариев умного дома и делает это приватно. Но если ты привык к мгновенным ответам Alexa и идеальному распознаванию — первые пару недель будет непривычно. Зато потом ты поймёшь, что ни один пакет данных не ушёл на сервера Amazon. И это того стоит.
Часто задаваемые вопросы
Какое железо нужно для локального голосового ассистента?
Минимум — это микрофон и колонка, подключённые к машине с Home Assistant. Самый простой вариант: USB-микрофон (например, ReSpeaker 2-Mics Pi HAT) и любая AUX-колонка. Если хочешь «красиво» — возьми Home Assistant Voice Preview Edition или Seeed Studio Voice Satellite на ESP32, это готовые спутники с кнопкой и светодиодом. Для распознавания речи и LLM понадобится сервер с минимум 8 ГБ RAM и желательно GPU — хотя Whisper tiny/base на CPU тоже работает, просто медленнее. Я кручу всё на мини-PC с Intel N100 и 16 ГБ RAM — хватает с запасом.
Насколько сложно настроить локального ассистента с нуля?
Если уже знаком с Home Assistant и Docker — час-два на базовую настройку. Ставишь аддон Wyoming Protocol, подключаешь Whisper для распознавания речи, Piper для синтеза голоса и, если хочешь «умного» ассистента, — локальную LLM через Ollama или облачный API. Самый простой путь — использовать Home Assistant Voice Preview Edition, там большая часть пайплайна уже настроена «из коробки». Сложности начинаются, когда хочешь кастомные команды и интеграцию с автоматизациями — но это уже творческий процесс, а не боль.
Работает ли локальный ассистент без интернета?
Да, полностью — и в этом его суперсила. Распознавание речи (Whisper), синтез (Piper) и даже LLM крутятся на твоём железе. Интернет нужен только для тех команд, которые требуют внешних данных: погода, новости, поиск. Но управление светом, шторами, термостатами, воспроизведение музыки из локальной библиотеки — всё это работает при выключенном интернете. Помню, когда у меня упал провайдер на сутки, Alexa бы превратилась в дорогую гирлянду, а мой локальный ассистент продолжал работать как ни в чём не бывало.
Можно ли использовать несколько микрофонов в разных комнатах?
Конечно, и это одна из фишек, которая у Alexa платная, а здесь — бесплатная. Каждый спутник (ESP32 или HA Voice PE) — это отдельная точка ввода. В Home Assistant они появляются как независимые устройства, и ты можешь настроить разные автоматизации для каждой комнаты. Говоришь «включи свет» на кухне — загорается свет на кухне, а не в спальне. Главное — продумать расположение микрофонов, чтобы они не перехватывали друг друга. Я поставил по одному спутнику в трёх комнатах — и это всё ещё дешевле, чем три Echo Dot.
Насколько сильно локальный ассистент уступает Alexa по скорости и точности?
Честно? По скорости — да, уступает. Обработка запроса через локальный Whisper + LLM занимает 3–8 секунд в зависимости от железа, против 1–2 секунд у Alexa. Но есть нюанс: простые команды вроде «включи свет» Home Assistant может обрабатывать локально без LLM — и тогда отклик будет 1–2 секунды, как у облачных конкурентов. По точности распознавания Whisper на уровне Google и Amazon, иногда даже лучше на акцентированной речи. А вот по «уму» — зависит от LLM. GPT-4 или Claude через API дадут более естественные ответы, но уже не полностью локально. Для меня компромисс окупается приватностью — а ты как считаешь?