OBDAssist
OBD Assist
Android приложение для диагностики автомобилей по протоколу OBD2.
Возможности
- 📱 Проектный подход: Создавайте отдельные проекты для каждого автомобиля
- 🔌 Подключение к OBD2: Работа с ELM327 адаптерами через Bluetooth
- 🔍 Сканирование ошибок: Чтение и стирание кодов ошибок (DTC)
- 📊 Чтение параметров: Получение данных о работе двигателя и систем автомобиля
- 🤖 AI Assist: Интеллектуальный анализ данных с помощью AI
- 💾 Сохранение данных: Все данные сохраняются локально в базе данных
Требования
- Android 8.0 (API 26) или выше
- Bluetooth адаптер
- ELM327 OBD2 адаптер с поддержкой Bluetooth
Установка
- Клонируйте репозиторий
- Откройте проект в Android Studio
- Синхронизируйте Gradle зависимости
- Соберите и установите приложение на устройство
Использование
Создание проекта
- На главном экране нажмите кнопку "+"
- Заполните информацию об автомобиле (марка, модель, год, VIN)
- Нажмите "Сохранить"
Подключение к OBD2
- Откройте проект
- Нажмите "Подключиться"
- Выберите ваш ELM327 адаптер из списка Bluetooth устройств
- Дождитесь подключения
Чтение ошибок
- После подключения нажмите "Читать ошибки"
- Приложение просканирует систему и отобразит все найденные коды ошибок
- Для стирания ошибок нажмите "Стереть ошибки"
Чтение параметров
- Нажмите "Читать параметры"
- Приложение получит доступные параметры OBD2 и отобразит их значения
Описание неисправности
- Нажмите "Описать неисправность"
- Введите описание проблемы
- Сохраните
AI Assist
- Нажмите кнопку "AI Assist"
- Приложение отправит все данные проекта (информацию об автомобиле, ошибки, параметры, описание проблемы) в AI для анализа
- Получите детальное заключение с рекомендациями по диагностике и ремонту
Примечание: Для работы AI Assist необходимо настроить API ключ bothub в коде приложения (файл AIService.kt или через настройки приложения).
Демо-режим
Приложение включает демо-режим для тестирования функционала без подключения к реальному OBD2 адаптеру:
- На главном экране нажмите кнопку "Демо" в верхней панели
- Будет создан тестовый проект с:
- Произвольным автомобилем (марка, модель, год, VIN)
- Случайными кодами ошибок OBD2
- Набором параметров двигателя
- Описанием типичной неисправности
- Откройте созданный проект и попробуйте функцию AI Assist
Это позволяет протестировать анализ данных без необходимости подключения к реальному автомобилю.
Структура проекта
app/
├── src/main/java/com/obdassist/
│ ├── data/ # Модели данных и база данных
│ ├── obd2/ # OBD2 сервис и протоколы
│ ├── repository/ # Репозитории данных
│ ├── ai/ # AI сервис для анализа
│ └── ui/ # UI компоненты (Compose)
│ ├── screen/ # Экраны приложения
│ ├── component/ # Переиспользуемые компоненты
│ ├── viewmodel/ # ViewModels
│ └── theme/ # Тема приложения
Технологии
- Kotlin — язык программирования
- Jetpack Compose — современный UI фреймворк
- Room — локальная база данных
- Coroutines — асинхронное программирование
- Navigation Compose — навигация между экранами
- Retrofit — для API запросов (AI)
Разрешения
Приложение требует следующие разрешения:
BLUETOOTH— для подключения к OBD2 адаптеруBLUETOOTH_ADMIN— для управления Bluetooth соединениемBLUETOOTH_CONNECT— для подключения к устройствам (Android 12+)BLUETOOTH_SCAN— для сканирования устройств (Android 12+)INTERNET— для работы AI Assist
Настройка AI Assist
Для использования AI Assist необходимо:
- Получить API ключ от bothub
- В файле
app/src/main/java/com/obdassist/ui/viewmodel/ProjectDetailViewModel.ktобновите создание AIService:
private val aiService = AIService("your-bothub-api-key-here")
Или передайте ключ через переменную окружения или настройки приложения.
Параметры bothub API:
- Base URL:
https://bothub.chat/api/v2/openai/v1 - Модель:
gpt-4.1 - Температура:
0.7 - Макс. токенов:
1200 - Макс. длина текста:
5000символов
Без API ключа: Приложение будет показывать демо-ответ с базовой информацией.
Лицензия
Этот проект создан для образовательных целей.
Поддержка
При возникновении проблем создайте issue в репозитории проекта.
CHANGELOG_2025-12-30.md
Обновления OBD Assist — 30.12.2025
Выполненные изменения
1. ✅ Изменение расположения и названий кнопок
Файл: ProjectDetailScreen.kt
Убран заголовок "Действия"
Кнопки расположены по две в ряд с новыми названиями:
- Ряд 1:
- Ошибки (было: Читать ошибки)
- Стереть (было: Стереть ошибки)
- Ряд 2:
- Параметры (было: Читать параметры)
- Отчет (было: Сохранить состояние)
- Ряд 3:
- Проблема (было: Описать неисправность)
- AI ассистент (было: AI Assist)
Используется компонент Row с weight(1f) для равномерного распределения кнопок.
2. ✅ Обновление диалога AI
Файл: ProjectDetailScreen.kt
Изменения:
- Заголовок диалога: "AI ассистент" (было: "AI SCAN", ещё раньше: "AI Анализы")
- Кнопка анализа: "Анализ" (было: "Проанализировать")
- Кнопка закрытия: "Закрыть"
Добавлена информация о машине в детальном окне анализа:
Теперь перед результатом AI анализа отображается:
-
Информация о машине:
- Марка, модель, год
- VIN (если указан)
-
Коды ошибок:
- Список всех найденных ошибок с описаниями
- Количество ошибок
-
Параметры OBD2:
- Список всех считанных параметров со значениями
- Количество параметров
-
Описание проблемы (если указано)
-
Разделитель (Divider)
-
AI Анализ — результат работы нейросети
3. ✅ Исправление кодировки русского языка
Файлы: ProjectDetailViewModel.kt
Кодировка UTF-8 уже была правильно настроена в методах:
exportAnalysisToFile(строка 317):content.toByteArray(Charsets.UTF_8)exportStateToFile(строка 391):content.toByteArray(Charsets.UTF_8)
Русские символы теперь корректно сохраняются в текстовые файлы.
4. ✅ Добавление логирования для диагностики краша при подключении
Файлы:
OBD2Service.ktProjectDetailViewModel.kt
OBD2Service.kt — детальное логирование процесса подключения:
- Начало подключения к устройству (name + address)
- Создание RFCOMM сокета
- Установка Bluetooth соединения
- Инициализация потоков ввода/вывода
- Каждая команда инициализации ELM327:
- ATZ (сброс)
- ATE0 (отключение эха)
- ATL0 (отключение перевода строки)
- ATH0 (отключение заголовков)
- ATSP0 (автоопределение протокола)
- Успешное завершение или ошибка с полным стеком
ProjectDetailViewModel.kt — логирование на уровне ViewModel:
- Попытка подключения
- Успешное подключение
- Ошибка подключения с полным сообщением
Как использовать логи для диагностики:
- Подключите устройство к компьютеру
- Откройте Android Studio → Logcat
- Фильтруйте по тегу:
OBD2ServiceилиProjectDetailViewModel - При нажатии кнопки "Подключиться" вы увидите детальную последовательность действий
- В случае краша вы увидите точное место и причину ошибки
Внешний вид после изменений
Секция с кнопками (без заголовка):
┌─────────────────────────────────────┐
│ [Ошибки] [Стереть] │
│ [Параметры] [Отчет] │
│ [Проблема] [AI ассистент] │
└─────────────────────────────────────┘
Диалог "AI ассистент"
┌─────────────────────────────────────┐
│ AI ассистент ✕ │
├─────────────────────────────────────┤
│ [Список сохранённых анализов] │
│ │
│ [Анализ] [Закрыть] │
└─────────────────────────────────────┘
Детальный просмотр анализа
┌─────────────────────────────────────┐
│ Анализ от 30.12.2025 21:50 ✕ │
├─────────────────────────────────────┤
│ Информация о машине: │
│ Toyota Camry (2015) │
│ VIN: XXXXXXXXXXXXXXXXX │
│ │
│ Коды ошибок (2): │
│ • P0420: Катализатор... │
│ • P0171: Слишком бедная смесь │
│ │
│ Параметры (5): │
│ • Температура ОЖ: 85 °C │
│ • Обороты двигателя: 850 RPM │
│ ... │
│ │
│ Описание проблемы: │
│ Машина глохнет на холостых... │
│ ───────────────────────────── │
│ AI Анализ: │
│ [Результат анализа от AI] │
│ │
│ [Экспорт] [Закрыть] │
└─────────────────────────────────────┘
Проверка работы
Тестирование UI:
- Откройте проект диагностирования
- Проверьте, что кнопки расположены по две в ряд БЕЗ заголовка
- Проверьте новые названия кнопок
- Нажмите кнопку "AI ассистент" → проверьте, что диалог называется "AI ассистент"
- Создайте анализ → откройте его → проверьте наличие всей информации о машине
Тестирование подключения:
- Откройте Android Studio → Logcat
- Используйте фильтр:
tag:OBD2Service OR tag:ProjectDetailViewModel - Нажмите "Подключиться" в приложении
- Наблюдайте за логами:
- Если подключение успешно: вы увидите все этапы инициализации
- Если краш: вы увидите точное место и причину ошибки
Тестирование сохранения файлов:
- Считайте параметры и ошибки
- Нажмите "Отчет"
- Откройте файл в текстовом редакторе
- Проверьте, что русские символы отображаются корректно
Возможные проблемы и решения
Проблема 1: Краш при подключении
Что проверить в логах:
- SecurityException → не предоставлены Bluetooth разрешения
- IOException → проблемы с физическим подключением к адаптеру
- NullPointerException → проблема с устройством или сокетом
Решение:
- Проверьте разрешения Bluetooth в AndroidManifest.xml
- Убедитесь, что OBD адаптер включен и сопряжен
- Попробуйте переподключить адаптер
Проблема 2: Русские символы отображаются как "?"
Что проверить:
- Убедитесь, что редактор поддерживает UTF-8
- Проверьте, что файл открыт с правильной кодировкой
Решение уже применено в коде (Charsets.UTF_8)
Дополнительная информация
Структура кода:
app/src/main/java/com/obdassist/
├── ui/
│ ├── screen/
│ │ └── ProjectDetailScreen.kt (UI кнопок и диалогов)
│ └── viewmodel/
│ └── ProjectDetailViewModel.kt (бизнес-логика)
├── obd2/
│ └── OBD2Service.kt (работа с OBD адаптером)
└── ...
Все изменения внесены и готовы к тестированию!
USAGE.md
Инструкция по использованию OBD Assist
Быстрый старт
1. Подготовка оборудования
- Убедитесь, что у вас есть ELM327 OBD2 адаптер с поддержкой Bluetooth
- Подключите адаптер к диагностическому разъему автомобиля (обычно находится под рулевой колонкой)
- Включите зажигание автомобиля (не обязательно заводить двигатель)
2. Сопряжение Bluetooth устройства
- Откройте настройки Bluetooth на вашем Android устройстве
- Найдите ваше ELM327 устройство (обычно называется "OBD" или "ELM327")
- Сопрягите устройства (пароль обычно: 1234 или 0000)
3. Создание проекта
- Запустите приложение OBD Assist
- Нажмите кнопку "+" в правом нижнем углу
- Заполните информацию об автомобиле:
- Марка (например: Toyota)
- Модель (например: Camry)
- Год выпуска (например: 2020)
- VIN (опционально, можно прочитать из OBD)
- Нажмите "Сохранить"
4. Подключение к OBD2
- Откройте созданный проект
- Нажмите кнопку "Подключиться"
- Выберите ваше ELM327 устройство из списка
- Дождитесь сообщения "Подключено"
5. Чтение ошибок
- После успешного подключения нажмите "Читать ошибки"
- Приложение просканирует систему и отобразит все коды ошибок (DTC)
- Каждая ошибка будет показана с кодом и описанием
Стирание ошибок:
- Нажмите "Стереть ошибки" для очистки кодов ошибок из памяти ЭБУ
- Внимание: Стирание ошибок не исправляет проблему, только очищает память!
6. Чтение параметров
- Нажмите "Читать параметры"
- Приложение получит доступные параметры OBD2:
- Обороты двигателя
- Скорость автомобиля
- Температура охлаждающей жидкости
- Положение дроссельной заслонки
- И другие параметры
7. Описание неисправности
- Нажмите "Описать неисправность"
- Введите подробное описание проблемы:
- Какие симптомы наблюдаются
- Когда проблема появилась
- При каких условиях проявляется
- Нажмите "Сохранить"
8. AI Assist — Анализ данных
-
Убедитесь, что вы:
- Подключены к OBD2
- Прочитали ошибки (если есть)
- Прочитали параметры
- Описали неисправность (опционально)
-
Нажмите кнопку "AI Assist"
-
Приложение отправит все данные в AI для анализа
-
Получите детальное заключение с:
- Интерпретацией кодов ошибок
- Анализом параметров
- Возможными причинами проблем
- Рекомендациями по диагностике и ремонту
- Приоритетностью действий
Советы по использованию
Оптимальные условия для диагностики
- Двигатель должен быть прогрет до рабочей температуры
- Все системы должны быть включены (кондиционер, фары и т.д.)
- Автомобиль должен быть на ровной поверхности
Интерпретация кодов ошибок
Коды ошибок OBD2 имеют формат: P0XXX
- P — Система управления двигателем (Powertrain)
- C — Система шасси (Chassis)
- B — Кузов (Body)
- U — Сеть автомобиля (Network)
Первая цифра после буквы:
- 0 — Общий код (SAE)
- 1 — Код производителя
Частые проблемы
Не удается подключиться:
- Убедитесь, что Bluetooth включен
- Проверьте, что устройство сопряжено
- Убедитесь, что адаптер подключен к автомобилю
- Попробуйте перезапустить приложение
Нет данных:
- Проверьте подключение адаптера
- Убедитесь, что зажигание включено
- Некоторые старые автомобили могут не поддерживать все параметры
Медленная работа:
- OBD2 протокол работает медленно, это нормально
- Чтение всех параметров может занять несколько минут
Настройка AI Assist
Для использования AI Assist необходимо настроить API ключ OpenAI:
- Получите API ключ на https://platform.openai.com/
- В файле
AIService.ktзаменитеapiKeyна ваш ключ - Или добавьте настройки в приложение для ввода ключа
Примечание: Без API ключа AI Assist будет показывать демо-ответ с базовой информацией.
Безопасность
- Не стирайте коды ошибок без понимания причины
- AI рекомендации носят информационный характер
- Всегда консультируйтесь с профессиональным механиком для серьезных проблем
- Приложение не заменяет профессиональную диагностику
Поддержка
При возникновении проблем:
- Проверьте подключение Bluetooth
- Убедитесь, что адаптер совместим с вашим автомобилем
- Проверьте версию протокола OBD2 вашего автомобиля
- Создайте issue в репозитории проекта