OBD Assist · Диагностика OBD2, ELM327 и AI-разбор




Android-приложение для диагностики автомобилей по протоколу OBD2: отдельные проекты на каждый автомобиль, ELM327 по Bluetooth, коды ошибок, параметры ЭБУ и анализ через bothub.
Возможности
- Проекты — отдельная карточка на каждый автомобиль: марка, модель, год, VIN, история DTC, параметров и AI-анализов.
- ELM327 по Bluetooth — RFCOMM, инициализация адаптера, автопротокол и перебор распространённых протоколов.
- Коды ошибок (DTC) — чтение командой
03, расшифровкаP/C/B/U, стирание командой04. - Параметры двигателя — прямая проверка распространённых PID без availability-запросов (обход ЭБУ, которые не отвечают на
01 00/01 20). - AI Assist — отправка данных проекта в bothub (OpenAI-совместимый API) или демо-ответ без ключа.
- Локальное хранение — Room: проекты, ошибки, параметры, тексты анализов.
- Демо-режим — тестовый проект со случайными DTC, параметрами и типичной неисправностью, без адаптера.
- Настройки — API-ключ bothub, модель, температура, лимиты и таймауты, тема, режим отладки, импорт/экспорт базы марок и моделей.
- Отчёты — текстовый экспорт состояния проекта и AI-анализа в UTF-8.
Требования
- Android 8.0 (API 26) или выше; сборка:
compileSdk/targetSdk34. - JDK 17.
- Android Studio с поддержкой Android Gradle Plugin 8.
- Bluetooth на устройстве.
- Адаптер ELM327 с Bluetooth (для живой диагностики). Для AI Assist — сеть и API-ключ bothub.
Установка и запуск
- Клонируйте репозиторий.
- Откройте проект в Android Studio.
- Синхронизируйте Gradle.
- Соберите debug-сборку и установите на устройство (эмулятор без Bluetooth для OBD2 не подойдёт).
Команды из корня проекта:
.\gradlew.bat assembleDebug
.\gradlew.bat test
Версия приложения: 1.0 (versionCode 1). Gradle Wrapper: 8.13. Kotlin Android plugin: 1.9.20. Compose Compiler plugin: 2.0.21.
Использование
Создание проекта
- На экране «Проекты» нажмите «+».
- Выберите марку и модель из списков либо включите «Ручной ввод».
- При необходимости укажите год и VIN.
- Нажмите «Сохранить».
Демо-режим
- На главном экране в верхней панели нажмите «Демо».
- Откроется тестовый проект со случайным автомобилем, DTC, параметрами и описанием неисправности.
- AI Assist можно проверить без адаптера и без API-ключа (будет демо-ответ).
Подключение к OBD2
- Вставьте ELM327 в диагностический разъём, включите зажигание, сопрягите адаптер в системных настройках Bluetooth (часто пароль
1234или0000). - Откройте проект, нажмите «Подключиться», выберите устройство.
- Дождитесь статуса «Подключено». «Отключиться» разрывает сессию.
- Для подробных логов инициализации ELM327 включите в настройках «Показывать логи подключения».
Чтение ошибок
- При статусе «Подключено» нажмите «Ошибки».
- Приложение отправит команду
03и покажет коды с описаниями. - Старые записи проекта заменяются новыми.
Стирание ошибок
- Нажмите «Стереть».
- В ЭБУ уходит команда
04. Успех — ответ44илиOK; локальные DTC проекта тогда очищаются.
Стирание не чинит неисправность, только очищает память кодов.
Чтение параметров
- Нажмите «Параметры».
- Приложение проверяет набор распространённых PID и сохраняет значения с единицами измерения.
Отчёт
- После чтения ошибок и/или параметров нажмите «Отчет».
- Сохраните текстовый файл: автомобиль, DTC, параметры, описание проблемы, кодировка UTF-8.
Описание неисправности
- Нажмите «Проблема».
- Введите симптомы и сохраните. Текст попадает в prompt AI Assist и в отчёт.
AI ассистент
- Нажмите «AI ассистент» → «Анализ».
- В bothub уходят данные автомобиля, DTC, параметры и описание проблемы.
- Результат сохраняется в истории проекта. В карточке анализа: машина, коды, параметры, проблема, затем текст модели. Кнопка «Экспорт» сохраняет этот разбор в файл.
Рекомендации модели — справочные. Приложение не заменяет профессиональную диагностику.
Настройки
Иконка шестерёнки на экране проектов:
- API-ключ bothub (хранится только на устройстве).
- Модель, температура, макс. токенов, таймауты подключения и чтения.
- Режим отладки — логи подключения к ЭБУ на экране проекта.
- База марок и моделей: экспорт/импорт текстового файла формата
Марка [модель1, модель2], объединение или замена, сброс к данным по умолчанию. - Тема: системная, светлая, тёмная (после смены процесс приложения перезапускается).
Структура проекта
OBDAssist/
├── app/src/main/java/com/obdassist/
│ ├── MainActivity.kt # точка входа, Bluetooth runtime, тема
│ ├── ai/ # AIService — bothub chat/completions
│ ├── data/ # Room, PreferencesManager, CarDatabase, демо-данные
│ ├── obd2/ # ELM327, DTC, PID
│ ├── repository/ # ProjectRepository
│ └── ui/ # экраны, ViewModel, навигация, тема
├── gradle/
├── doc/ # ARCHITECTURE, CHANGELOG, AI_RULES
├── build.gradle.kts
├── settings.gradle.kts
└── README.md
Слои и потоки данных — в doc/ARCHITECTURE.md.
Технологии
- Kotlin / Java 17 — код приложения и JVM-цель сборки.
- Android Gradle Plugin 8.13.2, Gradle 8.13 — сборка модуля
:app. - Jetpack Compose (BOM 2024.09.00), Material 3 — экраны без XML-layout.
- Navigation Compose — маршруты проектов, создания, детализации, настроек.
- Room 2.6.1 — локальная база
obd_assist_database. - Coroutines / StateFlow — Bluetooth I/O и состояние UI.
- OkHttp 4 / Gson / org.json — HTTP к bothub и JSON настроек/базы марок.
- SharedPreferences — ключ API, тема, параметры AI, пользовательская база марок.
- JUnit 4 / AndroidX Test / Espresso — каркас тестов.
В app/build.gradle.kts также подключены Retrofit 2 и converter-gson; текущий AIService ходит в API через OkHttp напрямую.
Разрешения
| Разрешение | Зачем |
| — | — |
| BLUETOOTH, BLUETOOTH_ADMIN | Android 11 и ниже, работа с адаптером (maxSdkVersion 30) |
| BLUETOOTH_CONNECT, BLUETOOTH_SCAN | Android 12+, runtime-запрос при старте |
| INTERNET | AI Assist |
| ACCESS_NETWORK_STATE | проверка сети |
Настройка AI Assist
- Получите API-ключ bothub.
- Откройте настройки приложения, вставьте ключ, нажмите «Сохранить API ключ». Ключ не хранится в исходниках.
Параметры по умолчанию:
- Base URL:
https://bothub.chat/api/v2/openai/v1 - Модель:
gpt-4.1 - Температура:
0.7 - Макс. токенов:
1200(в настройках 100–4000) - Макс. длина prompt:
5000символов - Таймаут подключения:
60с, чтения:90с
Без ключа показывается демо-ответ с базовой сводкой по проекту.
Лицензия
Проект для образовательных целей.
Поддержка
При проблемах создайте issue в репозитории проекта.
История изменений
История изменений OBD Assist ведется по категориям Added, Changed, Fixed и с техническими заметками о решениях проблем.
[Unreleased]
Changed
- H1 README:
OBD Assist · Диагностика OBD2, ELM327 и AI-разбор(шаблон названия для записи на сайте). README.mdприведён к полной структуре: возможности, требования, установка, сценарии по экранам, дерево, стек, разрешения, AI через настройки. Убраны заглушки Roadmap/скринов и инструкция прописывать ключ в исходниках.doc/ARCHITECTURE.md: дерево с пакетомcom.example.obdassist, фактический HTTP-клиент AI, формат базы марок, смена темы через перезапуск процесса, технический долг (двойнойinclude, неиспользуемый Retrofit, VIN без кнопки).doc/AI_RULES.md: README — полное лицо проекта, не краткая заглушка; API-ключ только через настройки.
Fixed
- Сценарии использования синхронизированы с кнопками экрана проекта: «Ошибки», «Стереть», «Параметры», «Отчет», «Проблема», «AI ассистент».
Technical Notes
- Старый
build_log.txtфиксировал ошибку сборки:FAILURE: Build failed with an exception. - Причина из лога:
A problem occurred configuring root project 'OBDAssist'. - Внутри ошибки:
Multiple build operations failed. Could not read workspace metadata from C:\Users\huskynet\.gradle\caches\8.13\transforms\...\metadata.bin. - Рекомендации Gradle из лога сохранены дословно по смыслу: запустить с
--stacktrace,--infoили--debug, использовать--scan, либо обратиться кhttps://help.gradle.org.
2025-12-30
Исходный файл: CHANGELOG_2025-12-30.md.
Added
- Добавлена информация о машине в детальном окне анализа AI. Теперь перед результатом AI анализа отображается:
1. Информация о машине: марка, модель, год, VIN (если указан).
2. Коды ошибок: список всех найденных ошибок с описаниями, количество ошибок.
3. Параметры OBD2: список всех считанных параметров со значениями, количество параметров.
4. Описание проблемы (если указано).
5. Разделитель (Divider).
6. AI Анализ — результат работы нейросети.
- Добавлено логирование для диагностики краша при подключении в
OBD2Service.ktиProjectDetailViewModel.kt. OBD2Service.ktтеперь логирует начало подключения к устройству (name + address), создание RFCOMM сокета, установку Bluetooth соединения, инициализацию потоков ввода/вывода, каждую команду инициализации ELM327 (ATZ,ATE0,ATL0,ATH0,ATSP0), успешное завершение или ошибку с полным стеком.ProjectDetailViewModel.ktтеперь логирует попытку подключения, успешное подключение и ошибку подключения с полным сообщением.
Changed
- В
ProjectDetailScreen.ktубран заголовок "Действия". - Кнопки расположены по две в ряд с новыми названиями:
— Ряд 1: "Ошибки" (было: "Читать ошибки"), "Стереть" (было: "Стереть ошибки").
— Ряд 2: "Параметры" (было: "Читать параметры"), "Отчет" (было: "Сохранить состояние").
— Ряд 3: "Проблема" (было: "Описать неисправность"), "AI ассистент" (было: "AI Assist").
- Используется компонент
Rowсweight(1f)для равномерного распределения кнопок. - Обновлен диалог AI в
ProjectDetailScreen.kt:
— Заголовок диалога: "AI ассистент" (было: "AI SCAN", ещё раньше: "AI Анализы").
— Кнопка анализа: "Анализ" (было: "Проанализировать").
— Кнопка закрытия: "Закрыть".
Fixed
- Исправление кодировки русского языка в
ProjectDetailViewModel.kt. - Кодировка UTF-8 уже была правильно настроена в методах:
— exportAnalysisToFile: content.toByteArray(Charsets.UTF_8).
— exportStateToFile: content.toByteArray(Charsets.UTF_8).
- Русские символы теперь корректно сохраняются в текстовые файлы.
Technical Notes
- Как использовать логи для диагностики:
1. Подключите устройство к компьютеру.
2. Откройте Android Studio -> Logcat.
3. Фильтруйте по тегу: OBD2Service или ProjectDetailViewModel.
4. При нажатии кнопки "Подключиться" вы увидите детальную последовательность действий.
5. В случае краша вы увидите точное место и причину ошибки.
- Возможная проблема: краш при подключении.
— Что проверить в логах: SecurityException -> не предоставлены Bluetooth разрешения, IOException -> проблемы с физическим подключением к адаптеру, NullPointerException -> проблема с устройством или сокетом.
— Решение: проверьте разрешения Bluetooth в AndroidManifest.xml, убедитесь, что OBD адаптер включен и сопряжен, попробуйте переподключить адаптер.
- Возможная проблема: русские символы отображаются как
?.
— Что проверить: убедитесь, что редактор поддерживает UTF-8, проверьте, что файл открыт с правильной кодировкой.
— Решение уже применено в коде (Charsets.UTF_8).
- Проверка UI:
1. Откройте проект диагностирования.
2. Проверьте, что кнопки расположены по две в ряд без заголовка.
3. Проверьте новые названия кнопок.
4. Нажмите кнопку "AI ассистент" -> проверьте, что диалог называется "AI ассистент".
5. Создайте анализ -> откройте его -> проверьте наличие всей информации о машине.
- Проверка подключения:
1. Откройте Android Studio -> Logcat.
2. Используйте фильтр: tag:OBD2Service OR tag:ProjectDetailViewModel.
3. Нажмите "Подключиться" в приложении.
4. Наблюдайте за логами: если подключение успешно, вы увидите все этапы инициализации; если краш, вы увидите точное место и причину ошибки.
- Проверка сохранения файлов:
1. Считайте параметры и ошибки.
2. Нажмите "Отчет".
3. Откройте файл в текстовом редакторе.
4. Проверьте, что русские символы отображаются корректно.



