doc: competitors, architecture, roadmap, research notes
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# Архитектура 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 — базовая проверка на вредоносный код
|
||||
@@ -0,0 +1,69 @@
|
||||
# Конкуренты (2026-05-25)
|
||||
|
||||
## Резюме
|
||||
|
||||
На рынке есть 4 буржуазных конкурента. **Русскоязычных — ноль.** RuStore пустой по запросу «OBD2 + AI диагностика».
|
||||
|
||||
Это главное преимущество: мы не «ещё один», а **первый на русском рынке**.
|
||||
|
||||
---
|
||||
|
||||
## DiagnostiX AI
|
||||
| | |
|
||||
|---|---|
|
||||
| **Разработчик** | Exza / Ontario Analytics (Канада) |
|
||||
| **Платформа** | Android (Google Play) |
|
||||
| **ID** | `com.exza.diagnostixai` |
|
||||
| **Описание** | OBD2 scanner + AI mechanic assistant. Чтение/сброс DTC, live data, сенсоры в реальном времени, AI-помощь |
|
||||
| **LLM** | Не раскрыт |
|
||||
| **Слабость** | Всё в одном app, locked-in |
|
||||
|
||||
## OBDAI
|
||||
| | |
|
||||
|---|---|
|
||||
| **Разработчик** | Ontario Analytics (Канада/США) |
|
||||
| **Платформа** | iOS + Android |
|
||||
| **ID** | `com.ontarioanalytics.obdai` |
|
||||
| **Описание** | AI-агент ARIA (Automotive Reasoning & Intelligence Agent). Профессиональные диагностические отчёты. «Поговори с машиной» |
|
||||
| **LLM** | ARIA (вероятно свой/кастомный) |
|
||||
| **Слабость** | Закрытый, платный, английский |
|
||||
|
||||
## Zero Touch Car Diagnostics
|
||||
| | |
|
||||
|---|---|
|
||||
| **Разработчик** | kellinheller (GitHub) |
|
||||
| **Платформа** | Кроссплатформа (Flutter) |
|
||||
| **Репозиторий** | `github.com/kellinheller/zero_touch_car_diagnostics` |
|
||||
| **Описание** | Open source. OBD2 + датчики телефона + GPS + AI-анализ через Google Gemini 2.5 Pro |
|
||||
| **LLM** | Google Gemini 2.5 Pro |
|
||||
| **Слабость** | Gemini платный. Flutter = тяжёлый. Не для ELM327 v1.5 (клонов) |
|
||||
|
||||
## MUCAR 892BT MUAI (THINKCAR)
|
||||
| | |
|
||||
|---|---|
|
||||
| **Производитель** | THINKCAR (Китай) |
|
||||
| **Тип** | Железка + софт |
|
||||
| **Описание** | Полноценный диагностический сканер со своим экраном. 8 диагностических модулей, отчёты |
|
||||
| **LLM** | **DeepSeek** (единственный конкурент на DeepSeek) |
|
||||
| **Слабость** | Свой сканер (~$150-300). Не работает с ELM327 |
|
||||
|
||||
---
|
||||
|
||||
## Сравнение с Elmer
|
||||
|
||||
| Критерий | DiagnostiX AI | OBDAI | Zero Touch | MUCAR MUAI | **Elmer** |
|
||||
|---|---|---|---|---|---|
|
||||
| Open source клиент | ❌ | ❌ | ✅ | ❌ | ✅ |
|
||||
| Тонкий клиент (свой сервер) | ❌ | ❌ | ❌ | ❌ | ✅ |
|
||||
| Русский язык | ❌ | ❌ | ❌ | ❌ | ✅ |
|
||||
| RuStore | ❌ | ❌ | ❌ | ❌ | ✅ |
|
||||
| Работает с дешёвым ELM327 | ✅ | ✅ | 🟡 | ❌ | ✅ |
|
||||
| DeepSeek | ❌ | ❌ | ❌ | ✅ | ✅ |
|
||||
| Бесплатно | 🟡 | ❌ | ✅ | ❌ | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## Вывод
|
||||
|
||||
Ниша существует и растёт. MUCAR с DeepSeek — сигнал что LLM-подход правильный.
|
||||
Наш козырь: **открытость + русский рынок + дешёвый ELM327**. Никто не сочетает эти три фактора.
|
||||
@@ -0,0 +1,47 @@
|
||||
# Заметки и находки
|
||||
|
||||
## 2026-05-25 — Исследование конкурентов
|
||||
|
||||
- Найдено 4 конкурента: DiagnostiX AI, OBDAI, Zero Touch, MUCAR MUAI
|
||||
- Русскоязычных нет, RuStore пустой
|
||||
- MUCAR уже использует DeepSeek → подтверждение правильности выбора LLM
|
||||
- Никто не делает открытый клиент (кроме Zero Touch, но там Flutter/Gemini)
|
||||
|
||||
## 2026-05-25 — Подтверждение гипотезы
|
||||
|
||||
DeepSeek дал полный подробный анализ по логам VCDS с тестового проезда.
|
||||
Лучше любого гугла. Гипотеза подтверждена.
|
||||
|
||||
## 2026-05-25 — Платформенные ограничения
|
||||
|
||||
- Chrome Android: Web Bluetooth API — только BLE. ELM327 использует Bluetooth Classic SPP → НЕСОВМЕСТИМЫ
|
||||
- Web Serial API — не поддерживается на Android вообще
|
||||
- Termux + Python + pyserial — теоретически возможно, но Bluetooth-доступ в Termux сложен
|
||||
- Вывод: нативное Android-приложение обязательно
|
||||
|
||||
## 2026-05-25 — ELM327 v1.5 (PIC18F25K80)
|
||||
|
||||
- Китайский клон, не оригинальный чип PIC18F2480
|
||||
- Протокол неполный, возможны глюки на高速 CAN
|
||||
- Держать в уме при тестировании
|
||||
|
||||
## 2026-05-25 — RuStore
|
||||
|
||||
- Бесплатная регистрация разработчика
|
||||
- Модерация 1-3 дня
|
||||
- Проверяет: вредоносный код, подозрительные permissions
|
||||
- Не проверяет: скрытые закладки в легальном API
|
||||
- Наши permissions (BLUETOOTH + INTERNET) — минимальны, вопросов не вызовут
|
||||
|
||||
## 2026-05-25 — Sideload (установка APK напрямую)
|
||||
|
||||
- Проверок нет совсем
|
||||
- Android показывает список permissions перед установкой
|
||||
- Пользователь видит только BLUETOOTH + INTERNET → доверие
|
||||
|
||||
## 2026-05-25 — Целевая аудитория
|
||||
|
||||
- Технически любопытный автовладелец с ELM327
|
||||
- Не профессионал, но и не «глубинарий» (это шутка)
|
||||
- Хочет понять проблему, а не просто получить код
|
||||
- Требования к ответам: честная уверенность, пояснения, предупреждения
|
||||
@@ -0,0 +1,34 @@
|
||||
# Дорожная карта
|
||||
|
||||
## 🔴 Фаза 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: как собрать самому, как использовать с чужим сервером
|
||||
Reference in New Issue
Block a user