New features: - wyoming_satellite/xvf_usb.py — прямой USB доступ к XVF3800 без subprocess - docs/development/multi-event-server-plan.md — план разработки event server - examples/respeaker_usb_mic_array.py — исходный файл с LED анимациями Documentation updates: - DEPLOY.md — добавлена секция про LED управление и event server план - docs/integration/mqtt-led.md — обновлена документация по USB и event server - docs/deployment/systemd-services.md — добавлен event server раздел Refactoring: - examples/wyoming-led.py — замена subprocess на XVF3800Controller - install_service.sh — удалён (устарел, используется install_systemd_services.sh) Bug fixes: - wyoming-led.py — яркость DoA эффекта через масштабирование цвета - systemd сервис — добавлена поддержка wyoming_satellite.xvf_usb модуля
172 lines
5.7 KiB
Markdown
172 lines
5.7 KiB
Markdown
# Настройка 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)
|