4. Мост quasard → Home Assistant¶
Колонка говорит только на протоколе Яндекса (uniproxy), поэтому нужен переводчик. quasard эмулирует облако Алисы. Патчи из каталога bridge/ заменяют его распознавание, «мозг» и синтез на REST API HA: stt.vosk → встроенный Assist → tts.piper. Torch, GPU и LLM не нужны.
1. Установка quasard без тяжёлых зависимостей¶
В контейнере:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
cd ~ && git clone https://github.com/amirilivice/quasard && cd quasard
grep -v -E 'gigaam|omegaconf' requirements.txt > req.txt
uv venv -p 3.12 .venv
uv pip install -p .venv -r req.txt
2. Файлы моста¶
Скопируйте каталог bridge/ этого репозитория в контейнер и разложите файлы по местам:
# на вашем компьютере
scp -r bridge root@192.168.1.49:/root/bridge
# в контейнере
cd ~/quasard
cp ../bridge/ha.py ../bridge/apply_*.py ../bridge/config.toml .
cp ../bridge/ha.env.example ha.env
chmod 600 ha.env
Файлы и назначение:
| Файл | Что делает |
|---|---|
ha.py |
REST-клиент HA: stt_sync, converse, tts_pcm |
apply_ha.py |
подключает ha.py к quasard, отключает Яндекс Музыку |
apply_say.py |
информер /_say (часть 7) |
apply_play.py |
плеер /_play, /_cmd (часть 7) |
apply_stream.py |
прокси радио /_stream (часть 7) |
apply_restart.py |
перезапуск моста /_restart (часть 7) |
apply_config.py |
смена движков речи /_config (часть 7) |
config.toml |
порты 443 и 80, сертификаты lite-kit, engine = "ha" |
ha.env.example |
переменные окружения |
alice-ha.service |
systemd-юнит (часть 6) |
3. Патч quasard → HA¶
cd ~/quasard
.venv/bin/python apply_ha.py
sed -i 's|@r.get("/generate_204")|@r.api_route("/generate_204", methods=["GET", "HEAD"])|' alice_server/http_api.py
Патч идемпотентный: уже применённые правки он пропускает. Вторая команда чинит HEAD /generate_204, который колонка шлёт для проверки сети.
4. Токен и настройки¶
- В HA: профиль → Безопасность → Долгосрочные токены доступа → создать.
- Откройте
~/quasard/ha.envвnanoи впишите токен вHA_TOKEN. Вставка черезsedможет оставить его пустым. - Проверьте остальные значения:
| Переменная | Значение |
|---|---|
HA_URL |
адрес HA с портом 8123, например http://192.168.1.111:8123 |
HA_TOKEN |
долгосрочный токен |
HA_STT / HA_TTS |
stt.vosk / tts.piper |
HA_LANG |
ru |
HA_AGENT |
необязательно: ID агента Assist (по умолчанию — агент по умолчанию) |
STATION_IP |
IP колонки |
BRIDGE_URL |
адрес моста, например http://192.168.1.49 |
Токен не публикуйте и не коммитьте. В DEBUG-логах моста видны OAuth-токен Яндекса и токен HA.
Сертификат стенда lite-kit покрывает uniproxy.alice.yandex.net, quasar.yandex.net и другие домены Алисы, колонка ему доверяет. Поэтому ~/lite-kit удалять нельзя.
5. Проверка связи с HA (до подключения колонки)¶
set -a; . ./ha.env; set +a
.venv/bin/python -c "import asyncio; from alice_server import ha; print(asyncio.run(ha.converse('test','который час')))"
.venv/bin/python -c "import asyncio; from alice_server import ha; p,r=asyncio.run(ha.tts_pcm('проверка связи')); print(len(p), r)"
Должны вывестись время и число сэмплов с частотой 48000. Ошибка All connection attempts failed значит, что в HA_URL нет порта 8123.
Дальше: 5. Перенаправление колонки.