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
|
# План: Множественные подключения event сервисов к Wyoming Satellite
|
||||||
|
|
||||||
**Дата:** 2026-05-20
|
**Дата:** 2026-05-20
|
||||||
**Статус:** Готов к реализации
|
**Статус:** В разработке
|
||||||
**Ветка:** `feature/multi-event-server`
|
**Ветка:** `satellite-dev`
|
||||||
**Директория для разработки:** `~/projects/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`
|
- Директория: `~/projects/satellite-dev`
|
||||||
- Ветка: `feature/multi-event-server`
|
- Ветка: `satellite-dev`
|
||||||
- Статус: 🚧 Экспериментальная версия
|
- Статус: 🚧 Экспериментальная версия
|
||||||
|
- Окружение: `.venv/` в корне проекта
|
||||||
|
|
||||||
### Преимущества такого подхода
|
### Преимущества такого подхода
|
||||||
|
|
||||||
@@ -28,6 +56,18 @@
|
|||||||
- ✅ **Чистая история** — merge в master только после тестирования
|
- ✅ **Чистая история** — merge в master только после тестирования
|
||||||
- ✅ **Параллельная работа** — можно продолжать фиксить баги в Satellite пока идёт разработка
|
- ✅ **Параллельная работа** — можно продолжать фиксить баги в 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
|
```bash
|
||||||
# Production версия (не трогать!)
|
# Production версия (не трогать!)
|
||||||
@@ -88,73 +128,37 @@ git status # Должен быть clean
|
|||||||
|
|
||||||
# Development версия
|
# Development версия
|
||||||
cd ~/projects/satellite-dev
|
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
|
```bash
|
||||||
# Создание отдельного venv
|
# Автоматическая настройка
|
||||||
cd ~/projects/satellite-dev
|
cd ~/projects/satellite-dev
|
||||||
python3 -m venv ~/.venv_satellite_dev
|
./setup_dev.sh
|
||||||
source ~/.venv_satellite_dev/bin/activate
|
|
||||||
|
|
||||||
# Установка зависимостей
|
# Или вручную:
|
||||||
|
python3 -m venv .venv
|
||||||
|
source .venv/bin/activate
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
|
||||||
# Установка пакета в editable режиме
|
|
||||||
pip install -e .
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 1.3 Проверка что всё работает
|
#### 1.3 Проверка что всё работает ✅
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/projects/satellite-dev
|
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 -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 сервера:**
|
**Добавить настройки 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 сервера
|
#### 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 аргументы
|
#### 4.1 Добавить CLI аргументы
|
||||||
|
|
||||||
@@ -445,7 +449,7 @@ event=EventSettings(
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Этап 5: Тестовый event клиент (1 час)
|
### Этап 5: Тестовый event клиент (1 час) ⏳ ОЖИДАЕТСЯ
|
||||||
|
|
||||||
#### 5.1 Создать `examples/test_event_client.py`
|
#### 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 сервером
|
#### 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`
|
#### 7.1 `docs/integration/mqtt-led.md`
|
||||||
|
|
||||||
@@ -745,7 +749,7 @@ python3 -m wyoming_satellite \
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Этап 8: Merge в master (после успешного тестирования)
|
### Этап 8: Merge в master (после успешного тестирования) ⏳ ОЖИДАЕТСЯ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Проверка что всё работает
|
# Проверка что всё работает
|
||||||
@@ -813,47 +817,69 @@ sudo systemctl restart wyoming-satelite-vosk.service
|
|||||||
|
|
||||||
## Контрольный список
|
## Контрольный список
|
||||||
|
|
||||||
### Перед началом
|
### ✅ Этап 1: Подготовка (выполнено)
|
||||||
|
|
||||||
- [ ] Создана ветка `feature/multi-event-server`
|
- [x] Ветка создана — `satellite-dev`
|
||||||
- [ ] Созданы backup файлов
|
- [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` проходит
|
- [ ] `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` показывает новые аргументы
|
- [ ] `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
|
- [ ] Клиент подключается к порту 10600
|
||||||
|
- [ ] События отображаются в логе
|
||||||
|
- [ ] Обработка отключения сервера работает
|
||||||
|
|
||||||
### После этапа 6
|
### ⏳ Этап 6: Тестирование (ожидается)
|
||||||
|
|
||||||
- [ ] Satellite запускается с `--event-server-enabled`
|
- [ ] Satellite запускается с `--event-server-enabled`
|
||||||
- [ ] Multiple clients can connect
|
- [ ] Multiple clients can connect (2+ клиентов)
|
||||||
- [ ] Все клиенты получают события
|
- [ ] Все клиенты получают события
|
||||||
- [ ] Home Assistant работает (порт 10700)
|
- [ ] Home Assistant работает (порт 10700)
|
||||||
- [ ] wyoming-led.py работает (порт 10500)
|
- [ ] wyoming-led.py работает (порт 10500)
|
||||||
- [ ] При отключении клиента satellite не падает
|
- [ ] При отключении клиента 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