#!/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 " echo " > connect " echo " > trust " 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 ""