Колонка на компьютере
Экспериментально
Колонка Хомера на компьютере в 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 | Журнал колонки: что услышала, что ответила, сколько заняло |
--port | HTTP-вход колонки, по умолчанию 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 нельзя открывать наружу из домашней сети.