feat: Multi-event server support + USB LED controller
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 модуля
This commit is contained in:
@@ -16,6 +16,9 @@ source ~/.venv_satellite/bin/activate
|
||||
|
||||
# Установка зависимостей
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Установка пакета в режиме разработки (для доступа к wyoming_satellite.xvf_usb)
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
### 2. Установка systemd сервисов
|
||||
@@ -24,6 +27,14 @@ pip install -r requirements.txt
|
||||
sudo ./install_systemd_services.sh
|
||||
```
|
||||
|
||||
**Важно:** После установки пакета в режиме editable (`pip install -e .`), новый модуль `wyoming_satellite.xvf_usb` будет автоматически доступен. Если вы добавляете новые модули в `wyoming_satellite/`, убедитесь, что они видны:
|
||||
|
||||
```bash
|
||||
# Проверка доступности модуля
|
||||
source ~/.venv_satellite/bin/activate
|
||||
python3 -c "from wyoming_satellite.xvf_usb import XVF3800Controller; print('OK')"
|
||||
```
|
||||
|
||||
### 3. Запуск сервисов
|
||||
|
||||
```bash
|
||||
@@ -84,6 +95,81 @@ journalctl -u wyoming-satelite-vosk.service -f
|
||||
|
||||
---
|
||||
|
||||
## LED управление (ReSpeaker XVF3800)
|
||||
|
||||
Сервис `wyoming-event.service` использует прямой USB доступ к XVF3800 через модуль `wyoming_satellite.xvf_usb`.
|
||||
|
||||
### Требования
|
||||
|
||||
- **ReSpeaker XVF3800 USB 4-MIC Array** (VID=0x2886, PID=0x0018 или 0x001A)
|
||||
- **udev правила** для доступа к USB:
|
||||
|
||||
```bash
|
||||
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2886", ATTR{idProduct}=="0018", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-respeaker.rules
|
||||
sudo udevadm trigger
|
||||
```
|
||||
|
||||
### Проверка подключения
|
||||
|
||||
```bash
|
||||
# Проверка USB устройства
|
||||
lsusb | grep -i 2886
|
||||
|
||||
# Тест контроллера
|
||||
source ~/.venv_satellite/bin/activate
|
||||
python3 -c "from wyoming_satellite.xvf_usb import XVF3800Controller; c = XVF3800Controller(); print('OK' if c.is_connected() else 'Not found')"
|
||||
```
|
||||
|
||||
### Настройка яркости
|
||||
|
||||
Яркость для каждого состояния настраивается в `examples/led_brightness_config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"idle": 80,
|
||||
"listening": 120,
|
||||
"wake": 200,
|
||||
"thinking": 150,
|
||||
"speaking": 140,
|
||||
"paused": 40,
|
||||
"error": 255,
|
||||
"global_multiplier": 1.0
|
||||
}
|
||||
```
|
||||
|
||||
Файл создаётся автоматически при первом запуске. Исключите его из git tracking:
|
||||
|
||||
```bash
|
||||
git update-index --assume-unchanged examples/led_brightness_config.json
|
||||
```
|
||||
|
||||
### Диагностика LED сервиса
|
||||
|
||||
```bash
|
||||
# Статус сервиса
|
||||
sudo systemctl status wyoming-event.service
|
||||
|
||||
# Логи
|
||||
journalctl -u wyoming-event.service -f
|
||||
|
||||
# Тест вручную
|
||||
source ~/.venv_satellite/bin/activate
|
||||
cd ~/projects/Satellite/examples
|
||||
python3 wyoming-led.py --debug
|
||||
```
|
||||
|
||||
### Преимущества прямого USB доступа
|
||||
|
||||
Начиная с версии 2026.05, `wyoming-led.py` использует прямой USB доступ вместо subprocess вызовов:
|
||||
|
||||
- ✅ **Быстрее:** ~1ms на команду (нет накладных расходов subprocess)
|
||||
- ✅ **Надёжнее:** контроль USB подключения с авто-переподключением
|
||||
- ✅ **Чище:** нет процессов subprocess и временных файлов
|
||||
|
||||
Подробности в [документации MQTT LED](docs/integration/mqtt-led.md).
|
||||
|
||||
---
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Файлы сервисов используют плейсхолдеры, которые автоматически заменяются при установке:
|
||||
|
||||
Reference in New Issue
Block a user