Средний

Локальный голосовой ассистент в Home Assistant: прощаемся...

Павел Морозов
Павел Морозов
Fullstack-разработчик24 января 2026 г.15 мин чтения

Как заменить Alexa на полностью локального голосового ассистента в Home Assistant — распознавание речи, LLM, железо и настройка без облака.

Локальный голосовой ассистент в 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:

yaml
esphome:
  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:

yaml
whisper:
  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 — звучит приятно и без роботона.

yaml
piper:
  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 без дискретной видеокарты.

yaml
ollama:
  image: ollama/ollama:latest
  container_name: ollama
  restart: unless-stopped
  volumes:
    - ./ollama-data:/root/.ollama
  ports:
    - "11434:11434"
  deploy:
    resources:
      limits:
        memory: 16G

Скачивание модели:

bash
docker 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

Теперь цепочка выглядит так:

  1. Ты говоришь «Привет, какая погода завтра?»
  2. Whisper превращает речь в текст
  3. Текст уходит в Ollama
  4. LLM формирует ответ
  5. 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 дадут более естественные ответы, но уже не полностью локально. Для меня компромисс окупается приватностью — а ты как считаешь?

Поделиться:TelegramX / TwitterVK