Команды бота

    Редактирование файла

    Создать автоматизацию

    Создать правило автоотправки

    Переслать сообщение в...

    • Загрузка списка групп...

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

    example-a3.jpg

    ![Android](https://developer.android.com/)
    ![Kotlin](https://kotlinlang.org/)
    ![Jetpack Compose](https://developer.android.com/compose)

    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/targetSdk 34.
    • JDK 17.
    • Android Studio с поддержкой Android Gradle Plugin 8.
    • Bluetooth на устройстве.
    • Адаптер ELM327 с Bluetooth (для живой диагностики). Для AI Assist — сеть и API-ключ bothub.

    Установка и запуск

    1. Клонируйте репозиторий.
    2. Откройте проект в Android Studio.
    3. Синхронизируйте Gradle.
    4. Соберите 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.

    Использование

    Создание проекта

    1. На экране «Проекты» нажмите «+».
    2. Выберите марку и модель из списков либо включите «Ручной ввод».
    3. При необходимости укажите год и VIN.
    4. Нажмите «Сохранить».

    Демо-режим

    1. На главном экране в верхней панели нажмите «Демо».
    2. Откроется тестовый проект со случайным автомобилем, DTC, параметрами и описанием неисправности.
    3. AI Assist можно проверить без адаптера и без API-ключа (будет демо-ответ).

    Подключение к OBD2

    1. Вставьте ELM327 в диагностический разъём, включите зажигание, сопрягите адаптер в системных настройках Bluetooth (часто пароль 1234 или 0000).
    2. Откройте проект, нажмите «Подключиться», выберите устройство.
    3. Дождитесь статуса «Подключено». «Отключиться» разрывает сессию.
    4. Для подробных логов инициализации ELM327 включите в настройках «Показывать логи подключения».

    Чтение ошибок

    1. При статусе «Подключено» нажмите «Ошибки».
    2. Приложение отправит команду 03 и покажет коды с описаниями.
    3. Старые записи проекта заменяются новыми.

    Стирание ошибок

    1. Нажмите «Стереть».
    2. В ЭБУ уходит команда 04. Успех — ответ 44 или OK; локальные DTC проекта тогда очищаются.

    Стирание не чинит неисправность, только очищает память кодов.

    Чтение параметров

    1. Нажмите «Параметры».
    2. Приложение проверяет набор распространённых PID и сохраняет значения с единицами измерения.

    Отчёт

    1. После чтения ошибок и/или параметров нажмите «Отчет».
    2. Сохраните текстовый файл: автомобиль, DTC, параметры, описание проблемы, кодировка UTF-8.

    Описание неисправности

    1. Нажмите «Проблема».
    2. Введите симптомы и сохраните. Текст попадает в prompt AI Assist и в отчёт.

    AI ассистент

    1. Нажмите «AI ассистент» → «Анализ».
    2. В bothub уходят данные автомобиля, DTC, параметры и описание проблемы.
    3. Результат сохраняется в истории проекта. В карточке анализа: машина, коды, параметры, проблема, затем текст модели. Кнопка «Экспорт» сохраняет этот разбор в файл.

    Рекомендации модели — справочные. Приложение не заменяет профессиональную диагностику.

    Настройки

    Иконка шестерёнки на экране проектов:

    • 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

    1. Получите API-ключ bothub.
    2. Откройте настройки приложения, вставьте ключ, нажмите «Сохранить 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. Проверьте, что русские символы отображаются корректно.

    Edit Message

    Attachments:

    AI Assistant

    Enter your instruction to edit the text: