From f62b0163d087e6269c4deb364f16f80080d005de Mon Sep 17 00:00:00 2001 From: sirmrak Date: Wed, 20 May 2026 15:33:37 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BF=D0=BB=D0=B0=D0=BD=20multi-event-server=20?= =?UTF-8?q?=D1=81=20=D1=87=D0=B5=D0=BA=D0=BB=D0=B8=D1=81=D1=82=D0=BE=D0=BC?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Qwen-Coder --- docs/development/multi-event-server-plan.md | 180 +++++++++++--------- 1 file changed, 103 insertions(+), 77 deletions(-) diff --git a/docs/development/multi-event-server-plan.md b/docs/development/multi-event-server-plan.md index c9fdafe..807771b 100644 --- a/docs/development/multi-event-server-plan.md +++ b/docs/development/multi-event-server-plan.md @@ -1,12 +1,39 @@ # План: Множественные подключения event сервисов к Wyoming Satellite -**Дата:** 2026-05-20 -**Статус:** Готов к реализации -**Ветка:** `feature/multi-event-server` +**Дата:** 2026-05-20 +**Статус:** В разработке +**Ветка:** `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` ---