architecture decisions: thin client, open-source android, rustore, roadmap

This commit is contained in:
“Naeel”
2026-05-25 07:59:41 +04:00
parent 6cc42bc340
commit 513428ed65
+91
View File
@@ -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 <MAC>`
- [ ] Привязать к `/dev/rfcomm0`: `rfcomm bind 0 <MAC>`
- [ ] `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/<vin>`
- [ ] База: миграция 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.*