docs: обновить план multi-event-server с чеклистом выполнения

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
2026-05-20 15:33:37 +03:00
co-authored by Qwen-Coder
parent 235fcbece7
commit f62b0163d0
+102 -76
View File
@@ -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`
---