architecture decisions: thin client, open-source android, rustore, roadmap
This commit is contained in:
+91
@@ -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.*
|
||||
|
||||
Reference in New Issue
Block a user