Files
satellite/docs/development/websocket-server-plan.md
T
sirmrakandQwen-Coder 2b4e6f824b feat: WebSocket команды — раздельная громкость mic/snd + запись аудио + обновлённый web-client
- satellite.py: разделён _runtime_volume на _runtime_mic_volume и _runtime_snd_volume
- satellite.py: добавлены команды start_recording/stop_recording (WAV через base64)
- satellite.py: метод _create_wav_from_buffer() для создания WAV из буфера
- web-client: добавлен слайдер громкости микрофона (MIC+/MIC-)
- web-client: добавлены кнопки записи и воспроизведения аудио
- web-client: улучшенный лог событий и отладочные console.log
- docs: websocket-server-plan.md сокращён с 1205 до ~80 строк

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-25 17:58:37 +03:00

80 lines
3.2 KiB
Markdown

# План: 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