3.5 KiB
3.5 KiB
Архитектура 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
// 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 — базовая проверка на вредоносный код