- Add training/ pipeline (step_1..step_5) and own-samples flow
- record_wav.py with single-shot and long-record modes, RMS-based silence filter
- remove_silent.py to drop silent samples and renumber
- modes.py: openwakeword inference with reset() and quiet predictions; commented Lusya block for later
- stt.py: drop local faster-whisper fallback, Groq-only
- config.py: remove unused STT_PROVIDER/WHISPER_*
- llm.py: replace __import__("os") hack with proper import
- tts.py: remove debug traceback in play_error_sound
- requirements.txt: add openwakeword/sounddevice/scipy, drop faster-whisper
- deploy/setup.sh: validate ELEVENLABS_API_KEY and WAKE_WORD_COSMO presence
- README.md, CLAUDE.md, project_roadmap memory updated to reflect new architecture
127 lines
4.3 KiB
Bash
Executable File
127 lines
4.3 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
|
||
if [ -z "${ELEVENLABS_API_KEY:-}" ]; then
|
||
echo "❌ ELEVENLABS_API_KEY не задан в .env"
|
||
exit 1
|
||
fi
|
||
if [ -z "${WAKE_WORD_COSMO:-}" ] || [ ! -f "$APP_DIR/${WAKE_WORD_COSMO}" ]; then
|
||
echo "❌ WAKE_WORD_COSMO не задан или файл .onnx не найден"
|
||
echo " Обучи модель локально (training/step_4.py) и положи .onnx в data/models/"
|
||
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. Положить обученную модель в data/models/cosmo.onnx и прописать"
|
||
echo " WAKE_WORD_COSMO=data/models/cosmo.onnx в .env"
|
||
echo " 3. Затем: sudo systemctl start ${SERVICE_NAME}"
|
||
echo ""
|