From 513428ed65f847589cb362df44aaa19c1fd08ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 25 May 2026 07:59:41 +0400 Subject: [PATCH] architecture decisions: thin client, open-source android, rustore, roadmap --- analysis.md | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/analysis.md b/analysis.md index 7c39975..9286396 100644 --- a/analysis.md +++ b/analysis.md @@ -155,4 +155,95 @@ DEEPSEEK_API_KEY=sk-... python web/app.py --- +--- + +## Архитектура клиент-сервер (решено 2026-05-25) + +### Принцип: тонкий клиент + +Клиент ничего не знает о диагнозе. Только транспорт: + +``` +ELM327 ←Bluetooth SPP→ Android Client ←HTTP JSON→ Сервер ←API→ DeepSeek +``` + +### Клиент как универсальный SDK + +- Пользователь вводит URL своего сервера (или используется наш по умолчанию) +- Протокол HTTP/JSON документирован — любой backend +- Два режима работы клиента: + 1. **«Опрос» (основной):** клиент сам читает VIN + DTC + PID'ы, шлёт JSON серверу + 2. **«Ретранслятор» (расширенный):** сервер шлёт сырые AT-команды, клиент пересылает ответ + +### Десктоп + +- Браузер (Chrome) → локальный Flask → pyserial → ELM327 +- Отдельного «приложения» для Windows не нужно +- Тот же `web/app.py` — и тестовый UI, и прототип сервера + +### Открытость и доверие + +| Что | Где | Зачем | +|---|---|---| +| **Клиент (Android)** | GitHub (открытый) | Доверие — любой может проверить код, собрать сам | +| **Сервер (Python)** | Gitea (закрытый) | API-ключи, логика, коммерческая часть | +| **Публикация** | RuStore | Бесплатно, модерация = дополнительное доверие | + +### Git-стратегия + +- `gitea.services.ngcloud.ru/Nail/elmer` — разработка сервера (текущий репо) +- `github.com/Nail/elmer-android` — клиент (будет создан), лицензия MIT +- Серверный репо на GitHub НЕ публикуем + +--- + +## TODO / Дорожная карта + +### 🔴 Фаза 1 — отладка на ноутбуке (ближайшая) + +- [ ] Проверить Bluetooth на ноутбуке: `hciconfig`, `bluetoothctl` +- [ ] Сопрячь ELM327: `bluetoothctl pair ` +- [ ] Привязать к `/dev/rfcomm0`: `rfcomm bind 0 ` +- [ ] `pip install -r requirements.txt` +- [ ] `DEEPSEEK_API_KEY=sk-... python run.py` — консольный тест +- [ ] `DEEPSEEK_API_KEY=sk-... python web/app.py` — веб-тест +- [ ] Подключить реальную машину, считать VIN + ошибки + параметры +- [ ] Оценить качество ответа DeepSeek + +### 🟡 Фаза 2 — сервер + +- [ ] Выделенный сервер/ВМ (или Kubernetes pod) +- [ ] Flask → production (gunicorn) +- [ ] API: `/api/diagnose` (как сейчас), + `/api/sessions`, + `/api/history/` +- [ ] База: миграция SQLite → PostgreSQL +- [ ] RAG: база знаний (repair manuals, TSB) для grounding +- [ ] State machine: итеративные запросы к LLM +- [ ] HTTPS (Let's Encrypt) + +### 🟢 Фаза 3 — Android-клиент + +- [ ] Создать репо `github.com/Nail/elmer-android` +- [ ] Kotlin, minSdk ~24 (Android 7), targetSdk 34 +- [ ] Bluetooth SPP: поиск, pairing, connect, read/write +- [ ] OBD2 парсер: VIN (0902), DTC (03/07), PID (01XX) +- [ ] UI: одна кнопка «Диагностика» + поле ввода URL сервера +- [ ] HTTP-клиент: POST JSON на сервер, показ ответа (Markdown → текст) +- [ ] Permissions: только BLUETOOTH + INTERNET +- [ ] Подпись APK, публикация в RuStore +- [ ] README: как собрать самому, как использовать с чужим сервером + +--- + +## Заметки по итогам обсуждения + +- **Гипотеза подтверждена:** DeepSeek уже дал полный анализ по логам VCDS. Лучше гугла. +- **Модерация RuStore:** проверяет вредоносный код и permissions. BLUETOOTH + INTERNET — вопросов не вызовет. +- **Sideload (APK напрямую):** проверок нет, но permissions видны до установки. +- **Chrome на Android НЕ может:** Web Bluetooth API только BLE, Web Serial API не поддерживается. +- **Termux с Python:** теоретически, но Bluetooth-доступ сложен. +- **ELM327 v1.5 (PIC18F25K80):** китайский клон. Неполный протокол, возможны глюки. Держать в уме. +- **Нет готового аналога:** ниша новая (LLM + OBD2), старые приложения без AI-анализа. + +--- + *Продолжить: тестировать в салоне авто с реальным ELM327.*