doc: competitors, architecture, roadmap, research notes

This commit is contained in:
“Naeel”
2026-05-25 08:11:52 +04:00
parent 513428ed65
commit 5131e41ae1
4 changed files with 238 additions and 0 deletions
+88
View File
@@ -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 — базовая проверка на вредоносный код
+69
View File
@@ -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**. Никто не сочетает эти три фактора.
+47
View File
@@ -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
- Не профессионал, но и не «глубинарий» (это шутка)
- Хочет понять проблему, а не просто получить код
- Требования к ответам: честная уверенность, пояснения, предупреждения
+34
View File
@@ -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: как собрать самому, как использовать с чужим сервером