Полностью переведена вся документация в 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>
184 lines
9.7 KiB
Markdown
184 lines
9.7 KiB
Markdown
# Архитектура Wyoming Satellite
|
|
|
|
Обзор архитектуры Wyoming Satellite.
|
|
|
|
## Основные компоненты
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Home Assistant │
|
|
│ (Wyoming интеграция) │
|
|
└──────────────────────┬──────────────────────────────────────┘
|
|
│ Wyoming Protocol (TCP)
|
|
│ Порт 10700
|
|
┌──────────────────────▼──────────────────────────────────────┐
|
|
│ Wyoming Satellite │
|
|
│ ┌─────────────────────────────────────────────────────┐ │
|
|
│ │ SatelliteBase │ │
|
|
│ │ ├─ AlwaysStreamingSatellite │ │
|
|
│ │ ├─ VadStreamingSatellite │ │
|
|
│ │ └─ WakeStreamingSatellite │ │
|
|
│ └─────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ MicSettings │ │ SndSettings │ │ WakeSettings │ │
|
|
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────┐ │
|
|
│ │ EventHandler │ │
|
|
│ └─────────────────────────────────────────────────────┘ │
|
|
└──────────┬─────────────────────┬───────────────────────────┘
|
|
│ │
|
|
│ Audio In │ Audio Out
|
|
│ (arecord) │ (aplay)
|
|
┌──────────▼──────┐ ┌────────▼──────────┐
|
|
│ Микрофон │ │ Динамик │
|
|
│ USB/HAT │ │ USB/HAT │
|
|
└─────────────────┘ └───────────────────┘
|
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Локальные сервисы (опционально) │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ ┌─────────────────────┐ ┌─────────────────────┐ │
|
|
│ │ Wake Word Service │ │ Event Service │ │
|
|
│ │ (Vosk, порт 10400) │ │ (MQTT, порт 10500) │ │
|
|
│ └─────────────────────┘ └─────────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Режимы работы спутника
|
|
|
|
### AlwaysStreamingSatellite
|
|
|
|
Постоянно передаёт аудио в Home Assistant.
|
|
|
|
- **Преимущества:** Минимальная задержка, простота
|
|
- **Недостатки:** Высокий трафик, нет локальной обработки
|
|
- **Применение:** Быстрая LAN, нет требований к приватности
|
|
|
|
### VadStreamingSatellite
|
|
|
|
Использует Voice Activity Detection для начала стриминга только при обнаружении речи.
|
|
|
|
- **VAD системы:**
|
|
- **Silero:** Нейросетевой, более точный
|
|
- **WebRTC:** Лёгкий, быстрый
|
|
- **Возможности:**
|
|
- Пре-буфер (отправляет аудио до триггера VAD)
|
|
- Таймаут wake word (ожидание фразы после VAD)
|
|
- **Применение:** Приватность, ограничение трафика
|
|
|
|
### WakeStreamingSatellite
|
|
|
|
Использует локальную детекцию wake word перед стримингом.
|
|
|
|
- **Системы wake word:**
|
|
- **Vosk:** Грамматика (русские фразы)
|
|
- **openWakeWord:** Нейросеть
|
|
- **Porcupine:** Коммерческий KWS
|
|
- **Поток:**
|
|
1. Постоянное прослушивание wake word
|
|
2. При обнаружении → стриминг в HA
|
|
3. Обработка команды → остановка стриминга
|
|
- **Применение:** Полная локальная активация, стиль "Hey Google"
|
|
|
|
## Аудио пайплайн
|
|
|
|
```
|
|
Микрофон
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ Захват аудио │ arecord -r 16000 -c 1 -f S16_LE
|
|
└────────┬────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ Предобработка │ Громкость, AGC, шумоподавление
|
|
└────────┬────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ VAD / Wake │ Решение: стримить или нет?
|
|
└────────┬────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ Wyoming Protocol│ Кодирование в Wyoming сообщения
|
|
└────────┬────────┘
|
|
│
|
|
▼
|
|
Home Assistant
|
|
```
|
|
|
|
## Основные файлы
|
|
|
|
| Файл | Назначение |
|
|
|------|------------|
|
|
| `wyoming_satellite/__main__.py` | CLI entry point, парсинг аргументов |
|
|
| `wyoming_satellite/satellite.py` | Реализации спутников |
|
|
| `wyoming_satellite/settings.py` | Dataclass настроек |
|
|
| `wyoming_satellite/event_handler.py` | Обработка Wyoming событий |
|
|
| `wyoming_satellite/vad.py` | VAD реализации (Silero, WebRTC) |
|
|
| `wyoming_satellite/webrtc.py` | WebRTC обработка аудио |
|
|
|
|
## Конфигурация
|
|
|
|
Основная конфигурация через CLI аргументы (см. `__main__.py`):
|
|
|
|
```bash
|
|
# Микрофон
|
|
--mic-command 'arecord -r 16000 -c 1 -f S16_LE -t raw'
|
|
--mic-noise-suppression 2
|
|
--mic-auto-gain 5
|
|
|
|
# Wake word
|
|
--wake-uri tcp://127.0.0.1:10400
|
|
--wake-word-name "привет дроид"
|
|
|
|
# VAD
|
|
--vad
|
|
--vad-system webrtc
|
|
--vad-threshold 0.5
|
|
|
|
# События (LED, MQTT)
|
|
--event-uri tcp://127.0.0.1:10500
|
|
```
|
|
|
|
## Машина состояний
|
|
|
|
```
|
|
┌──────────────┐
|
|
│ Остановка │
|
|
└──────┬───────┘
|
|
│ Старт
|
|
▼
|
|
┌──────────────┐
|
|
┌────────│ Прослушивание│────────┐
|
|
│ └──────┬───────┘ │
|
|
│ │ │
|
|
VAD триггер Wake детекция Стриминг
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
│ VAD │ │ Wake │ │Стриминг │
|
|
│ Активен │ │ Активен │ │ Аудио │
|
|
└────┬─────┘ └────┬─────┘ └────┬─────┘
|
|
│ │ │
|
|
└───────────────┴───────────────┘
|
|
│
|
|
AudioStop
|
|
▼
|
|
┌──────────────┐
|
|
│ Прослушивание│
|
|
└──────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 🔗 Связанное
|
|
|
|
- [Настройки (cheat sheet)](settings-cheatsheet.md)
|
|
- [Руководство по развёртыванию](../../DEPLOY.md)
|
|
- [Интеграция VAD/Wake](integration/vad-wakeword.md)
|