From adac79e765ba8a7e28b27c561b7d5b16a47f1b0f Mon Sep 17 00:00:00 2001 From: sirmrak Date: Tue, 19 May 2026 20:12:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8F:=20=D1=80=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=8B=20docs/=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20=D0=BC=D1=83=D1=81=D0=BE?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Перемещена документация в 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 --- .gitignore | 17 + .qwen/settings.json | 3 +- .qwen/settings.json.orig | 8 - DEPLOY.md | 98 ++---- QWEN.md | 190 ++++++++++ README.md | 333 +++++------------- docker/run | 3 - docs/README.md | 35 ++ docs/architecture/overview.md | 175 +++++++++ docs/deployment/systemd-services.md | 140 ++++++++ docs/integration/mqtt-led.md | 175 +++++++++ .../integration/vad-wakeword.md | 0 .../2mic-hat.md} | 4 +- .../installer.md} | 4 +- wyoming-led.service | 20 -- wyoming-satellite.service | 18 - wyoming_satellite.zip | Bin 75833 -> 0 bytes 17 files changed, 866 insertions(+), 357 deletions(-) delete mode 100644 .qwen/settings.json.orig create mode 100644 QWEN.md delete mode 100755 docker/run create mode 100644 docs/README.md create mode 100644 docs/architecture/overview.md create mode 100644 docs/deployment/systemd-services.md create mode 100644 docs/integration/mqtt-led.md rename integrate.md => docs/integration/vad-wakeword.md (100%) rename docs/{tutorial_2mic.md => tutorials/2mic-hat.md} (98%) rename docs/{tutorial_installer.md => tutorials/installer.md} (95%) delete mode 100644 wyoming-led.service delete mode 100755 wyoming-satellite.service delete mode 100755 wyoming_satellite.zip diff --git a/.gitignore b/.gitignore index 8798bff..8632312 100755 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,20 @@ __pycache__/ /dist/ /local/ + +# LED brightness config (auto-generated, user-specific) +examples/led_brightness_config.json + +# Qwen Code settings +.qwen/settings.json.orig + +# Backup files +*.old +*.bak +*~ + +# Archives +*.zip + +# Empty files +*.lgd-* diff --git a/.qwen/settings.json b/.qwen/settings.json index e2c4a76..e406cf1 100644 --- a/.qwen/settings.json +++ b/.qwen/settings.json @@ -2,7 +2,8 @@ "permissions": { "allow": [ "Bash(/home/sirmrak/projects/.venv_satellite/bin/pip *)", - "Bash(find *)" + "Bash(find *)", + "Bash(ls *)" ] }, "$version": 4 diff --git a/.qwen/settings.json.orig b/.qwen/settings.json.orig deleted file mode 100644 index 5fcfbf4..0000000 --- a/.qwen/settings.json.orig +++ /dev/null @@ -1,8 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(/home/sirmrak/projects/.venv_satellite/bin/pip *)" - ] - }, - "$version": 4 -} \ No newline at end of file diff --git a/DEPLOY.md b/DEPLOY.md index 620d61d..41b8ae4 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -1,93 +1,73 @@ -# Развёртывание Wyoming Satellite +# Deployment Guide -## Быстрый старт на новом сервере +Quick start guide for deploying Wyoming Satellite. + +## Quick Start + +### 1. Clone and Install -### 1. Клонирование репозитория ```bash -git clone /path/to/Satellite -cd Satellite -``` +git clone ~/projects/Satellite +cd ~/projects/Satellite -### 2. Создание виртуального окружения -```bash -# Вариант A: в домашней директории (рекомендуется) +# Create virtual environment python3 -m venv ~/.venv_satellite source ~/.venv_satellite/bin/activate -# Вариант B: в projects -python3 -m venv ~/projects/.venv_satellite -source ~/projects/.venv_satellite/bin/activate -``` - -### 3. Установка зависимостей -```bash +# Install dependencies pip install -r requirements.txt ``` -### 4. Установка systemd сервисов +### 2. Install systemd Services + ```bash sudo ./install_systemd_services.sh ``` -Скрипт автоматически: -- Найдёт виртуальное окружение -- Определит текущего пользователя -- Подставит правильные пути в service файлы -- Установит wrapper `satellite-python` в `/usr/local/bin/` +### 3. Start Services -### 5. Запуск сервисов ```bash -# LED сервис (опционально) -sudo systemctl enable wyoming-event.service -sudo systemctl start wyoming-event.service +# LED control (optional, requires ReSpeaker) +sudo systemctl enable --now wyoming-event.service # Wyoming Satellite -sudo systemctl enable wyoming-satelite-vosk.service -sudo systemctl start wyoming-satelite-vosk.service +sudo systemctl enable --now wyoming-satelite-vosk.service -# Wake Word сервис -sudo systemctl enable wyoming-wakeword-vosk.service -sudo systemctl start wyoming-wakeword-vosk.service +# Wake word detection (Vosk) +sudo systemctl enable --now wyoming-wakeword-vosk.service ``` -### 6. Проверка статуса +### 4. Verify + ```bash -sudo systemctl status wyoming-event.service -journalctl -u wyoming-event.service -f +sudo systemctl status wyoming-satelite-vosk.service +journalctl -u wyoming-satelite-vosk.service -f ``` --- -## Структура service файлов +## Full Documentation -Все service файлы используют плейсхолдеры, которые заменяются при установке: - -| Плейсхолдер | Описание | -|-------------|----------| -| `__SAT_BASE_DIR__` | Путь к репозиторию Satellite | -| `__SAT_VENV__` | Путь к виртуальному окружению | -| `__CURRENT_USER__` | Имя пользователя | -| `__HOME_DIR__` | Домашняя директория пользователя | +- [**systemd Services**](deployment/systemd-services.md) — Detailed service configuration +- [**Tutorials**](tutorials/installer.md) — Step-by-step installation guides --- -## Ручная установка (альтернатива) +## Service Overview -Если скрипт не работает, можно вручную: +| Service | Port | Description | +|---------|------|-------------| +| `wyoming-satelite-vosk.service` | 10700 | Main Wyoming satellite | +| `wyoming-wakeword-vosk.service` | 10400 | Vosk wake word detection | +| `wyoming-event.service` | 10500 | LED control + MQTT events | -1. Отредактировать файлы в `service/`, заменив плейсхолдеры -2. Скопировать в `/etc/systemd/system/` -3. Выполнить `sudo systemctl daemon-reload` +## Configuration ---- +Service files use placeholders that are auto-replaced during installation: -## Wrapper `satellite-python` - -Глобальный скрипт `/usr/local/bin/satellite-python` позволяет запускать Python из venv без указания полного пути: - -```ini -# В systemd сервисе -ExecStart=satellite-python /path/to/script.py -``` - -Это избавляет от необходимости прописывать пути к `.venv` в каждом сервисе. +| Placeholder | Description | +|-------------|-------------| +| `__SAT_BASE_DIR__` | Path to Satellite repository | +| `__SAT_VENV__` | Path to virtual environment | +| `__CURRENT_USER__` | Current username | +| `__HOME_DIR__` | User home directory | diff --git a/QWEN.md b/QWEN.md new file mode 100644 index 0000000..9083f67 --- /dev/null +++ b/QWEN.md @@ -0,0 +1,190 @@ +# VoskWyoming Satellite — Project Context + +## Project Overview + +**VoskWyoming Satellite** is a remote voice satellite implementation using the [Wyoming protocol](https://github.com/rhasspy/wyoming) for Home Assistant voice control. It provides: + +- **Home Assistant integration** via Wyoming protocol +- **Local wake word detection** using Vosk (Russian wake words: "привет дроид", etc.) +- **Audio enhancements** via WebRTC noise suppression and gain control +- **MQTT integration** for LED control (ReSpeaker XVF3800 4-MIC array) and Home Assistant discovery +- **Voice Activity Detection (VAD)** using Silero or WebRTC + +**Key technologies:** Python 3.9+, Wyoming protocol, Vosk, WebRTC, MQTT, systemd + +--- + +## Building and Running + +### Prerequisites + +```bash +sudo apt-get install python3-venv python3-pip alsa-utils +``` + +### Setup + +```bash +# Clone and setup +cd ~/projects/Satellite +python3 -m venv ~/.venv_satellite +source ~/.venv_satellite/bin/activate +pip install -r requirements.txt +``` + +### Run (Development) + +```bash +# From project root +./start_satellite.sh # Uses systemd-style config +./start-dev.sh # Development mode +python3 -m wyoming_satellite # Direct module run +``` + +**Main script:** `wyoming_satellite/__main__.py` — argparse-based CLI with extensive options for mic, sound, wake word, VAD, and event handling. + +### Run (Production — systemd) + +```bash +sudo ./install_systemd_services.sh # Auto-installs services + +# Start services +sudo systemctl enable --now wyoming-event.service +sudo systemctl enable --now wyoming-satelite-vosk.service +sudo systemctl enable --now wyoming-wakeword-vosk.service + +# Check status +journalctl -u wyoming-satelite-vosk.service -f +``` + +### Services + +| Service | Port | Description | +|---------|------|-------------| +| `wyoming-satelite-vosk.service` | 10700 | Main Wyoming satellite | +| `wyoming-wakeword-vosk.service` | 10400 | Vosk wake word detection | +| `wyoming-event.service` | 10500 | LED control + MQTT events | + +--- + +## Development + +### Code Quality + +```bash +# Linting +pylint wyoming_satellite/ +mypy wyoming_satellite/ + +# Formatting +black wyoming_satellite/ +isort wyoming_satellite/ + +# Tests +pytest tests/ +tox # Multi-version testing +``` + +**Config files:** +- `pylintrc` — Pylint with many disabled checks (pragmatic approach) +- `mypy.ini` — Permissive, ignores missing imports +- `.isort.cfg` — Import sorting +- `tox.ini` — pytest-based test runner for Python 3.9–3.13 + +### Project Structure + +``` +Satellite/ +├── wyoming_satellite/ # Main package +│ ├── __main__.py # CLI entry point +│ ├── satellite.py # Satellite implementations +│ ├── settings.py # Dataclass-based settings +│ ├── event_handler.py # Wyoming event handling +│ ├── vad.py # Voice activity detection +│ └── webrtc.py # WebRTC audio processing +├── services/ # systemd service files +├── examples/ # Example scripts (LED, MQTT) +├── scripts/ # Helper scripts +├── tests/ # pytest tests +├── sounds/ # Audio files (awake.wav, etc.) +├── start_satellite.sh # Main startup script +├── install_systemd_services.sh # Service installer +└── requirements.txt # Dependencies +``` + +### Key Files + +| File | Purpose | +|------|---------| +| `wyoming_satellite/__main__.py` | Main entry point, CLI parsing | +| `wyoming_satellite/satellite.py` | `SatelliteBase`, `AlwaysStreamingSatellite`, `VadStreamingSatellite`, `WakeStreamingSatellite` | +| `wyoming_satellite/settings.py` | Settings dataclasses (`MicSettings`, `SndSettings`, `VadSettings`, `WakeSettings`, etc.) | +| `start_satellite.sh` | Production startup script (wake/vad modes) | +| `services/*.service` | systemd unit files with placeholders | + +--- + +## Configuration + +### Wake Words (Russian) + +Configured in `start_satellite.sh`: +```bash +--wake-word-name "привет дроид" +--wake-word-name "привет придурок" +--wake-word-name "привет жопа с ушами" +``` + +### VAD Settings + +```yaml +# local/vosk-wake-dev/wyoming_vosk_wake/config.yaml +vad: + vad_enabled: true + energy_threshold: 800 + speech_threshold: 0.5 + min_speech_duration_ms: 200 +``` + +### MQTT (LED Control) + +Topics in `examples/wyoming-led.py`: +- `wyoming/led/command` +- `wyoming/led/brightness/set` +- `wyoming/led/brightness/state` +- `wyoming/led/state` +- `wyoming/led/availability` + +--- + +## Testing Practices + +- **Framework:** pytest + pytest-asyncio +- **Test files:** `tests/test_satellite.py`, `tests/test_wake_streaming.py` +- **Shared fixtures:** `tests/shared.py` +- **Multi-version:** tox runs tests on Python 3.9–3.13 + +--- + +## Deployment Notes + +- **Virtual env location:** `~/.venv_satellite` or `~/projects/.venv_satellite` +- **Service installer:** `install_systemd_services.sh` auto-detects venv path and substitutes placeholders (`__SAT_BASE_DIR__`, `__SAT_VENV__`, `__CURRENT_USER__`) +- **Wrapper script:** `satellite-python` installed to `/usr/local/bin/` for systemd services + +--- + +## External Resources + +- [Wyoming Protocol](https://github.com/rhasspy/wyoming) +- [Home Assistant Wyoming Integration](https://www.home-assistant.io/integrations/wyoming) +- [Vosk](https://alphacephei.com/vosk/) +- [ReSpeaker 4-MIC Array](https://github.com/respeaker/usb_4mic_array) + +--- + +## Known Issues / Workarounds + +- **pylintrc:** Many checks disabled — pragmatic approach, focus on functionality over strict linting +- **mypy:** `ignore_missing_imports = true` — third-party stubs not always available +- **Audio:** Uses `arecord`/`aplay` with specific hardware (`plughw:CARD=Array,DEV=0`) — adjust for different microphones diff --git a/README.md b/README.md index 964a499..56a5348 100755 --- a/README.md +++ b/README.md @@ -1,38 +1,27 @@ -# VoskWyoming Satellite +# README — VoskWyoming Satellite -Remote voice satellite using the [Wyoming protocol](https://github.com/rhasspy/wyoming). - -* Works with [Home Assistant](https://www.home-assistant.io/integrations/wyoming) -* Local wake word detection using [Vosk](https://alphacephei.com/vosk/) -* Audio enhancements using [webrtc](https://github.com/rhasspy/webrtc-noise-gain/) -* MQTT integration for LED control and Home Assistant discovery +Remote voice satellite using the [Wyoming protocol](https://github.com/rhasspy/wyoming) for Home Assistant. [![An open standard from the Open Home Foundation](https://www.openhomefoundation.org/badges/ohf-open-standard.png)](https://www.openhomefoundation.org/) ---- +## Features -## 📋 Requirements +- 🏠 **Home Assistant integration** — Native Wyoming protocol support +- 🎤 **Local wake word detection** — Vosk-based Russian wake words ("привет дроид", etc.) +- 🔇 **Audio enhancements** — WebRTC noise suppression and automatic gain control +- 💡 **MQTT LED control** — ReSpeaker XVF3800 4-MIC array support with HA discovery +- 🎯 **Voice Activity Detection** — Silero or WebRTC VAD for privacy-focused operation -* Python 3.9+ -* Linux (tested on Raspberry Pi OS) -* Microphone (USB or HAT) -* Optional: ReSpeaker XVF3800 USB 4-MIC Array (for LED control) +## Quick Start ---- - -## 🚀 Quick Start - -### 1. Clone and Install +### 1. Install ```bash git clone ~/projects/Satellite cd ~/projects/Satellite -# Create virtual environment python3 -m venv ~/.venv_satellite source ~/.venv_satellite/bin/activate - -# Install dependencies pip install -r requirements.txt ``` @@ -42,271 +31,125 @@ pip install -r requirements.txt sudo ./install_systemd_services.sh ``` -This script automatically: -- Detects your virtual environment location -- Substitutes correct paths in service files -- Installs the `satellite-python` wrapper - -### 3. Start Services - -```bash -# LED control (optional, requires ReSpeaker) -sudo systemctl enable wyoming-event.service -sudo systemctl start wyoming-event.service - -# Wyoming Satellite -sudo systemctl enable wyoming-satelite-vosk.service -sudo systemctl start wyoming-satelite-vosk.service - -# Wake word detection (Vosk) -sudo systemctl enable wyoming-wakeword-vosk.service -sudo systemctl start wyoming-wakeword-vosk.service -``` - -### 4. Verify +### 3. Start ```bash +sudo systemctl enable --now wyoming-satelite-vosk.service sudo systemctl status wyoming-satelite-vosk.service -journalctl -u wyoming-satelite-vosk.service -f ``` +In Home Assistant: **Settings → Devices & Services → Discovered → Wyoming Satellite → Configure** + --- -## 📦 Installation +## Documentation -### System Dependencies +| Guide | Description | +|-------|-------------| +| [**Deployment**](DEPLOY.md) | Full deployment guide with systemd services | +| [**Tutorials**](docs/tutorials/) | Step-by-step setup for different hardware | +| [**Architecture**](docs/architecture/overview.md) | How Wyoming Satellite works | +| [**MQTT LED**](docs/integration/mqtt-led.md) | LED control with Home Assistant | +| [**VAD Integration**](docs/integration/vad-wakeword.md) | Technical integration guide | -```bash -sudo apt-get install python3-venv python3-pip alsa-utils -``` +### Tutorials -### Python Dependencies - -```bash -# Create and activate venv -python3 -m venv ~/.venv_satellite -source ~/.venv_satellite/bin/activate - -# Install requirements -pip install -r requirements.txt -``` +- [**2-MIC HAT**](docs/tutorials/2mic-hat.md) — Raspberry Pi + ReSpeaker 2-MIC HAT +- [**Installer**](docs/tutorials/installer.md) — Interactive installer guide --- -## 🔧 Configuration +## Requirements -### Service Files - -All service files are in `service/` directory and use placeholders that are automatically replaced during installation: - -| Placeholder | Description | -|-------------|-------------| -| `__SAT_BASE_DIR__` | Path to Satellite repository | -| `__SAT_VENV__` | Path to virtual environment | -| `__CURRENT_USER__` | Current username | -| `__HOME_DIR__` | User home directory | - -### Available Services - -| Service | Description | Port | -|---------|-------------|------| -| `wyoming-satelite-vosk.service` | Main Wyoming satellite | 10700 | -| `wyoming-wakeword-vosk.service` | Vosk wake word detection | 10400 | -| `wyoming-event.service` | LED control + MQTT | 10500 | - -### Configuration Files - -| File | Location | Description | -|------|----------|-------------| -| `config.yaml` | `local/vosk-wake-dev/wyoming_vosk_wake/` | VAD and wake word settings | -| `led_brightness_config.json` | `examples/` | LED brightness levels (auto-created) | +- **Python 3.9+** +- **Linux** (tested on Raspberry Pi OS) +- **Microphone** (USB or HAT) +- **Optional:** ReSpeaker XVF3800 USB 4-MIC Array (for LED control) --- -## 🎤 Usage - -### Manual Start (without systemd) - -```bash -# Activate venv -source ~/.venv_satellite/bin/activate - -# Start satellite -./start_satellite.sh - -# Or directly -python3 -m wyoming_satellite \ - --name 'my-satellite' \ - --uri 'tcp://0.0.0.0:10700' \ - --mic-command 'arecord -r 16000 -c 1 -f S16_LE -t raw' \ - --snd-command 'aplay -r 22050 -c 1 -f S16_LE -t raw' -``` - -### Wake Word Configuration - -Edit `local/vosk-wake-dev/wyoming_vosk_wake/config.yaml`: - -```yaml -vad: - vad_enabled: true - energy_threshold: 800 - speech_threshold: 0.5 - min_speech_duration_ms: 200 - -logging_level: debug # debug, info, warning, error -``` - -### LED Control (ReSpeaker) - -The LED service requires the [ReSpeaker XVF3800 control scripts](https://github.com/respeaker/usb_4mic_array): - -```bash -# Clone ReSpeaker repo -git clone https://github.com/respeaker/usb_4mic_array.git ~/projects/reSpeaker_XVF3800_USB_4MIC_ARRAY - -# The LED service will automatically find xvf_host.py -``` - -MQTT Topics: -- `wyoming/led/command` - Send commands -- `wyoming/led/brightness/set` - Set brightness (0-255) -- `wyoming/led/brightness/state` - Brightness state -- `wyoming/led/state` - Current LED state -- `wyoming/led/availability` - Online/offline status - ---- - -## 🔍 Examples - -See `examples/` directory for additional scripts: - -| File | Description | -|------|-------------| -| `wyoming-led.py` | LED control with MQTT and Home Assistant discovery | -| `2mic_service.py` | Configuration for 2-mic HAT | -| `4mic_service.py` | Configuration for 4-mic array | -| `usbmic_service.py` | Configuration for USB microphone | - ---- - -## 🛠️ Development - -### Project Structure +## Project Structure ``` Satellite/ -├── service/ # systemd service files -├── examples/ # Example scripts -├── local/ # Local wake word services -│ └── vosk-wake-dev/ # Vosk wake word detection -├── scripts/ # Helper scripts -├── install_systemd_services.sh # Auto-install services -├── requirements.txt # Python dependencies -├── start_satellite.sh # Main startup script -└── DEPLOY.md # Deployment guide +├── wyoming_satellite/ # Main Python package +├── examples/ # Example scripts (LED, MQTT, configs) +├── services/ # systemd service files +├── docs/ # Documentation +│ ├── tutorials/ # Hardware-specific guides +│ ├── integration/ # Technical integration guides +│ ├── deployment/ # Deployment guides +│ └── architecture/ # Architecture documentation +├── sounds/ # Audio files (awake.wav, etc.) +├── scripts/ # Helper scripts +└── tests/ # Unit tests ``` -### Running Tests +--- + +## Configuration + +### Wake Words (Russian) + +Edit `start_satellite.sh`: ```bash -# Run linters +--wake-word-name "привет дроид" +--wake-word-name "привет придурок" +--wake-word-name "привет жопа с ушами" +``` + +### Audio Settings + +```bash +--mic-noise-suppression 2 +--mic-auto-gain 5 +``` + +### VAD Settings + +```bash +--vad +--vad-system webrtc +--vad-threshold 0.5 +``` + +--- + +## Development + +```bash +# Linting pylint wyoming_satellite/ mypy wyoming_satellite/ -# Run tests (if available) +# Tests pytest tests/ -``` -### Updating Dependencies - -```bash -# Update requirements.txt from current venv -pip freeze > requirements.txt +# Format +black wyoming_satellite/ +isort wyoming_satellite/ ``` --- -## 📖 Documentation +## Video Tutorials -* [Deployment Guide](DEPLOY.md) - Full deployment instructions -* [Wyoming Protocol](https://github.com/rhasspy/wyoming) - Protocol documentation -* [Home Assistant Integration](https://www.home-assistant.io/integrations/wyoming) - HA setup -* [Vosk](https://alphacephei.com/vosk/) - Wake word recognition +- [Wyoming Voice Satellite with ChatGPT](https://www.youtube.com/watch?v=eTKgc0YDCwE) +- [Local ChatGPT Voice Assistant](https://www.youtube.com/watch?v=pAKqKTkx5X4) --- -## 🎥 Video Tutorials +## External Resources -* [Wyoming Voice Satellite with ChatGPT](https://www.youtube.com/watch?v=eTKgc0YDCwE) -* [Local ChatGPT Voice Assistant](https://www.youtube.com/watch?v=pAKqKTkx5X4) +- [Wyoming Protocol](https://github.com/rhasspy/wyoming) +- [Home Assistant Integration](https://www.home-assistant.io/integrations/wyoming) +- [Vosk](https://alphacephei.com/vosk/) +- [ReSpeaker 4-MIC Array](https://github.com/respeaker/usb_4mic_array) --- -## ⚙️ Audio Enhancements - -### WebRTC Noise Suppression - -Enabled by default via `requirements.txt` (webrtc-noise-gain==1.2.3) - -Configure in satellite startup: -```bash ---mic-auto-gain 5 \ ---mic-noise-suppression 2 -``` - -### VAD (Voice Activity Detection) - -Configured in `config.yaml`: -```yaml -vad: - vad_enabled: true - mode: 3 # 0-3, higher = more aggressive - sample_rate: 16000 -``` - ---- - -## 🐛 Troubleshooting - -### Service won't start - -```bash -# Check status -sudo systemctl status wyoming-satelite-vosk.service - -# View logs -journalctl -u wyoming-satelite-vosk.service -f - -# Check Python path -which satellite-python -satellite-python --version -``` - -### Microphone not detected - -```bash -# List audio devices -arecord -L -aplay -L - -# Test recording -arecord -r 16000 -c 1 -f S16_LE -t raw -d 5 test.wav -aplay test.wav -``` - -### MQTT Connection Issues - -Check broker settings in `examples/wyoming-led.py`: -```python -MQTT_BROKER = "192.168.200.100" -MQTT_PORT = 1883 -MQTT_USER = "mqtt" -MQTT_PASS = "mqtt" -``` - ---- - -## 📝 License +## License This project is part of the Open Home Foundation ecosystem. diff --git a/docker/run b/docker/run deleted file mode 100755 index 2e6876d..0000000 --- a/docker/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -/app/script/run \ - --uri tcp://0.0.0.0:10700 "$@" diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..eeaee06 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,35 @@ +# Documentation Index + +## 📖 For Users + +| Guide | Description | +|-------|-------------| +| [**Deployment**](../../DEPLOY.md) | Quick start and systemd services | +| [**2-MIC HAT**](tutorials/2mic-hat.md) | Raspberry Pi + ReSpeaker 2-MIC HAT | +| [**Installer**](tutorials/installer.md) | Interactive installer guide | + +## 🔧 For Developers + +| Document | Description | +|----------|-------------| +| [**Architecture**](architecture/overview.md) | How Wyoming Satellite works | +| [**VAD/Wake Integration**](integration/vad-wakeword.md) | Technical integration guide | +| [**MQTT LED Control**](integration/mqtt-led.md) | LED control with Home Assistant | +| [**systemd Services**](deployment/systemd-services.md) | Service configuration details | + +## 📁 Structure + +``` +docs/ +├── README.md # This file +├── tutorials/ +│ ├── 2mic-hat.md # 2-MIC HAT setup +│ └── installer.md # Interactive installer +├── integration/ +│ ├── vad-wakeword.md # VAD/Wake technical guide +│ └── mqtt-led.md # LED/MQTT integration +├── deployment/ +│ └── systemd-services.md # systemd configuration +└── architecture/ + └── overview.md # High-level architecture +``` diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md new file mode 100644 index 0000000..83d16c9 --- /dev/null +++ b/docs/architecture/overview.md @@ -0,0 +1,175 @@ +# Architecture Overview + +High-level architecture of Wyoming Satellite. + +## Core Components + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Home Assistant │ +│ (Wyoming Integration) │ +└──────────────────────┬──────────────────────────────────────┘ + │ Wyoming Protocol (TCP) + │ Port 10700 +┌──────────────────────▼──────────────────────────────────────┐ +│ Wyoming Satellite │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ SatelliteBase │ │ +│ │ ├─ AlwaysStreamingSatellite │ │ +│ │ ├─ VadStreamingSatellite │ │ +│ │ └─ WakeStreamingSatellite │ │ +│ └─────────────────────────────────────────────────────┘ │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ MicSettings │ │ SndSettings │ │ WakeSettings │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ EventHandler │ │ +│ └─────────────────────────────────────────────────────┘ │ +└──────────┬─────────────────────┬───────────────────────────┘ + │ │ + │ Audio In │ Audio Out + │ (arecord) │ (aplay) +┌──────────▼──────┐ ┌────────▼──────────┐ +│ Microphone │ │ Speaker │ +│ USB/HAT │ │ USB/HAT │ +└─────────────────┘ └───────────────────┘ + +┌─────────────────────────────────────────────────────────────┐ +│ Local Services (Optional) │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────────┐ ┌─────────────────────┐ │ +│ │ Wake Word Service │ │ Event Service │ │ +│ │ (Vosk, port 10400) │ │ (MQTT, port 10500) │ │ +│ └─────────────────────┘ └─────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +## Satellite Modes + +### AlwaysStreamingSatellite + +Continuously streams audio to Home Assistant. + +- **Pros:** Lowest latency, simplest +- **Cons:** Highest bandwidth, no local processing +- **Use case:** Fast LAN, no privacy concerns + +### VadStreamingSatellite + +Uses Voice Activity Detection to start streaming only when speech is detected. + +- **VAD Systems:** + - **Silero:** Neural network-based, more accurate + - **WebRTC:** Lightweight, faster +- **Features:** + - Pre-roll buffer (sends audio before VAD trigger) + - Wake word timeout (wait for wake word after VAD) +- **Use case:** Privacy-focused, bandwidth-constrained + +### WakeStreamingSatellite + +Uses local wake word detection before streaming. + +- **Wake Word Systems:** + - **Vosk:** Grammar-based (Russian phrases) + - **openWakeWord:** Neural network + - **Porcupine:** Commercial KWS +- **Flow:** + 1. Continuously listen for wake word + 2. On detection → start streaming to HA + 3. Process command → stop streaming +- **Use case:** Full local wake word, "Hey Google" style + +## Audio Pipeline + +``` +Microphone + │ + ▼ +┌─────────────────┐ +│ Audio Capture │ arecord -r 16000 -c 1 -f S16_LE +└────────┬────────┘ + │ + ▼ +┌─────────────────┐ +│ Pre-processing │ Volume, AGC, Noise Suppression +└────────┬────────┘ + │ + ▼ +┌─────────────────┐ +│ VAD / Wake │ Decision: stream or not? +└────────┬────────┘ + │ + ▼ +┌─────────────────┐ +│ Wyoming Protocol│ Encode to Wyoming messages +└────────┬────────┘ + │ + ▼ + Home Assistant +``` + +## Key Files + +| File | Purpose | +|------|---------| +| `wyoming_satellite/__main__.py` | CLI entry point, argument parsing | +| `wyoming_satellite/satellite.py` | Satellite implementations | +| `wyoming_satellite/settings.py` | Settings dataclasses | +| `wyoming_satellite/event_handler.py` | Wyoming event handling | +| `wyoming_satellite/vad.py` | VAD implementations (Silero, WebRTC) | +| `wyoming_satellite/webrtc.py` | WebRTC audio processing | + +## Configuration + +Main configuration via CLI arguments (see `__main__.py`): + +```bash +# Microphone +--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 + +# Events (LED, MQTT) +--event-uri tcp://127.0.0.1:10500 +``` + +## State Machine + +``` + ┌──────────────┐ + │ Stopped │ + └──────┬───────┘ + │ Start + ▼ + ┌──────────────┐ + ┌────────│ Listening │────────┐ + │ └──────┬───────┘ │ + │ │ │ + VAD trigger Wake detection Streaming + │ │ │ + ▼ ▼ ▼ + ┌──────────┐ ┌──────────┐ ┌──────────┐ + │ VAD │ │ Wake │ │Streaming │ + │ Active │ │ Active │ │ Audio │ + └────┬─────┘ └────┬─────┘ └────┬─────┘ + │ │ │ + └───────────────┴───────────────┘ + │ + AudioStop + ▼ + ┌──────────────┐ + │ Listening │ + └──────────────┘ +``` diff --git a/docs/deployment/systemd-services.md b/docs/deployment/systemd-services.md new file mode 100644 index 0000000..104dba5 --- /dev/null +++ b/docs/deployment/systemd-services.md @@ -0,0 +1,140 @@ +# systemd Services Configuration + +Detailed guide for configuring and managing Wyoming Satellite systemd services. + +## Service Files Location + +Service files are in the `services/` directory: + +``` +services/ +├── wyoming-event.service # LED control + MQTT +├── wyoming-satelite-vosk.service # Main satellite +└── wyoming-wakeword-vosk.service # Wake word detection +``` + +## Installation Script + +The `install_systemd_services.sh` script automatically: + +1. Detects your virtual environment path +2. Determines the current user +3. Substitutes placeholders in service files +4. Copies services to `/etc/systemd/system/` +5. Installs the `satellite-python` wrapper to `/usr/local/bin/` + +### Manual Installation + +If the script doesn't work, install manually: + +```bash +# 1. Edit service files, replacing placeholders: +# __SAT_BASE_DIR__ → /home/sirmrak/projects/Satellite +# __SAT_VENV__ → /home/sirmrak/.venv_satellite +# __CURRENT_USER__ → sirmrak + +# 2. Copy to systemd directory +sudo cp services/*.service /etc/systemd/system/ + +# 3. Reload systemd +sudo systemctl daemon-reload + +# 4. Enable and start +sudo systemctl enable --now wyoming-satelite-vosk.service +``` + +## Service Details + +### wyoming-satelite-vosk.service + +Main Wyoming satellite service. Connects to: +- Microphone (arecord) +- Speaker (aplay) +- Wake word service (optional, port 10400) +- Event service (optional, port 10500) + +**Ports:** 10700 (Wyoming protocol) + +**Dependencies:** network.target + +### wyoming-wakeword-vosk.service + +Vosk-based wake word detection service. Listens for Russian wake words: +- "привет дроид" +- "привет придурок" +- "привет жопа с ушами" + +**Ports:** 10400 (Wyoming protocol) + +**Configuration:** `local/vosk-wake-dev/wyoming_vosk_wake/config.yaml` + +### wyoming-event.service + +LED control and MQTT integration for ReSpeaker XVF3800. + +**Ports:** 10500 (Wyoming event protocol) + +**MQTT Topics:** +- `wyoming/led/command` — Commands from Home Assistant +- `wyoming/led/brightness/set` — Set brightness (0-255) +- `wyoming/led/brightness/state` — Current brightness state +- `wyoming/led/state` — LED state +- `wyoming/led/availability` — Online/offline status + +## Management Commands + +```bash +# Check status +sudo systemctl status wyoming-satelite-vosk.service + +# View logs (real-time) +journalctl -u wyoming-satelite-vosk.service -f + +# Restart service +sudo systemctl restart wyoming-satelite-vosk.service + +# Disable service +sudo systemctl disable --now wyoming-satelite-vosk.service + +# Reload systemd after changes +sudo systemctl daemon-reload +``` + +## Troubleshooting + +### Service won't start + +```bash +# Check status and recent errors +sudo systemctl status wyoming-satelite-vosk.service + +# View full logs +journalctl -u wyoming-satelite-vosk.service -n 100 + +# Check Python path +which satellite-python +satellite-python --version +``` + +### Common Issues + +| Issue | Solution | +|-------|----------| +| `ModuleNotFoundError` | Check venv path in service file | +| `arecord: command not found` | Install `alsa-utils` | +| Permission denied | Check `User=` directive matches your username | +| Port already in use | Check if another instance is running | + +## Wrapper Script + +The `satellite-python` wrapper allows running Python from venv without full path: + +```bash +# Installed to /usr/local/bin/satellite-python +satellite-python --version # Uses venv Python +``` + +Used in service files: +```ini +ExecStart=satellite-python -m wyoming_satellite ... +``` diff --git a/docs/integration/mqtt-led.md b/docs/integration/mqtt-led.md new file mode 100644 index 0000000..b65b9e1 --- /dev/null +++ b/docs/integration/mqtt-led.md @@ -0,0 +1,175 @@ +# MQTT LED Control + +Integration guide for ReSpeaker LED control via MQTT and Home Assistant. + +## Overview + +The LED service (`examples/wyoming-led.py`) provides: + +- **Light entity** — Control LED brightness and color +- **Sensor entity** — Satellite state (idle, listening, speaking) +- **Number entities** — 7 sliders for fine-grained control +- **MQTT Discovery** — Auto-configuration in Home Assistant + +## Architecture + +``` +┌──────────────────┐ MQTT ┌──────────────────┐ +│ Home Assistant │◄─────────────►│ wyoming-led.py │ +│ │ │ (port 10501) │ +└──────────────────┘ └────────┬─────────┘ + │ + │ Wyoming Events + │ (port 10500) + ┌────────▼─────────┐ + │ Satellite │ + │ (port 10700) │ + └──────────────────┘ +``` + +## Installation + +### 1. Install Dependencies + +```bash +cd ~/projects/Satellite +source ~/.venv_satellite/bin/activate +pip install paho-mqtt +``` + +### 2. Configure MQTT Settings + +Edit `examples/wyoming-led.py`: + +```python +MQTT_BROKER = "192.168.200.100" # Your MQTT broker +MQTT_PORT = 1883 +MQTT_USER = "mqtt" +MQTT_PASS = "mqtt" +``` + +### 3. Create systemd Service + +```bash +sudo nano /etc/systemd/system/wyoming-led.service +``` + +```ini +[Unit] +Description=Wyoming LED Service with MQTT +After=network.target mosquitto.service + +[Service] +Type=simple +User=sirmrak +WorkingDirectory=/home/sirmrak/projects/Satellite +Environment="PATH=/home/sirmrak/projects/.venv_satellite/bin" +ExecStart=/home/sirmrak/projects/.venv_satellite/bin/python3 /home/sirmrak/projects/Satellite/examples/wyoming-led.py --host 0.0.0.0 --port 10501 +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +### 4. Enable Service + +```bash +sudo systemctl daemon-reload +sudo systemctl enable --now wyoming-led.service +``` + +## MQTT Topics + +| Topic | Direction | Description | +|-------|-----------|-------------| +| `wyoming/led/command` | HA → Script | Light commands (on/off, color, brightness) | +| `wyoming/led/brightness/set` | HA → Script | Set brightness (0-255) | +| `wyoming/led/brightness/state` | Script → HA | Current brightness | +| `wyoming/led/state` | Script → HA | LED state (on/off) | +| `wyoming/led/availability` | Script → HA | Online/offline | +| `wyoming/satellite/state` | Script → HA | Satellite state | + +## Home Assistant Entities + +After discovery, you'll see: + +- **Light:** `light.wyoming_led` — RGB control +- **Sensor:** `sensor.wyoming_satellite_state` — Current state +- **Number:** `number.wyoming_led_brightness` — Brightness slider +- **Number:** `number.wyoming_led_red/green/blue` — Color sliders +- **Number:** `number.wyoming_led_idle/listening/speaking` — State colors + +## LED States + +| State | Color | Behavior | +|-------|-------|----------| +| Idle | Blue (dim) | Breathing effect | +| Listening | Cyan | Solid | +| Speaking | Green | Solid | +| Error | Red | Blinking | + +## Brightness Configuration + +LED brightness is stored in `examples/led_brightness_config.json`: + +```json +{ + "idle": 50, + "listening": 100, + "speaking": 150, + "error": 200 +} +``` + +This file is auto-created and should be excluded from git tracking: + +```bash +git update-index --assume-unchanged examples/led_brightness_config.json +``` + +## Troubleshooting + +### LEDs not responding + +```bash +# Check service status +sudo systemctl status wyoming-led.service + +# View logs +journalctl -u wyoming-led.service -f + +# Test manually +python3 examples/wyoming-led.py --debug +``` + +### MQTT connection failed + +- Verify broker is running: `sudo systemctl status mosquitto` +- Check credentials in `wyoming-led.py` +- Test connection: `mosquitto_sub -t 'wyoming/led/#' -v` + +### ReSpeaker not detected + +```bash +# Check USB devices +lsusb | grep -i respeaker + +# Test xvf_host.py +python3 examples/xvf_host.py --help +``` + +## Hardware Support + +| Device | Support | Notes | +|--------|---------|-------| +| ReSpeaker XVF3800 (USB 4-MIC) | ✅ Full | Recommended | +| ReSpeaker 2-MIC HAT | ✅ Full | Requires GPIO | +| ReSpeaker 4-MIC HAT | ✅ Full | Requires GPIO | +| Generic USB mic | ⚠️ Partial | No LED control | + +## Related Files + +- `examples/wyoming-led.py` — Main LED control script +- `examples/xvf_host.py` — ReSpeaker XVF3800 driver +- `examples/led_brightness_config.json` — Brightness settings +- `services/wyoming-event.service` — Event service (alternative) diff --git a/integrate.md b/docs/integration/vad-wakeword.md similarity index 100% rename from integrate.md rename to docs/integration/vad-wakeword.md diff --git a/docs/tutorial_2mic.md b/docs/tutorials/2mic-hat.md similarity index 98% rename from docs/tutorial_2mic.md rename to docs/tutorials/2mic-hat.md index 21ffd86..9a82f65 100755 --- a/docs/tutorial_2mic.md +++ b/docs/tutorials/2mic-hat.md @@ -1,8 +1,8 @@ -# Tutorial with 2mic HAT +# 2-MIC HAT Tutorial Create a voice satellite using a [Raspberry Pi Zero 2 W](https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/) and a [ReSpeaker 2Mic HAT](https://wiki.keyestudio.com/Ks0314_keyestudio_ReSpeaker_2-Mic_Pi_HAT_V1.0). -This tutorial should work for almost any Raspberry Pi and USB microphone. Audio enhancements and local wake word detection may require a 64-bit operating system, however. +**Prerequisites:** See [Deployment Guide](../../DEPLOY.md) for base installation. ## Install OS diff --git a/docs/tutorial_installer.md b/docs/tutorials/installer.md similarity index 95% rename from docs/tutorial_installer.md rename to docs/tutorials/installer.md index c6b16af..de556f9 100755 --- a/docs/tutorial_installer.md +++ b/docs/tutorials/installer.md @@ -1,7 +1,9 @@ -# Tutorial with Installer +# Interactive Installer Tutorial Create a voice satellite using a Raspberry Pi 3+ and USB microphone and speakers. +**Prerequisites:** See [Deployment Guide](../../DEPLOY.md) for base installation. + ## Install OS Follow instructions to [install Raspberry Pi OS](https://www.raspberrypi.com/software/). Under "Choose OS", pick "Raspberry Pi OS (other)" and "Raspberry Pi OS (**64-bit**) Lite". diff --git a/wyoming-led.service b/wyoming-led.service deleted file mode 100644 index 7e80dc7..0000000 --- a/wyoming-led.service +++ /dev/null @@ -1,20 +0,0 @@ -[Unit] -Description=Wyoming LED Service with MQTT (ReSpeaker XVF3800) -After=network.target mosquitto.service -Wants=mosquitto.service - -[Service] -Type=simple -User=sirmrak -Group=sirmrak -WorkingDirectory=/home/sirmrak/projects/Satellite -Environment="PATH=/home/sirmrak/projects/.venv_satellite/bin" -ExecStart=/home/sirmrak/projects/.venv_satellite/bin/python3 /home/sirmrak/projects/Satellite/examples/wyoming-led.py --host 0.0.0.0 --port 10701 -Restart=always -RestartSec=5 -StandardOutput=journal -StandardError=journal -SyslogIdentifier=wyoming-led - -[Install] -WantedBy=multi-user.target diff --git a/wyoming-satellite.service b/wyoming-satellite.service deleted file mode 100755 index 630cd81..0000000 --- a/wyoming-satellite.service +++ /dev/null @@ -1,18 +0,0 @@ -[Unit] -Description=Wyoming Satellite Service (Wake Mode) -Requires=network.target -After=network.target - -[Service] -Type=simple -User=sirmrak -WorkingDirectory=/home/sirmrak/wyoming-satellite -ExecStart=/home/sirmrak/wyoming-satellite/start_satellite.sh -Environment="PYTHONUNBUFFERED=1" -Restart=on-failure -RestartSec=5 -StandardOutput=journal -StandardError=journal - -[Install] -WantedBy=multi-user.target \ No newline at end of file diff --git a/wyoming_satellite.zip b/wyoming_satellite.zip deleted file mode 100755 index 4e60663252ed48c95f9ec39dbec45c823a8dd792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75833 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