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

3.2 KiB

План: 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)
  • audio-level приходит ~10 раз/сек
  • Команды работают: set_volume, set_mic_volume, mute/unmute
  • Команды работают: play_sound, set_led_brightness
  • 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

Запуск

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