89 lines
3.5 KiB
Markdown
89 lines
3.5 KiB
Markdown
# Архитектура Elmer (2026-05-25)
|
|
|
|
## Принцип: тонкий клиент
|
|
|
|
Клиент ничего не знает о диагнозе. Только транспорт:
|
|
|
|
```
|
|
ELM327 ←Bluetooth SPP→ Android Client ←HTTP JSON→ Сервер ←API→ DeepSeek
|
|
```
|
|
|
|
## Режимы работы клиента
|
|
|
|
### Режим «опрос» (основной)
|
|
Клиент сам читает VIN + DTC + PID'ы, шлёт готовый JSON серверу.
|
|
Быстро: один HTTP-запрос на сессию.
|
|
|
|
### Режим «ретранслятор» (расширенный)
|
|
Сервер шлёт сырые AT-команды, клиент пересылает ответ.
|
|
Медленно (каждый PID — HTTP round-trip), но клиент вообще ничего не знает об OBD2.
|
|
|
|
## Универсальность
|
|
|
|
- Пользователь вводит URL сервера (или наш по умолчанию)
|
|
- Протокол HTTP/JSON документирован
|
|
- Любой backend может работать с этим клиентом
|
|
|
|
## Десктоп (Windows/Linux)
|
|
|
|
```
|
|
Браузер (Chrome) → локальный Flask → pyserial → ELM327
|
|
```
|
|
|
|
- Отдельного «приложения» для Windows не нужно
|
|
- `web/app.py` — и тестовый UI, и прототип сервера
|
|
- Chrome на Android НЕ может: Web Bluetooth API только BLE, Web Serial API не поддерживается
|
|
|
|
## Открытость и доверие
|
|
|
|
| Что | Где | Зачем |
|
|
|---|---|---|
|
|
| **Клиент (Android)** | GitHub (открытый) | Доверие — любой может проверить код, собрать сам |
|
|
| **Сервер (Python)** | Gitea (закрытый) | API-ключи, логика, коммерческая часть |
|
|
| **Публикация** | RuStore | Бесплатно, модерация = дополнительное доверие |
|
|
|
|
## Git-стратегия
|
|
|
|
- `gitea.services.ngcloud.ru/Nail/elmer` — разработка сервера (текущий репо)
|
|
- `github.com/Nail/elmer-android` — клиент (будет создан), лицензия MIT
|
|
- Серверный репо на GitHub НЕ публикуем
|
|
|
|
## База данных
|
|
|
|
### SQLite (MVP)
|
|
```
|
|
cars — VIN, марка, модель, год, двигатель
|
|
diagnostic_tokens — id (PK), car_id (FK), created_at
|
|
llm_messages — token_id (FK), role, content, timestamp
|
|
ecu_parameters — token_id (FK), pid_code, value, unit, timestamp
|
|
dtc_codes — token_id (FK), code, description, status
|
|
```
|
|
|
|
### PostgreSQL (production)
|
|
Та же схема, миграция при переходе к production-серверу.
|
|
|
|
## API (прототип)
|
|
|
|
### POST /api/diagnose
|
|
```json
|
|
// Request (от клиента)
|
|
{
|
|
"vin": "WVWZZZ1KZAW123456",
|
|
"dtc_codes": [{"code": "P0301", "status": "stored"}],
|
|
"parameters": [{"pid_code": "0105", "name": "coolant_temp", "value": 85.0, "unit": "°C"}]
|
|
}
|
|
|
|
// Response (от сервера)
|
|
{
|
|
"diagnosis": "## Краткий диагноз\n...",
|
|
"token_id": 42
|
|
}
|
|
```
|
|
|
|
## Безопасность
|
|
|
|
- Permissions Android: только BLUETOOTH + INTERNET
|
|
- Никаких SMS/контактов/файлов/звонков
|
|
- Пользователь видит permissions ДО установки (RuStore и sideload)
|
|
- Модерация RuStore — базовая проверка на вредоносный код
|