Files
satellite/docs/deployment/systemd-services.md
T
sirmrak b27d633f06 refactor: упростить test сервисы — только satellite (wake word и event production)
- services/test/*.service — удалены wake word и event test сервисы
- services/test/wyoming-satelite-vosk-test.service — использует production порты
- install_test_services.sh — обновлён для одного сервиса
- services/test/start_test.sh — запуск только satellite
- docs/deployment/systemd-services.md — обновлена документация

Test satellite использует:
- Production wake word (:10400)
- Production event (:10500)
- Те же порты что и production (:10700)
- WebSocket :8675 + Audio Level (новые функции)
2026-05-20 17:50:16 +03:00

275 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Настройка systemd сервисов
Подробное руководство по настройке и управлению systemd сервисами Wyoming Satellite.
## Расположение файлов сервисов
Файлы сервисов находятся в директории `services/`:
```
services/
├── wyoming-event.service # LED управление + MQTT
├── wyoming-satelite-vosk.service # Основной спутник
└── wyoming-wakeword-vosk.service # Детекция wake word
```
## Скрипт установки
Скрипт `install_systemd_services.sh` автоматически:
1. Определяет путь к виртуальному окружению
2. Определяет текущего пользователя
3. Подставляет плейсхолдеры в файлы сервисов
4. Копирует сервисы в `/etc/systemd/system/`
5. Устанавливает wrapper `satellite-python` в `/usr/local/bin/`
### Ручная установка
Если скрипт не работает, установите вручную:
```bash
# 1. Отредактируйте файлы сервисов, заменив плейсхолдеры:
# __SAT_BASE_DIR__ → /home/sirmrak/projects/Satellite
# __SAT_VENV__ → /home/sirmrak/.venv_satellite
# __CURRENT_USER__ → sirmrak
# 2. Скопируйте в директорию systemd
sudo cp services/*.service /etc/systemd/system/
# 3. Перезагрузите systemd
sudo systemctl daemon-reload
# 4. Включите и запустите
sudo systemctl enable --now wyoming-satelite-vosk.service
```
## Детали сервисов
### wyoming-satelite-vosk.service
Основной сервис Wyoming Satellite. Подключается к:
- Микрофону (arecord)
- Динамику (aplay)
- Сервису wake word (опционально, порт 10400)
- Сервису событий (опционально, порт 10500)
**Порты:** 10700 (Wyoming protocol)
**Зависимости:** network.target
### wyoming-wakeword-vosk.service
Сервис детекции wake word на основе Vosk. Слушает русские фразы:
- "привет дроид"
- "привет придурок"
- "привет жопа с ушами"
**Порты:** 10400 (Wyoming protocol)
**Конфигурация:** `local/vosk-wake-dev/wyoming_vosk_wake/config.yaml`
### wyoming-event.service
LED управление и MQTT интеграция для ReSpeaker XVF3800.
**Порты:** 10500 (Wyoming event protocol)
**Требования:**
- ReSpeaker XVF3800 USB 4-MIC Array
- udev правила: `SUBSYSTEM=="usb", ATTR{idVendor}=="2886", MODE="0666"`
**USB контроллер:** Использует модуль `wyoming_satellite.xvf_usb` для прямого доступа к LED без subprocess.
**MQTT топики:**
- `wyoming/led/command` — Команды от Home Assistant
- `wyoming/led/brightness/set` — Установка яркости (0-255)
- `wyoming/led/brightness/state` — Текущая яркость
- `wyoming/led/state` — Состояние LED
- `wyoming/led/availability` — Статус онлайн/офлайн
**Конфигурация яркости:** `examples/led_brightness_config.json` (создаётся автоматически)
**Диагностика:**
```bash
# Проверка статуса
sudo systemctl status wyoming-event.service
# Логи
journalctl -u wyoming-event.service -f
# Тест USB контроллера
source ~/.venv_satellite/bin/activate
python3 -c "from wyoming_satellite.xvf_usb import XVF3800Controller; print('OK' if XVF3800Controller().is_connected() else 'Not found')"
```
Подробности в [MQTT LED документации](../integration/mqtt-led.md).
## Команды управления
```bash
# Проверка статуса
sudo systemctl status wyoming-satelite-vosk.service
# Просмотр логов (реальное время)
journalctl -u wyoming-satelite-vosk.service -f
# Перезапуск сервиса
sudo systemctl restart wyoming-satelite-vosk.service
# Отключение сервиса
sudo systemctl disable --now wyoming-satelite-vosk.service
# Перезагрузка systemd после изменений
sudo systemctl daemon-reload
```
## Диагностика
### Сервис не запускается
```bash
# Проверка статуса и последних ошибок
sudo systemctl status wyoming-satelite-vosk.service
# Просмотр полных логов
journalctl -u wyoming-satelite-vosk.service -n 100
# Проверка пути к Python
which satellite-python
satellite-python --version
```
### Частые проблемы
| Проблема | Решение |
|----------|---------|
| `ModuleNotFoundError` | Проверьте путь к venv в файле сервиса |
| `arecord: command not found` | Установите `alsa-utils` |
| Permission denied | Проверьте директиву `User=` |
| Порт уже используется | Проверьте, не запущен ли другой экземпляр |
## Wrapper скрипт
Wrapper `satellite-python` позволяет запускать Python из venv без указания полного пути:
```bash
# Установлен в /usr/local/bin/satellite-python
satellite-python --version # Использует Python из venv
```
Используется в файлах сервисов:
```ini
ExecStart=satellite-python -m wyoming_satellite ...
```
---
## 🔗 Связанное
- [Руководство по развёртыванию](../../DEPLOY.md)
- [MQTT LED интеграция](integration/mqtt-led.md)
---
## TEST сервисы (для разработки)
Для тестирования новых функций без влияния на production службы создан **TEST satellite**.
### Отличия от production
| Сервис | Production | Test |
|--------|------------|------|
| Satellite | порт 10700 | порт 10700 + WebSocket :8675 + Audio Level |
| Wake Word | порт 10400 | production сервис |
| Event | порт 10500 | production сервис |
**Важно:** TEST satellite использует production сервисы для wake word и event!
### Вариант 1: Установка TEST сервиса (рекомендуется)
**Установка:**
```bash
cd ~/projects/satellite-dev
sudo ./install_test_services.sh
```
**Запуск:**
```bash
# Убедись что production сервисы запущены
sudo systemctl status wyoming-wakeword-vosk.service
sudo systemctl status wyoming-event.service
# Запуск test satellite
sudo systemctl start wyoming-satelite-vosk-test.service
# Проверка статуса
sudo systemctl status wyoming-satelite-vosk-test.service
# Логи
journalctl -u wyoming-satelite-vosk-test.service -f
```
**Преимущества:**
- ✅ Автоматический перезапуск при ошибке
- ✅ Production службы не затрагиваются
- ✅ Легко переключаться между test/prod
### Вариант 2: Быстрый запуск в tmux
**Требования:** `tmux` установлен (`sudo apt-get install tmux`)
**Запуск:**
```bash
cd ~/projects/satellite-dev
./services/test/start_test.sh
```
**Управление:**
```bash
# Подключиться к сессии
tmux attach -t satellite-test
# Остановить
tmux kill-session -t satellite-test
```
**Важно:** Production сервисы должны быть запущены отдельно!
### Тестирование WebSocket
**Проверка подключения:**
```bash
cd ~/projects/satellite-dev
source .venv/bin/activate
# Python тест клиент
python3 examples/websocket-service/test_client.py --uri ws://127.0.0.1:8675
# Или браузер
# Откройте examples/websocket-service/client.html
```
**Проверка audio level:**
```javascript
// В browser console (client.html)
// Уровень микрофона должен обновляться 10 раз в секунду
// {"type": "audio-level", "data": {"level": 0.42}}
```
### Остановка TEST сервисов
```bash
# systemd сервис
sudo systemctl stop wyoming-satelite-vosk-test.service
# tmux сессия
tmux kill-session -t satellite-test
```