Skip to content

Колонка на компьютере ​

Экспериментально

Колонка Хомера на компьютере в 1.0 экспериментальная: настроена и проверена на одном доме, на вашем может потребовать доводки.

Колонка — программа speaker.py. Её ставит и держит запущенной Homer Node с ролью «Колонка»: копия репозитория Homer для этого не нужна. Как поставить сам узел и связать его с домом — на странице узла.

Запуск через Homer Node ​

homer-node speaker --name pc -- --dshow "Microphone (Logitech BRIO)" --log tmp\speaker.log

Узел сам скачивает пакет колонки той же версии, что и он (архив сверяется по sha256 и подписи), ставит Python с зависимостями и перезапускает колонку, если она упала. Обновился узел — обновится и колонка. Своё колонка хранит в папке узла %LOCALAPPDATA%\homer-node\speaker-home: ключи в secrets\, адреса дома в homer.conf, журналы в tmp\. Адрес сервера дома узел передаёт ей из сопряжения.

Ключи колонке выдаёт владелец: в вебе или приложении Хомера «Настройки» → «Узлы» → «Ключи колонке» у своего узла. Сервер отдаёт узлу по его связи токен Home Assistant и ключ колонки к серверу, узел кладёт их в secrets\ с правами только для своего пользователя — и получает заново при каждом подключении. Чужому узлу (компьютеру друга) ключи не выдаются. Пока ключей нет, колонка не падает: журнал и окно узла пишут «не настроено» и что именно отсутствует. В режиме службы Windows колонка живёт в спутнике без связи с сервером — там ключи пока кладут в secrets\ руками.

Узнавание голоса — кто говорит: свой или гость — по моделям из прошивки колонок Яндекса: узел их не раздаёт. Если они у вас есть, положите body.onnx, head.onnx (и по желанию gender.onnx, age.onnx) в speaker-home\voiceid — узел передаст путь колонке. Сам альбом голосов живёт на сервере Хомера, один на дом.

Проверить без микрофона: homer-node speaker --check — поставит пакет и окружение и спросит у колонки --help.

Запуск из копии репозитория ​

Разработчику: homer-node speaker --name pc --dir C:\путь\к\HA -- … — узел запускает tools\speaker\speaker.py из копии, ключи берутся из её secrets\. Без узла — так:

pythonw tools\speaker\speaker.py --dshow "Microphone (Logitech BRIO)" --log tmp\speaker.log
ПараметрЧто значит
--dshowИмя микрофона, как его видит ffmpeg. Список: ffmpeg -list_devices true -f dshow -i dummy. Потом микрофон можно сменить из приложения — «Какой микрофон слушать»
--logЖурнал колонки: что услышала, что ответила, сколько заняло
--portHTTP-вход колонки, по умолчанию 8790
--dryНичего не трогать в доме, только печатать команды (для проверки)
--say "…"Прогнать фразу без микрофона
--uniproxyПорт для Яндекс.Станций, которые ходят в облако Алисы через колонку (см. ниже), например 8788

Задача планировщика ​

Нужна только при запуске без узла.

  • Запуск от того же пользователя Windows, под которым выполнен вход в Claude Code: мозги используют его вход.
  • Нужны два триггера: «При входе в систему» и «Повторять каждые 2 минуты». Если новый экземпляр запускается при работающем старом, его надо пропускать (Не запускать новый экземпляр).

Почему нужен повтор

Если микрофон перестаёт отдавать звук (у веб-камер так бывает), колонка сама выходит, чтобы её подняли заново. Но планировщик Windows не перезапускает задачу, которая завершилась с ошибкой: он повторяет только неудачный запуск. Без повторного триггера колонка будет лежать до перезагрузки.

Порт 8790 ​

Колонка слушает 8790 в домашней сети. Через него:

  • сервер дома отдаёт ей реплики навыка Алисы и пробу голоса;
  • резервная колонка проверяет, жива ли основная;
  • инструменты включают музыку, таймеры и поручения;
  • сценарии играют звуки (см. ниже).

GET /health показывает состояние: адрес speaches и голос, что играет, идёт ли поручение, какие инструменты включены.

Имена колонки ​

Настройки → Колонка → Имена колонки. По умолчанию колонка отзывается на «Хомер», «Гомер» и протяжное «Эээй».

  • Можно добавить своё имя, но редкие слова распознавание узнаёт хуже.
  • Короткое «эй» срабатывает, только если сказано первым словом и протяжно: в телевизоре оно звучит постоянно.
  • Колонка забирает имена у сервера дома раз в минуту, перезапуск не нужен.

Резервная колонка ​

На сервере дома (GPD) может работать вторая колонка со своим микрофоном. Пока колонка на компьютере жива, отвечает она, а резервная уступает ей 1,5 секунды. Своего Claude Code у резервной нет: свет и быстрые команды она разбирает сама, а остальное пересылает основной колонке и играет её ответ.

Если компьютер выключен, резервная отвечает и на сложное: спрашивает выбранную в доме облачную модель напрямую, без инструментов и памяти. Для этого в Настройки → Колонка → Мозги Хомера → Чем думает должно быть выбрано облако с ключом, например DeepSeek. С подпиской Claude без компьютера понимается только свет.

Третья колонка — Smartbox в гостиной: без компьютера она подключается к GPD.

Перегрев GPD

Колонки — главная постоянная нагрузка GPD. Сторож homer-thermlog раз в 30 секунд пишет температуру; на 85 °C он останавливает колонки на GPD, на 65 °C запускает снова. Вентилятор GPD должен быть включён: при долгих ~90 °C GPD зависал вместе с домом.

Микрофоны колонки ​

Настройки → Колонка → Микрофоны колонки. У каждого экземпляра колонки Хомера — на компьютере, резервного на сервере дома — свой переключатель. Можно оставить все, любой один или выключить все.

  • Колонки проверяют настройку раз в 5 секунд, поэтому выключатель срабатывает почти сразу и перезапуск не нужен.
  • Выключенная колонка не закрывает микрофон, а просто не слушает. Включается так же быстро.
  • Если микрофон компьютера выключен, резервная колонка больше не ждёт его и отвечает сразу. Сложные вопросы она по-прежнему пересылает компьютеру, и ответ звучит из её динамика.
  • Переключатель — только про собственный микрофон машины. Сетевые колонки, подключённые к этому экземпляру, слушают по своей галочке «Слушает» в «Колонках дома».
  • «Приглушать звук при обращении» — пока колонка слушает «Хомер, …», звук других программ на её машине становится тише, а после ответа возвращается.

Какой микрофон слушать ​

Микрофон задаётся при установке (--dshow), но менять его можно без перезапуска: в блоке «Какой микрофон слушать» у каждого экземпляра — список микрофонов его машины (колонка сообщает их серверу дома раз в минуту). «По умолчанию» — тот, что задан при установке. Выбор доходит до колонки за несколько секунд, захват переключается на ходу — Хомер не глохнет на время смены.

Запасной путь без приложения — ключ input в settings.json колонки, в каталоге мозгов рядом с output: имя микрофона, как его видит ffmpeg.

У ReSpeaker Mic Array драйверов для Windows нет: на компьютере он отдаётся в WSL, а оттуда звук идёт колонке — в списке это вход «Мост из WSL (udp:8799)». У колонки с ReSpeaker в этой же карточке появляется выбор «ReSpeaker: шум в комнате». Подробно про плату — своя колонка на ReSpeaker.

Вычитать звук компьютера ​

Переключатель «Вычитать звук компьютера» у каждого экземпляра. Видео, музыка и игры, которые играет сама машина колонки, вычитаются из её микрофона так же, как собственный голос колонки, — Хомер слышит вас сквозь фильм с этого компьютера. Звук телевизора с его собственным приложением так не вычесть: для него — режим «Шумная» у ReSpeaker или микрофон ближе к вам.

Сквозь телевизор ​

Под непрерывным фоном — телевизор, разговор рядом — колонка слушает иначе:

  • Реплика собирается не дольше 8 секунд от начала и не длиннее 15: под телевизором «включи свет» исполняется через пару секунд, а не склеивается с фоном в один ком.
  • Просьба — «напомни…», «скажи…», «включи…» — в течение 20 секунд после подтверждённого имени ваша, даже если после «Хомер» вы сделали паузу и просьба пришла отдельно.
  • Пока в комнате, по данным Home Assistant, играет телевизор, колонка откликается на имя, но разговор без имени после отклика не продолжается: имя, прозвучавшее в видео, не должно включать свет. Говорите имя и просьбу вместе.
  • Фоновую речь колонка замечает сама и ждёт имени: в журнале это «рядом фоновая речь (телевизор?) — пока только по имени».

Звук сценариев ​

Сценарий дома может сыграть звук на колонках Хомера: действие «звук» в справочнике сценариев. Колонка принимает его запросом POST /sound.

ЗвукЧто это
Звонокдверной звонок, два тона
Переливчетыре ноты вверх
Сигналтри коротких писка
Тревогачередование двух тонов
Сиренаплавный вой вверх-вниз
Файл по ссылкелюбой звук по адресу, не длиннее минуты
  • Свои звуки колонка синтезирует сама, файлы для них не нужны.
  • Где играть — Smartbox, компьютер, GPD в любом сочетании. Выключенная машина не роняет сценарий.

Станция через Хомера ​

Рутованная Яндекс.Станция может ходить в облако Алисы не напрямую, а через колонку. Тогда Алиса работает как обычно, но фразу, которая начинается с имени Хомера, забирает Хомер:

Алиса… Хомер, сколько градусов в спальне?

Яндекс распознаёт фразу, его ответ колонка глушит. Ответ Хомера его голосом играет сама Станция: своим плеером, с приглушением музыки и анимацией. Отдельный микрофон и программы на Станции для этого не нужны.

  • Запустить колонку с --uniproxy 8788.
  • На Станции в quasar.cfg заменить uniProxyUrl на ws://<адрес ПК>:8788/uni.ws и перезапустить quasar.
  • Комната и голос берутся по адресу Станции из списка Колонки дома в настройках, как у спутников.
  • Если Хомер не ответил за 40 секунд или сломался, Станции уходит придержанный ответ Алисы.

Токены Станции

Через колонку идут ключи Станции к аккаунту Яндекса. В журнал они не пишутся, но порт 8788 нельзя открывать наружу из домашней сети.