Commit Graph
40 Commits
Author SHA1 Message Date
sirmrak 4e5b961f7b fix: исправить зависание при Ctrl+C
- signal_handler вызывает shutdown() который блокируется
- Убран sys.exit(0) из signal handler
- serve_forever() завершается через KeyboardInterrupt
- finally закрывает сокет корректно
2026-05-20 22:59:19 +03:00
sirmrak 9d8e78fe2a fix: исправить баги web сервера
- IndexError в log_message — убран неправильный формат
- Ctrl+C не работал — добавлен signal_handler
- Порт не освобождался — добавлен server_close()
- allow_reuse_address=True — для быстрого рестарта
- Добавлен remote URL в баннер
2026-05-20 22:46:53 +03:00
sirmrak d8ab4736de feat: модернизировать WebSocket клиент с UI управлением
Новые возможности client.html:
- 🔊 Управление громкостью (слайдер 0-100%)
- 🔇/🔊 Кнопки Mute/Unmute
- 🔔 Тест звука (play_sound команда)
- 💡 LED управление (цвет, яркость)
- 📊 RMS Audio Level визуализация (реальное время)
- 🎨 Современный UI (карточки, градиенты, анимации)
- 📱 Адаптивный дизайн

start_web_server.py:
- Простой HTTP сервер для тестирования
- Авто-определение WebSocket URL
- Красивый вывод в консоль

Запуск:
  cd examples/websocket-service
  ./start_web_server.py --port 8080

Открыть: http://localhost:8080/client.html
2026-05-20 22:23:34 +03:00
sirmrak b794f4cafb docs: обновить статус плана — готово к тестированию
- Статус: В разработке → 🔄 Тестирование
- Добавлено: WebSocket события работают (synthesize, audio-start/stop, played)
- Добавлено: TEST сервисы созданы
- Добавлено: Критический баг исправлен (detach_kernel_driver)
- Требуется тестирование: Audio level monitoring, WebSocket команды
2026-05-20 22:13:45 +03:00
sirmrak 27703a2f93 fix: убрать detach_kernel_driver() — это отключает audio интерфейсы
Проблема: detach_kernel_driver(0) отключал ядро от интерфейса 0,
который является частью audio function (интерфейсы 0-2).
После этого audio драйвер не мог восстановить устройство.

Решение: Убрать detach_kernel_driver() вообще.
Control transfer с CTRL_TYPE_VENDOR работает без claim interface.
Так работает xvf_host.py — там тоже нет detach_kernel_driver().

Исправленные файлы:
- wyoming_satellite/xvf_usb.py (уже было исправлено)
- examples/example_led.py
2026-05-20 20:43:01 +03:00
sirmrak b1f7185a4f refactor: вернуть управление яркостью без масштабирования цветов
DoA эффект:
- base_color: 0x303030 (серый, без масштабирования)
- doa_color: 0xD4BC00 (бирюзовый, без масштабирования)
- brightness: управляется отдельно через set_led_brightness()

Это как в оригинале до изменений яркости.
2026-05-20 20:20:36 +03:00
sirmrak 99fa55e15e fix: добавить задержку 500ms после подключения USB устройства
Проблема: устройство может быть не готово к командам сразу после
подключения, что вызывает USB reset.

Решение: time.sleep(0.5) после нахождения устройства.
2026-05-20 20:19:44 +03:00
sirmrak 5a5cac90b1 fix: НЕ делать detach_kernel_driver() — это отключает audio интерфейсы!
Проблема: detach_kernel_driver(0) отключает ядро от интерфейса 0,
который является частью audio function (интерфейсы 0-2).

Решение: Убрать detach_kernel_driver() вообще.
Control transfer с CTRL_TYPE_VENDOR работает без claim interface
и не требует отключения ядра.

Это как в xvf_host.py — там тоже нет detach_kernel_driver().
2026-05-20 20:16:41 +03:00
sirmrak ba006c506b fix: добавить set_led_brightness() для DoA эффекта
Проблема: после перехода на set_led_doa_color() яркость
не устанавливалась отдельно, поэтому LED не работали.

Решение:
- led_controller.set_led_brightness(brightness) после set_led_doa_color()

Восстановлено поведение как в оригинале:
LED_EFFECT [4] → LED_DOA_COLOR → LED_BRIGHTNESS
2026-05-20 20:09:56 +03:00
sirmrak 12d5d14d40 fix: install_test_services.sh — использовать .venv из satellite-dev (не production .venv_satellite)
Изменён порядок поиска venv:
1. ${SCRIPT_DIR}/.venv (satellite-dev)
2. ${SCRIPT_DIR}/.venv_satellite
3. ${HOME_DIR}/projects/.venv_satellite (production)
4. ${HOME_DIR}/.venv_satellite (production)

Теперь test сервисы используют правильное окружение.
2026-05-20 18:11:59 +03:00
sirmrak d9868a0c5b fix: websockets 16.0 API — убрать аргумент 'path' из handle_websocket()
В websockets 16.0 изменилась сигнатура handler:
- Было: async def handler(websocket, path)
- Стало: async def handler(websocket)

Fix для satellite.py:
- handle_websocket(websocket) без path
- Добавлен комментарий про websockets 16.0+
2026-05-20 18:10:33 +03:00
sirmrak b394a2fe74 fix: использовать порт 10702 для test satellite (10701 занят старым wyoming-led)
- services/test/wyoming-satelite-vosk-test.service: порт 10702
- services/test/start_test.sh: порт 10702
- install_test_services.sh: обновлена документация
- docs/deployment/systemd-services.md: обновлена таблица портов

Порты:
- 10700: production satellite
- 10701: старый wyoming-led (production)
- 10702: test satellite (новый)
2026-05-20 18:01:08 +03:00
sirmrak b27d633f06 refactor: упростить test сервисы — только satellite (wake word и event production)
- services/test/*.service — удалены wake word и event test сервисы
- services/test/wyoming-satelite-vosk-test.service — использует production порты
- install_test_services.sh — обновлён для одного сервиса
- services/test/start_test.sh — запуск только satellite
- docs/deployment/systemd-services.md — обновлена документация

Test satellite использует:
- Production wake word (:10400)
- Production event (:10500)
- Те же порты что и production (:10700)
- WebSocket :8675 + Audio Level (новые функции)
2026-05-20 17:50:16 +03:00
sirmrakandQwen-Coder e5914b23b3 feat: добавить TEST сервисы для разработки
- services/test/*.service — 3 test сервиса (порты +1)
- install_test_services.sh — установка test сервисов
- services/test/start_test.sh — быстрый запуск в tmux
- docs/deployment/systemd-services.md — документация

TEST сервисы:
- wyoming-satelite-vosk-test.service :10701 + WebSocket :8675
- wyoming-wakeword-vosk-test.service :10401
- wyoming-event-test.service :10501

Использование:
1. sudo ./install_test_services.sh — установка
2. sudo systemctl start wyoming-*-test.service — запуск
3. ./services/test/start_test.sh — запуск в tmux

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 17:29:36 +03:00
sirmrak 26932097a5 docs: обновить план — Этап WS-6 Audio level выполнен 2026-05-20 17:18:38 +03:00
sirmrak b28052e93e feat: добавить Audio Level monitoring — RMS громкости микрофона в WebSocket
- settings.py: audio_level_enabled, audio_level_interval_ms
- satellite.py: _calculate_rms() — вычисление RMS (0.0-1.0)
- satellite.py: _send_audio_level() — фоновая задача отправки
- satellite.py: _last_mic_level, _audio_level_task атрибуты
- satellite.py: интеграция в _start() / _stop()
- satellite.py: вычисление RMS в event_from_mic() для всех классов
- __main__.py: CLI --audio-level-enabled, --audio-level-interval-ms

Событие в WebSocket (10 раз в секунду):
{type: audio-level, data: {level: 0.42}}
2026-05-20 17:17:18 +03:00
sirmrakandQwen-Coder 5c92eed55b docs: обновить чеклист в плане — этапы WS-1, WS-2, WS-2A, WS-3 выполнены
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 16:57:37 +03:00
sirmrakandQwen-Coder 6398dc6a41 feat: добавить WebSocket сервер для приёма событий и команд
- settings.py: websocket_enabled, websocket_host, websocket_port
- satellite.py: WebSocket сервер + runtime атрибуты (_runtime_volume, _runtime_led_brightness)
- satellite.py: handle_websocket_command() для обработки команд
- satellite.py: _broadcast_to_websocket() для рассылки событий
- satellite.py: интеграция в _start() / _stop()
- __main__.py: CLI аргументы --websocket-enabled/host/port

Поддерживаемые команды:
- set_volume: изменить громкость
- mute/unmute: микрофон
- play_sound: воспроизвести WAV
- set_led_brightness: яркость LED
- trigger_event: отправить событие в HA

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 16:51:27 +03:00
sirmrakandQwen-Coder b1c6ef3385 docs: добавлен протокол WebSocket команд (set_volume, mute, play_sound, etc.)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 16:04:33 +03:00
sirmrakandQwen-Coder 6e06120b55 docs: переименовать план в websocket-server-plan.md
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 15:58:42 +03:00
sirmrakandQwen-Coder 5d59246902 docs: полный пересмотр плана - WebSocket вместо event server
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 15:56:26 +03:00
sirmrakandQwen-Coder f62b0163d0 docs: обновить план multi-event-server с чеклистом выполнения
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 15:33:37 +03:00
sirmrakandQwen-Coder 235fcbece7 feat: добавить setup_dev.sh для быстрой настройки окружения
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 14:59:45 +03:00
sirmrakandQwen-Coder c027567725 refactor: использовать .venv/ в корне проекта для Python окружения
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 14:24:50 +03:00
sirmrakandQwen-Coder 0f66ba1b54 chore: удалить Docker файлы (Dockerfile, docker-compose.yml, .dockerignore, скрипты)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 14:17:43 +03:00
sirmrakandQwen-Coder c259a8c512 chore: удалить лишние файлы из корня проекта (test.wav, start.sh, start-dev.sh, .projectile)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 14:12:38 +03:00
sirmrak 12c15bc465 docs: обновить план multi-event-server для satellite-dev 2026-05-20 13:52:50 +03:00
sirmrak c62203b220 feat: Multi-event server support + USB LED controller
New features:
- wyoming_satellite/xvf_usb.py — прямой USB доступ к XVF3800 без subprocess
- docs/development/multi-event-server-plan.md — план разработки event server
- examples/respeaker_usb_mic_array.py — исходный файл с LED анимациями

Documentation updates:
- DEPLOY.md — добавлена секция про LED управление и event server план
- docs/integration/mqtt-led.md — обновлена документация по USB и event server
- docs/deployment/systemd-services.md — добавлен event server раздел

Refactoring:
- examples/wyoming-led.py — замена subprocess на XVF3800Controller
- install_service.sh — удалён (устарел, используется install_systemd_services.sh)

Bug fixes:
- wyoming-led.py — яркость DoA эффекта через масштабирование цвета
- systemd сервис — добавлена поддержка wyoming_satellite.xvf_usb модуля
2026-05-20 13:50:16 +03:00
sirmrakandQwen-Coder 75ba5481b6 fix: яркость DoA эффекта через масштабирование цвета
Для LED_EFFECT=4 (DoA) команда LED_BRIGHTNESS не работает.
Яркость управляется через значения цветов в LED_DOA_COLOR.

Изменения:
- Масштабирование base_color и doa_color по brightness (0-255)
- Формат цвета: 0xBBGGRR (BGR byte order)
- Комментарии на русском согласно .qwen/qwen.md

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 11:41:06 +03:00
sirmrakandQwen-Coder 19a11aac6e feat: custom LED animations mirroring ESPHome effects
Port LED effects from respeaker_usb_mic_array.py to example_led.py:
- Replace built-in XVF3800 effects with custom frame-by-frame animations
- Use LED_RING_COLOR command (resid=20, cmdid=19) for direct LED control
- Implement 11 animations matching home-assistant-voice.yaml:
  - off, twinkle, twinkle_blue, waiting, listening, thinking,
    replying, muted, error, timer_tick, timer_ring
- Muted indicator: 4 red LEDs at mic positions (0°, 90°, 180°, 270°)
- Timer tick: arc shows remaining time with sweep marker
- Add --test mode for hardware verification
- Add --verbose flag for INFO logging
- Enhanced USB diagnostics and error reporting

Technical changes:
- set_led_frame() sends 12×uint32 colors in 0xBBGGRR format
- RGB tuples with _scale() for brightness control
- _pulse_step() for smooth pulsing effects
- _apply_mic_indicators() for muted state visualization

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-20 09:56:16 +03:00
sirmrakandQwen-Coder 61b1532757 docs: перевод документации на русский язык
Полностью переведена вся документация в docs/:

- docs/architecture/overview.md — Архитектура Wyoming Satellite
- docs/settings-cheatsheet.md — Шпаргалка по настройкам (CLI флаги)
- docs/deployment/systemd-services.md — Настройка systemd сервисов
- docs/integration/mqtt-led.md — MQTT LED управление
- docs/integration/vad-wakeword.md — Уже был на русском
- docs/tutorials/2mic-hat.md — Tutorial для 2-MIC HAT
- docs/tutorials/installer.md — Интерактивный установщик
- docs/README.md — Индекс документации

Обновлены корневые файлы:
- README.md — Полностью на русском
- DEPLOY.md — Полностью на русском

Вся документация теперь на русском языке для удобства
русскоязычных пользователей.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-19 23:25:34 +03:00
sirmrakandQwen-Coder d38719ad53 docs: добавлен settings cheat sheet
- docs/settings-cheatsheet.md — полный справочник всех CLI флагов
- Обновлён docs/README.md — добавлена ссылка на cheat sheet

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-19 23:13:01 +03:00
sirmrakandQwen-Coder adac79e765 Документация: рефакторинг структуры docs/ и очистка мусора
- Перемещена документация в docs/ с четкой структурой:
  - tutorials/ — пошаговые руководства (2mic-hat, installer)
  - integration/ — техническая интеграция (vad-wakeword, mqtt-led)
  - deployment/ — развёртывание (systemd-services)
  - architecture/ — архитектура проекта (overview)
- Обновлён README.md с навигацией по документации
- DEPLOY.md сокращён до quick start с ссылками на docs/
- Добавлен docs/README.md — индекс документации
- Создан QWEN.md — контекст для ИИ-ассистента
- Удалён мусор:
  - wyoming_satellite.zip (build artifact)
  - wyoming-led.service, wyoming-satellite.service (дубликаты)
  - .qwen/settings.json.orig (бэкап)
  - .lgd-nfy0 (пустой файл)
  - docker/run (заглушка)
- Обновлён .gitignore:
  - examples/led_brightness_config.json (автогенерируемый конфиг)
  - *.old, *.bak, *~ (бэкапы)
  - *.zip (архивы)
  - .qwen/settings.json.orig
  - *.lgd-* (пустые файлы)
- led_brightness_config.json исключён из отслеживания (assume-unchanged)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-19 20:12:20 +03:00
sirmrakandQwen-Coder cae22004b1 Полная синхронизация
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-05-19 19:40:42 +03:00
sirmrak df5ce8a683 переделан MQTT 2026-05-19 15:27:02 +03:00
sirmrak f06b7322a8 Обновлено описание установки 2026-05-14 11:49:27 +03:00
sirmrak 8f2ff703db Все настроено 2026-05-14 10:19:01 +03:00
sirmrak da3799abcd add file 2026-05-13 12:05:58 +03:00
sirmrak 384ce57037 Изменил заголовок 2026-05-09 11:59:23 +03:00
sirmrak 87502c55e0 Загрузка исходника 2026-05-09 11:49:44 +03:00