From afd4cce53af08d60ed245fecdeef5f477938c609 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Wed, 27 May 2026 10:13:01 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20+14=20=D1=82=D1=80=D0=B0=D0=B4=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D1=8B=D1=85=20OBD2=20Android=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2=20=E2=80=94=20?= =?UTF-8?q?AndrOBD=20=D0=BA=D0=BE=D1=80=D0=BE=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/elm-reference.md | 67 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/doc/elm-reference.md b/doc/elm-reference.md index f3763a1..9e82aa9 100644 --- a/doc/elm-reference.md +++ b/doc/elm-reference.md @@ -1,12 +1,14 @@ -# ELM327 Communication Patterns — анализ 5 отлаженных проектов +# ELM327 Communication Patterns — анализ 5+14 проектов > **Цель:** понять как РЕАЛЬНО работают проекты с ELM327, выбрать лучшие паттерны для Elmer. > **Дата:** 2026-05-27 -> **Источники:** исходный код 5 проектов (Java, Kotlin, Python, C) +> **Источники:** 5 LLM-проектов + 14 традиционных OBD2 Android-проектов --- -## Сводная таблица +## Часть 1: Проекты с LLM (ELM → LLM → диагноз) + +### Сводная таблица | | OBD-Droid | OBD2AI | Automotive-AI | obd2-mcp-server | Vehicle-Diag-Assist | |---|---|---|---|---|---| @@ -482,3 +484,62 @@ def calculate_obd_value(raw_response, formula): - [ ] Мульти-фрейм ISO-TP - [ ] DTC база (можно с obd2-mcp-server) - [ ] Экспоненциальный backoff для ретраев + +--- + +## Часть 2: Традиционные OBD2 Android-проекты (БЕЗ LLM) + +> Только ELM327 ↔ Android Bluetooth SPP. Именно они интересны для слоя коммуникации — оттестированы годами на тысячах машин. + +### Топ-10 батл-тестед проектов + +| # | Проект | URL | Язык | Создатель | Обновлён | ⭐ | DTC | Live | VIN | Примечания | +|---|--------|-----|------|-----------|----------|-------|-----|------|-----|-----------| +| 1 | **AndrOBD** | [fr3ts0n/AndrOBD](https://github.com/fr3ts0n/AndrOBD) | Java | Sepp Seidel | Апр 2025 | 1993 | ✅ | ✅ | ✅ | **Король.** 10+ лет, MQTT, графики, плагины, многоязычный | +| 2 | **AndroidOBD** | [barnhill/AndroidOBD](https://github.com/barnhill/AndroidOBD) | Kotlin | Brian Barnhill | Ноя 2025 | 79 | ✅ | ✅ | ✅ | **Библиотека.** Хороший API для интеграции | +| 3 | **Java OBD** | [Tomiwa-Ot/obd](https://github.com/Tomiwa-Ot/obd) | Java | Tomiwa O. | Март 2025 | 30 | ✅ | ✅ | ✓ | **Библиотека.** SPP + USB. Опубликована на JitPack. Async | +| 4 | **ObdGraphs** | [tzebrowski/ObdGraphs](https://github.com/tzebrowski/ObdGraphs) | Kotlin | Tomek Żebrowski | Апр 2025 | 53 | ✅ | ✅ | ✅ | Графики в реальном времени. Проф. дизайн | +| 5 | **CarScanApp** | [midnightyoff/CarScanApp](https://github.com/midnightyoff/CarScanApp) | Kotlin | midnightyoff | Окт 2025 | 2 | ✅ | ✅ | ✅ | **Свежий.** Compose, DTC read/clear, maintenance log | +| 6 | **Elm327** | [takyonxxx/Elm327](https://github.com/takyonxxx/Elm327) | Java | Türkay Biliyor | Окт 2023 | 48 | ✅ | ✅ | ✅ | В Play Store. WiFi + BT. 22 форка | +| 7 | **CarBusInterface** | [theksmith/CarBusInterface](https://github.com/theksmith/CarBusInterface) | Java | Kristoffer Smith | Янв 2016 | 291 | ✅ | ✅ | ✅ | Старый, боевой. 77 форков. Raw command interface | +| 8 | **BT OBD-II Diag Tool** | [fussek/Bluetooth-OBD-II-Diagnostic-Tool](https://github.com/fussek/Bluetooth-OBD-II-Diagnostic-Tool) | Java | Sebastian Fussek | Сент 2022 | 21 | ✅ | ✅ | ✅ | Bachelor thesis. Хорошая документация + расчёты PID | +| 9 | **obd-scanner-android** | [ETSoftwareStudio/obd-scanner-android](https://github.com/ETSoftwareStudio/obd-scanner-android) | Kotlin | ETSoftware | Апр 2025 | 2 | ✅ | ✅ | ✓ | Jetpack Compose + Hilt. Образец архитектуры | +| 10 | **KWP Logger** | [bri3d/kwp-android-logger](https://github.com/bri3d/kwp-android-logger) | Java | Brian Ledbetter | Фев 2016 | 28 | ✅ | ✅ | ✓ | **KWP2000 для VW/Audi.** Специалист по протоколам | + +### Что между ними общего (подтверждено всеми 14 проектами) + +**Bluetooth SPP:** +```java +UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); +BluetoothSocket socket = device.createRfcommSocketToServiceRecord(SPP_UUID); +socket.connect(); +``` + +**Инициализация ELM327 (единый стандарт):** +``` +ATZ → сброс +ATE0 → эхо выкл +ATL0 → line feeds выкл +ATS0 → пробелы выкл (или ATS1 — с пробелами) +ATH0/1 → заголовки CAN +ATSP0 → авто-протокол +``` + +**Отправка команд (единый стандарт):** +```java +outputStream.write((cmd + "\r").getBytes()); +outputStream.flush(); +``` + +**Чтение ответов — два лагеря:** +- **Лагерь 1 (AndrOBD, CarBusInterface):** побайтово, по 1мс +- **Лагерь 2 (AndroidOBD, Elm327):** `BufferedReader.readLine()` + +### Кого изучать в первую очередь для Elmer + +| Для чего | Проект | Почему | +|----------|--------|--------| +| **BT ↔ ELM слой** | AndrOBD + CarBusInterface | 10 лет отладки, все краевые случаи | +| **Kotlin-интеграция** | AndroidOBD + CarScanApp | Чистый API, современный код | +| **PID/DTC парсинг** | AndrOBD | Все формулы, все режимы | +| **KWP2000 (VW)** | KWP Logger | Если Phaeton на старом протоколе |