docs: обновить план multi-event-server с чеклистом выполнения
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -1,12 +1,39 @@
|
||||
# План: Множественные подключения event сервисов к Wyoming Satellite
|
||||
|
||||
**Дата:** 2026-05-20
|
||||
**Статус:** Готов к реализации
|
||||
**Ветка:** `feature/multi-event-server`
|
||||
**Статус:** В разработке
|
||||
**Ветка:** `satellite-dev`
|
||||
**Директория для разработки:** `~/projects/satellite-dev`
|
||||
|
||||
---
|
||||
|
||||
## Чеклист выполнения
|
||||
|
||||
### ✅ Выполнено
|
||||
|
||||
- [x] **Ветка создана** — `satellite-dev` (переименована из `feature/multi-event-server`)
|
||||
- [x] **Окружение настроено** — `.venv/` в корне проекта
|
||||
- [x] **Docker удалён** — файлы Dockerfile, docker-compose.yml, скрипты
|
||||
- [x] **Лишние файлы удалены** — test.wav, start.sh, start-dev.sh, .projectile
|
||||
- [x] **setup_dev.sh создан** — быстрая настройка окружения
|
||||
- [x] **Документация обновлена** — plan.md актуализирован
|
||||
|
||||
### 🔄 В процессе
|
||||
|
||||
- [ ] **Этап 2: settings.py** — добавить server_enabled, server_host, server_port
|
||||
- [ ] **Этап 3: satellite.py** — event server + broadcast метод
|
||||
- [ ] **Этап 4: __main__.py** — CLI аргументы для event server
|
||||
- [ ] **Этап 5: test_event_client.py** — тестовый клиент
|
||||
- [ ] **Этап 6: Тестирование** — проверка работы
|
||||
- [ ] **Этап 7: Документация** — обновление docs/
|
||||
|
||||
### ⏳ Ожидается
|
||||
|
||||
- [ ] Merge в master
|
||||
- [ ] Production развёртывание
|
||||
|
||||
---
|
||||
|
||||
## Стратегия разработки
|
||||
|
||||
### Изоляция разработки
|
||||
@@ -18,8 +45,9 @@
|
||||
|
||||
**Версия для разработки:**
|
||||
- Директория: `~/projects/satellite-dev`
|
||||
- Ветка: `feature/multi-event-server`
|
||||
- Ветка: `satellite-dev`
|
||||
- Статус: 🚧 Экспериментальная версия
|
||||
- Окружение: `.venv/` в корне проекта
|
||||
|
||||
### Преимущества такого подхода
|
||||
|
||||
@@ -28,6 +56,18 @@
|
||||
- ✅ **Чистая история** — merge в master только после тестирования
|
||||
- ✅ **Параллельная работа** — можно продолжать фиксить баги в Satellite пока идёт разработка
|
||||
|
||||
### Быстрый старт для разработки
|
||||
|
||||
```bash
|
||||
cd ~/projects/satellite-dev
|
||||
|
||||
# Настройка окружения (один раз)
|
||||
./setup_dev.sh
|
||||
|
||||
# Запуск для тестирования
|
||||
./start_satellite.sh wake
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Архитектура
|
||||
@@ -77,9 +117,9 @@
|
||||
|
||||
## Этапы реализации
|
||||
|
||||
### Этап 1: Подготовка (30 мин)
|
||||
### Этап 1: Подготовка ✅ ВЫПОЛНЕН
|
||||
|
||||
#### 1.1 Проверка окружения
|
||||
#### 1.1 Проверка окружения ✅
|
||||
|
||||
```bash
|
||||
# Production версия (не трогать!)
|
||||
@@ -88,73 +128,37 @@ git status # Должен быть clean
|
||||
|
||||
# Development версия
|
||||
cd ~/projects/satellite-dev
|
||||
git status # Должен быть на feature/multi-event-server
|
||||
git status # Должен быть на satellite-dev
|
||||
```
|
||||
|
||||
#### 1.2 Настройка venv для satellite-dev
|
||||
#### 1.2 Настройка venv для satellite-dev ✅
|
||||
|
||||
```bash
|
||||
# Создание отдельного venv
|
||||
# Автоматическая настройка
|
||||
cd ~/projects/satellite-dev
|
||||
python3 -m venv ~/.venv_satellite_dev
|
||||
source ~/.venv_satellite_dev/bin/activate
|
||||
./setup_dev.sh
|
||||
|
||||
# Установка зависимостей
|
||||
# Или вручную:
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Установка пакета в editable режиме
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
#### 1.3 Проверка что всё работает
|
||||
#### 1.3 Проверка что всё работает ✅
|
||||
|
||||
```bash
|
||||
cd ~/projects/satellite-dev
|
||||
source ~/.venv_satellite_dev/bin/activate
|
||||
source .venv/bin/activate
|
||||
|
||||
# Проверка импорта
|
||||
python3 -c "from wyoming_satellite.satellite import SatelliteBase; print('OK')"
|
||||
|
||||
# Проверка что тестовый клиент работает
|
||||
python3 examples/test_event_client.py --help # После создания
|
||||
```
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Test event client для подключения к satellite."""
|
||||
|
||||
import argparse
|
||||
import asyncio
|
||||
import logging
|
||||
from wyoming.event import Event
|
||||
from wyoming.client import AsyncClient
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger("test_event_client")
|
||||
|
||||
async def main(args):
|
||||
logger.info(f"Connecting to {args.uri}...")
|
||||
client = AsyncClient.from_uri(args.uri)
|
||||
await client.connect()
|
||||
logger.info("Connected!")
|
||||
|
||||
while True:
|
||||
event = await client.read_event()
|
||||
if event is None:
|
||||
logger.warning("Server disconnected")
|
||||
break
|
||||
logger.info(f"Event: {event}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--uri", default="tcp://127.0.0.1:10600")
|
||||
args = parser.parse_args()
|
||||
asyncio.run(main(args))
|
||||
```
|
||||
**Итого:** Окружение готово, можно приступать к реализации.
|
||||
|
||||
---
|
||||
|
||||
### Этап 2: Модификация `wyoming_satellite/settings.py` (1 час)
|
||||
### Этап 2: Модификация `wyoming_satellite/settings.py` (1 час) 🔄 В ПРОЦЕССЕ
|
||||
|
||||
**Добавить настройки event сервера:**
|
||||
|
||||
@@ -194,7 +198,7 @@ class EventSettings(ServiceSettings):
|
||||
|
||||
---
|
||||
|
||||
### Этап 3: Модификация `wyoming_satellite/satellite.py` (3-4 часа)
|
||||
### Этап 3: Модификация `wyoming_satellite/satellite.py` (3-4 часа) ⏳ ОЖИДАЕТСЯ
|
||||
|
||||
#### 3.1 Добавить атрибуты для event сервера
|
||||
|
||||
@@ -384,7 +388,7 @@ async def _stop(self) -> None:
|
||||
|
||||
---
|
||||
|
||||
### Этап 4: Модификация `wyoming_satellite/__main__.py` (30 мин)
|
||||
### Этап 4: Модификация `wyoming_satellite/__main__.py` (30 мин) ⏳ ОЖИДАЕТСЯ
|
||||
|
||||
#### 4.1 Добавить CLI аргументы
|
||||
|
||||
@@ -445,7 +449,7 @@ event=EventSettings(
|
||||
|
||||
---
|
||||
|
||||
### Этап 5: Тестовый event клиент (1 час)
|
||||
### Этап 5: Тестовый event клиент (1 час) ⏳ ОЖИДАЕТСЯ
|
||||
|
||||
#### 5.1 Создать `examples/test_event_client.py`
|
||||
|
||||
@@ -562,7 +566,7 @@ chmod +x examples/test_event_client.py
|
||||
|
||||
---
|
||||
|
||||
### Этап 6: Тестирование (2-3 часа)
|
||||
### Этап 6: Тестирование (2-3 часа) ⏳ ОЖИДАЕТСЯ
|
||||
|
||||
#### 6.1 Запустить satellite с event сервером
|
||||
|
||||
@@ -641,7 +645,7 @@ INFO: Connected to server # Home Assistant
|
||||
|
||||
---
|
||||
|
||||
### Этап 7: Обновление документации (30 мин)
|
||||
### Этап 7: Обновление документации (30 мин) ⏳ ОЖИДАЕТСЯ
|
||||
|
||||
#### 7.1 `docs/integration/mqtt-led.md`
|
||||
|
||||
@@ -745,7 +749,7 @@ python3 -m wyoming_satellite \
|
||||
|
||||
---
|
||||
|
||||
### Этап 8: Merge в master (после успешного тестирования)
|
||||
### Этап 8: Merge в master (после успешного тестирования) ⏳ ОЖИДАЕТСЯ
|
||||
|
||||
```bash
|
||||
# Проверка что всё работает
|
||||
@@ -813,47 +817,69 @@ sudo systemctl restart wyoming-satelite-vosk.service
|
||||
|
||||
## Контрольный список
|
||||
|
||||
### Перед началом
|
||||
### ✅ Этап 1: Подготовка (выполнено)
|
||||
|
||||
- [ ] Создана ветка `feature/multi-event-server`
|
||||
- [ ] Созданы backup файлов
|
||||
- [ ] Текущая версия работает стабильно
|
||||
- [x] Ветка создана — `satellite-dev`
|
||||
- [x] Окружение настроено — `.venv/` в корне проекта
|
||||
- [x] `setup_dev.sh` создан
|
||||
- [x] Лишние файлы удалены (Docker, test.wav, старые скрипты)
|
||||
- [x] `python3 -c "from wyoming_satellite.satellite import SatelliteBase; print('OK')"` работает
|
||||
|
||||
### После этапа 3
|
||||
### 🔄 Этап 2: settings.py (в процессе)
|
||||
|
||||
- [ ] satellite.py изменён без синтаксических ошибок
|
||||
- [ ] `server_enabled: bool` добавлено
|
||||
- [ ] `server_host: str` добавлено
|
||||
- [ ] `server_port: int` добавлено
|
||||
- [ ] `python3 -c "from wyoming_satellite.settings import EventSettings; print(EventSettings.server_enabled)"` работает
|
||||
|
||||
### ⏳ Этап 3: satellite.py (ожидается)
|
||||
|
||||
- [ ] `_event_server: Optional[asyncio.Server]` добавлено
|
||||
- [ ] `_event_clients: List[asyncio.StreamWriter]` добавлено
|
||||
- [ ] `_event_clients_lock` добавлено
|
||||
- [ ] Метод `_broadcast_to_clients()` реализован
|
||||
- [ ] Метод `start_event_server()` реализован
|
||||
- [ ] Метод `stop_event_server()` реализован
|
||||
- [ ] Интеграция в `_start()` выполнена
|
||||
- [ ] Интеграция в `_stop()` выполнена
|
||||
- [ ] `python3 -m py_compile wyoming_satellite/satellite.py` проходит
|
||||
- [ ] Импорт `from wyoming_satellite.satellite import SatelliteBase` работает
|
||||
|
||||
### После этапа 4
|
||||
### ⏳ Этап 4: __main__.py (ожидается)
|
||||
|
||||
- [ ] `--event-server-enabled` аргумент добавлен
|
||||
- [ ] `--event-server-host` аргумент добавлен
|
||||
- [ ] `--event-server-port` аргумент добавлен
|
||||
- [ ] Передача настроек в `EventSettings()` настроена
|
||||
- [ ] `python3 -m wyoming_satellite --help` показывает новые аргументы
|
||||
- [ ] `--event-server-enabled` распознаётся
|
||||
|
||||
### После этапа 5
|
||||
### ⏳ Этап 5: test_event_client.py (ожидается)
|
||||
|
||||
- [ ] `examples/test_event_client.py --help` работает
|
||||
- [ ] `examples/test_event_client.py` создан
|
||||
- [ ] Клиент подключается к порту 10600
|
||||
- [ ] События отображаются в логе
|
||||
- [ ] Обработка отключения сервера работает
|
||||
|
||||
### После этапа 6
|
||||
### ⏳ Этап 6: Тестирование (ожидается)
|
||||
|
||||
- [ ] Satellite запускается с `--event-server-enabled`
|
||||
- [ ] Multiple clients can connect
|
||||
- [ ] Multiple clients can connect (2+ клиентов)
|
||||
- [ ] Все клиенты получают события
|
||||
- [ ] Home Assistant работает (порт 10700)
|
||||
- [ ] wyoming-led.py работает (порт 10500)
|
||||
- [ ] При отключении клиента satellite не падает
|
||||
- [ ] Утечек памяти нет (через 10 минут работы)
|
||||
|
||||
### После этапа 7
|
||||
### ⏳ Этап 7: Документация (ожидается)
|
||||
|
||||
- [ ] Документация обновлена
|
||||
- [ ] Примеры в документации работают
|
||||
- [ ] `docs/integration/mqtt-led.md` обновлена
|
||||
- [ ] `docs/deployment/systemd-services.md` обновлён
|
||||
- [ ] `DEPLOY.md` обновлён
|
||||
|
||||
### Перед merge
|
||||
### ⏳ Перед merge
|
||||
|
||||
- [ ] Все тесты пройдены
|
||||
- [ ] Документация актуальна
|
||||
- [ ] Backup файлы удалены (опционально)
|
||||
- [ ] Ветка называется `satellite-dev`
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user