# План: WebSocket сервер для Wyoming Satellite **Дата:** 2026-05-20 **Статус:** 🔄 Тестирование **Ветка:** `satellite-dev` --- ## Что сделано | Этап | Что | Статус | |------|-----|--------| | WS-1 | `settings.py` — поля WebSocket в EventSettings | ✅ | | WS-2 | `satellite.py` — сервер, broadcast, команды | ✅ | | WS-2A | Протокол команд (7 команд) | ✅ | | WS-3 | `__main__.py` — CLI аргументы | ✅ | | WS-4 | Audio level (RMS) мониторинг | ✅ | | WS-4 | Audio recording | ✅ | ## Что осталось | Этап | Что | Статус | |------|-----|--------| | WS-5 | Обновить `docs/integration/mqtt-led.md` | ⏳ | | — | Merge в master | ⏳ | ## Чеклист тестирования (WS-4) - [ ] Satellite запускается с `--websocket-enabled` - [ ] Браузер подключается к порту 8675 - [ ] События приходят (`synthesize`, `audio-start/stop`, `played`) - [x] `audio-level` приходит ~10 раз/сек - [x] Команды работают: `set_volume`, `set_mic_volume`, `mute/unmute` - [ ] Команды работают: `play_sound`, `set_led_brightness` - [x] `start_recording` / `stop_recording` — возвращают WAV - [ ] Home Assistant работает (порт 10700) — не сломалось - [ ] wyoming-led.py работает (порт 10500) — не сломалось - [ ] При отключении клиента satellite не падает --- ## Архитектура (справка) ``` Home Assistant ──10700──► Satellite ├── Event CLIENT :10500 → LED, MQTT └── WebSocket SERVER :8675 ← Browser ``` ## Протокол команд (справка) | Команда | Данные | Описание | |---------|--------|----------| | `set_volume` | `{"level": 0.0-1.0}` | Громкость TTS | | `set_mic_volume` | `{"level": 0.0-2.0}` | Чувствительность микрофона | | `mute` / `unmute` | `{}` | Заглушить/включить микрофон | | `play_sound` | `{"path": "/path.wav"}` | Воспроизвести WAV | | `set_led_brightness` | `{"brightness": 0-255}` | Яркость LED | | `start_recording` | `{}` | Начать запись с микрофона | | `stop_recording` | `{}` | Остановить, вернуть WAV (base64) | | `trigger_event` | `{"event_type": "...", "data": {...}}` | Отправить событие в HA | ## Запуск ```bash python3 -m wyoming_satellite \ --uri tcp://0.0.0.0:10700 \ --event-uri tcp://127.0.0.1:10500 \ --websocket-enabled \ --websocket-port 8675 \ --audio-level-enabled ``` ## Известные проблемы - **ALSA card hardcoded** — `-c 2` в `WakeStreamingSatellite` (см. `satellite.py` ~1700) - **`_kill_aplay_processes()`** — может убить сторонние aplay процессы - **Recording buffer не ограничен** — длительная запись ест память - **`trigger_event`** — создаёт сырой `Event`, без валидации Wyoming