# 🛰️ LVA NEXUS — Web Client для Wyoming Satellite Современный веб-интерфейс для управления Wyoming Satellite через WebSocket. ## 🚀 Быстрый старт ### 1. Запустить satellite с WebSocket ```bash cd ~/projects/satellite-dev source .venv/bin/activate python3 -m wyoming_satellite \ --uri tcp://0.0.0.0:10700 \ --websocket-enabled \ --websocket-port 8675 \ --audio-level-enabled \ --debug ``` ### 2. Запустить HTTP сервер с паролем ```bash cd ~/projects/satellite-dev/web-client # С паролем по умолчанию (admin) python3 start_server.py --port 8080 # Или со своим паролем python3 start_server.py --port 8080 --password mysecretpassword ``` ### 3. Открыть в браузере ``` http://localhost:8080/client.html или http://192.168.200.111:8080/client.html ``` **🔐 Ввести пароль** (по умолчанию: `admin`) --- ## 📋 Функции | Функция | Статус | Описание | |---------|--------|----------| | 🔊 Громкость | ✅ | Установка громкости satellite (0-100%) | | 🔇 Mute / 🔊 Unmute | ✅ | Заглушить/включить микрофон | | 📊 RMS Audio Level | ✅ | Визуализация громкости в реальном времени | | 💡 LED управление | ⏳ | Цвет, яркость, эффекты | | 🎤 Start Listening | ⏳ | Запуск прослушивания | | ⏹️ Stop Pipeline | ⏳ | Остановка pipeline | | ⏲️ Stop Timer | ⏳ | Остановка таймера | | 🗣️ Transcript | ⏳ | Отображение распознанного текста | --- ## 🎮 Управление ### Громкость - **Слайдер** — плавная регулировка 0-100% - **Кнопки VOL+ / VOL-** — пошаговое изменение - **Mute/Unmute** — быстрое отключение микрофона ### LED управление ```javascript // Яркость sendCommand('set_led_brightness', { brightness: 200 }); // Цвет (RGB) sendCommand('set_led_color', { r: 255, g: 0, b: 0 }); ``` ### Аудио визуализация - **Canvas** — отрисовка аудио уровня в реальном времени - **RMS метр** — числовое значение громкости - **Орбита** — анимация состояния (idle, listening, speaking) --- ## 🔧 Настройки ### Подключение При первом запуске введите WebSocket адрес: ``` ws://192.168.200.111:8675 ``` ### Авто-подключение - **Auto-reconnect** — автоматическое переподключение при разрыве - **Auto-scroll** — автоматическая прокрутка лога событий --- ## 📊 События Web клиент получает от satellite: | Событие | Описание | |---------|----------| | `voice-started` | Пользователь начал говорить | | `voice-stopped` | Пользователь перестал говорить | | `transcript` | Распознанный текст | | `synthesize` | Запрос на синтез речи | | `audio-level` | RMS громкость микрофона | | `timer-started` | Таймер запущен | | `timer-finished` | Таймер завершён | | `error` | Ошибка | --- ## 🐛 Известные проблемы | Проблема | Статус | Решение | |----------|--------|---------| | Громкость всегда 100% | ✅ Исправлено | Поддерживаются `level` и `volume` | | WebSocket отключается | ⏳ В работе | Проверить firewall | | RMS не обновляется | ⏳ В работе | Проверить audio-level-enabled | --- ## 🛠️ Разработка ### Структура ``` web-client/ ├── client.html # Основной UI ├── README.md # Документация └── start_server.py # HTTP сервер (опционально) ``` ### Добавление команд 1. **В satellite.py** — обработчик команды: ```python async def handle_websocket_command(self, command: str, data: dict): if command == "my_command": # обработка ``` 2. **В client.html** — отправка команды: ```javascript sendCommand('my_command', { param: value }); ``` 3. **В client.html** — обработка ответа: ```javascript function handleIncomingMessage(ev) { const json = JSON.parse(ev.data); if(json.event === 'my_event') { // обработка } } ``` --- ## 📝 Changelog ### 2026-05-21 - ✅ Исправлен баг volume/level - ✅ Добавлена поддержка обоих названий параметра - ✅ Обновлён план разработки ### 2026-05-20 - ✅ Создан современный UI - ✅ WebSocket интеграция - ✅ RMS визуализация - ✅ Лог событий --- ## 🔗 Связанное - [WebSocket Server Plan](../docs/development/websocket-server-plan.md) - [Wyoming Satellite](../README.md) - [MQTT LED Integration](../docs/integration/mqtt-led.md)