Добавлено: - RMS bar с градиентом (зелёный → жёлтый → красный) - Цифровое значение RMS (0.00 - 1.00) - CSS стили для .rms-bar и .rms-fill - Размещение под audio canvas Визуализация: [████████░░] 0.42
🛰️ LVA NEXUS — Web Client для Wyoming Satellite
Современный веб-интерфейс для управления Wyoming Satellite через WebSocket.
🚀 Быстрый старт
1. Запустить satellite с WebSocket
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 сервер с паролем
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 управление
// Яркость
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 сервер (опционально)
Добавление команд
- В satellite.py — обработчик команды:
async def handle_websocket_command(self, command: str, data: dict):
if command == "my_command":
# обработка
- В client.html — отправка команды:
sendCommand('my_command', { param: value });
- В client.html — обработка ответа:
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 визуализация
- ✅ Лог событий