Commit Graph
13 Commits
Author SHA1 Message Date
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
sirmrak 9bfbcfd8a8 feat: Web Client — улучшенное подключение к WebSocket
Изменения:
1. Поле для ввода WebSocket адреса (вместо prompt)
   - wsUrlInput с значением по умолчанию
   - Сохраняется между перезагрузками

2. Кнопка CONNECT/DISCONNECT
   - Меняет текст и цвет при подключении
   - DISCONNECT красная кнопка
   - Работают обе кнопки (в шапке и в карточке)

3. Auto-connect
   - Чекбокс 'Auto-connect on load'
   - Автоматическое подключение при загрузке
   - Можно отключить

4. updateConnectButton()
   - Обновляет обе кнопки синхронно
   - 🔌 CONNECT / 🔌 DISCONNECT
2026-05-21 19:56:51 +03:00
sirmrak c17743d829 fix: Web Client — правильное масштабирование RMS
Проблема:
- При RMS=0 столбики 30% (слишком много)
- При RMS=0.3 столбики 2% (слишком мало)

Решение:
- Масштаб: RMS 0 → 10%, RMS 0.15 → 100%
- Формула: avg = 10 + (RMS / 0.15) * 90
- Clamp 10-100
- Симуляция тишины: 10 + random*5 (маленькие колебания)

Теперь:
- Тишина (RMS=0) → 10% высоты
- Говор (RMS=0.1) → ~70% высоты
- Крик (RMS=0.15+) → 100% высоты
2026-05-21 19:47:20 +03:00
sirmrak 6b9c7376b9 fix: Web Client — точная копия оригинальной анимации
Реализована точно такая же анимация как была:
- avg = currentRms * 100 (вместо микрофона)
- Сглаживание rmsSmoothed * 0.7 + avg * 0.3
- Симуляция если RMS < 1 (12 + random * 25)
- Усиление при LISTEN/SPEAK (45 + random * 55)
- 42 столбика с синусом
- Случайные колебания 0.5 + random * 0.3
- Увеличение при SPEAK

Теперь 1-в-1 как оригинал, но с данными satellite!
2026-05-21 19:35:31 +03:00
sirmrak e9b6d7bb06 fix: Web Client — вернул оригинальную красивую анимацию canvas
Изменения:
- 42 столбика как в оригинале
- Синусоидальная анимация
- Градиент cyan → blue
- Сглаживание RMS (0.7 old + 0.3 new)
- Случайные колебания для живости

Теперь красиво как было, но с данными satellite RMS!
2026-05-21 19:31:07 +03:00
sirmrak 4a79874807 feat: Web Client — canvas визуализация от satellite RMS
Изменения:
- Удалён локальный микрофон (initMicVisualizer)
- Canvas рисует RMS историю от satellite
- 64 столбика с градиентом (зелёный → красный)
- Меньше логов (только если RMS > 0.05)

Преимущества:
- ✅ Показывает реальную громкость satellite
- ✅ Нет зависимости от микрофона браузера
- ✅ Меньше спама в логах
2026-05-21 19:26:53 +03:00
sirmrak 6913625830 fix: Web Client — null check для RMS meter
Проблема: rmsFill/rmsValue null до загрузки DOM

Решение:
- Проверка if (!rmsFill || !rmsValue) return
- Инициализация после window.load
- Логирование для отладки
2026-05-21 15:54:31 +03:00
sirmrak 023e283d3f feat: Web Client — RMS meter визуализация
Добавлено:
- RMS bar с градиентом (зелёный → жёлтый → красный)
- Цифровое значение RMS (0.00 - 1.00)
- CSS стили для .rms-bar и .rms-fill
- Размещение под audio canvas

Визуализация:
[████████░░] 0.42
2026-05-21 15:52:04 +03:00
sirmrak fafc39511b fix: Web Client — добавлена функция updateRmsMeter
Проблема: updateRmsMeter is not defined

Решение:
- Добавлена функция updateRmsMeter(level)
- Добавлены DOM элементы rmsFill, rmsValue
- Добавлена переменная rmsTimeout

Теперь audio-level события обрабатываются корректно
2026-05-21 15:47:09 +03:00
sirmrak f9a3731a98 fix: Web Client — Vol+/- и кнопка RMS
Исправления:
- ✅ Vol+/Vol- теперь обновляют currentVolume (работают многократно)
- ✅ Добавлена кнопка REQUEST RMS для запроса обновления audio-level

Изменения:
- currentVolume = newVol в обработчиках VOL+ и VOL-
- requestRmsBtn отправляет trigger_event для запроса RMS
2026-05-21 14:52:54 +03:00
sirmrak fc816ed7b3 feat: Web UI пароль — HTTP Basic Auth защита
Изменения:
- Отменены WebSocket security настройки (websocket_allowed_ips, websocket_token)
- Добавлена HTTP Basic Auth в start_server.py
- Пароль по умолчанию: admin
- Опция --password для установки своего пароля
- Обновлён README с документацией

Использование:
  python3 start_server.py --port 8080 --password mypassword

Безопасность:
- ✅ WebSocket только локально (127.0.0.1)
- ✅ Web UI защищён паролем
- ✅ Достаточно для локальной сети
2026-05-21 13:50:01 +03:00
sirmrak 0776d839b9 feat: web-client — синхронизация команд с satellite
Изменения:
- Перенесён start_server.py в web-client/
- Обновлены команды в client.html для соответствия satellite
- handle_websocket_command поддерживает:
  - set_volume (level/volume)
  - mute/unmute
  - play_sound
  - set_led_brightness
  - trigger_event
- Обновлён обработчик входящих событий:
  - voice-started/voice-stopped
  - transcript
  - synthesize
  - audio-start/audio-stop/played
  - timer-started/timer-finished
  - streaming-started/streaming-stopped
  - satellite-connected/satellite-disconnected
  - error
  - audio-level (RMS)

Теперь client.html полностью соответствует API satellite
2026-05-21 13:14:22 +03:00
sirmrak c7bf061611 feat: Web Client разработка — план и документация
Исправления:
- fix: баг volume/level — поддерживаются оба названия параметра
- docs: добавлен раздел Web Client в websocket-server-plan.md
- docs: создан web-client/README.md с полной документацией

Функции Web клиента:
- ✅ set_volume (громкость) — работает
- ✅ mute/unmute — работает
- ⏳ audio-level RMS — требует тестирования
- ⏳ LED управление — требует тестирования
- ⏳ Transcript — требует тестирования

Этапы разработки:
- WC-1: Базовая интеграция ✅
- WC-2: Визуализация (в процессе)
- WC-3: Дополнительные функции
- WC-4: UI/UX
2026-05-21 13:02:35 +03:00