Two-agent voice assistant (Cosmo + Люся) via OpenClaw Gateway. Streaming STT (Groq) + LLM + TTS (ElevenLabs) pipeline with keep-alive sessions, barge-in, and daily conversation sessions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
117 lines
3.8 KiB
Bash
Executable File
117 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# ============================================================
|
||
# Cosmo Voice Satellite — полная установка на Raspberry Pi 5
|
||
# Запуск: sudo bash setup.sh
|
||
# ============================================================
|
||
|
||
APP_DIR="/home/daniil/home-voice-assistant"
|
||
APP_USER="daniil"
|
||
SERVICE_NAME="cosmo-satellite"
|
||
|
||
echo "========================================"
|
||
echo " Cosmo Satellite — установка на Pi 5"
|
||
echo "========================================"
|
||
|
||
# --- 1. Системные пакеты ---
|
||
echo ""
|
||
echo "▶ 1/6 Устанавливаю системные пакеты..."
|
||
apt-get update
|
||
apt-get install -y \
|
||
python3 \
|
||
python3-venv \
|
||
python3-dev \
|
||
python3-pip \
|
||
portaudio19-dev \
|
||
libsndfile1 \
|
||
pulseaudio \
|
||
pulseaudio-module-bluetooth \
|
||
bluez \
|
||
bluez-tools \
|
||
ffmpeg \
|
||
git
|
||
|
||
# --- 2. Python venv ---
|
||
echo ""
|
||
echo "▶ 2/6 Создаю виртуальное окружение..."
|
||
cd "$APP_DIR"
|
||
sudo -u "$APP_USER" python3 -m venv .venv
|
||
sudo -u "$APP_USER" .venv/bin/pip install --upgrade pip
|
||
sudo -u "$APP_USER" .venv/bin/pip install -r requirements.txt
|
||
|
||
# --- 3. Проверка .env ---
|
||
echo ""
|
||
echo "▶ 3/6 Проверяю .env..."
|
||
if [ ! -f "$APP_DIR/.env" ]; then
|
||
echo "❌ Файл .env не найден! Скопируй .env на Pi перед запуском."
|
||
exit 1
|
||
fi
|
||
|
||
# Проверяем ключевые переменные
|
||
source "$APP_DIR/.env"
|
||
if [ -z "${GATEWAY_TOKEN:-}" ]; then
|
||
echo "❌ GATEWAY_TOKEN не задан в .env"
|
||
exit 1
|
||
fi
|
||
if [ -z "${GROQ_API_KEY:-}" ]; then
|
||
echo "❌ GROQ_API_KEY не задан в .env"
|
||
exit 1
|
||
fi
|
||
echo " .env OK"
|
||
|
||
# --- 4. Bluetooth (PulseAudio) ---
|
||
echo ""
|
||
echo "▶ 4/6 Настраиваю Bluetooth audio..."
|
||
# Включаем PulseAudio для пользователя (если не systemd --user)
|
||
sudo -u "$APP_USER" systemctl --user enable pulseaudio
|
||
sudo -u "$APP_USER" systemctl --user start pulseaudio || true
|
||
|
||
echo " Bluetooth настроен."
|
||
echo " Подключи колонку вручную:"
|
||
echo " bluetoothctl"
|
||
echo " > scan on"
|
||
echo " > pair <MAC>"
|
||
echo " > connect <MAC>"
|
||
echo " > trust <MAC>"
|
||
echo ""
|
||
echo " После подключения найди sink:"
|
||
echo " pactl list sinks short"
|
||
echo " И пропиши AUDIO_SINK=bluez_sink.XX_XX_XX.a2dp_sink в .env"
|
||
|
||
# --- 5. systemd сервис ---
|
||
echo ""
|
||
echo "▶ 5/6 Устанавливаю systemd сервис..."
|
||
cp "$APP_DIR/deploy/cosmo-satellite.service" /etc/systemd/system/${SERVICE_NAME}.service
|
||
systemctl daemon-reload
|
||
systemctl enable ${SERVICE_NAME}
|
||
echo " Сервис установлен: ${SERVICE_NAME}"
|
||
|
||
# --- 6. Проверка ---
|
||
echo ""
|
||
echo "▶ 6/6 Проверяю установку..."
|
||
sudo -u "$APP_USER" "$APP_DIR/.venv/bin/python" -c "
|
||
from satellite.config import GATEWAY_URL, AGENT
|
||
print(f' Gateway : {GATEWAY_URL}')
|
||
print(f' Агент : {AGENT}')
|
||
print(' Python imports OK')
|
||
"
|
||
|
||
echo ""
|
||
echo "========================================"
|
||
echo " Установка завершена!"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "Команды:"
|
||
echo " sudo systemctl start ${SERVICE_NAME} # запустить"
|
||
echo " sudo systemctl stop ${SERVICE_NAME} # остановить"
|
||
echo " sudo systemctl restart ${SERVICE_NAME} # перезапустить"
|
||
echo " sudo journalctl -u ${SERVICE_NAME} -f # логи в реальном времени"
|
||
echo " cat ${APP_DIR}/errors.log # лог ошибок"
|
||
echo ""
|
||
echo "Не забудь:"
|
||
echo " 1. Подключить BT колонку и прописать AUDIO_SINK в .env"
|
||
echo " 2. Прописать PORCUPINE_KEY и WAKE_WORD_MODEL в .env"
|
||
echo " 3. Затем: sudo systemctl start ${SERVICE_NAME}"
|
||
echo ""
|