# Elmer — анализ и план (2026-05-25) ## Суть проекта Сервис анализа ошибок электроники автомобиля через ELM327 OBD2 + LLM. ## Железо - **Сканер:** ELM327 Bluetooth v1.5, чип PIC18F25K80 (китайский клон) - **Ноутбук разработчика:** с Bluetooth, будет соединяться с ELM327 напрямую для отладки ## Целевая аудитория - Технически любопытный автовладелец (не профессионал, но и не «глубинарий») - Уже имеет ELM327 — значит базовое понимание есть - Хочет понять проблему, а не просто получить код ошибки ## Ключевые требования к ответам - **Честная уверенность:** «С вероятностью ~80% проблема в X, потому что...» - **Пояснение логики:** почему именно этот вывод - **Предупреждения:** «Если НЕ помогло — тогда проверь Y» - **Никаких категоричных «меняй X»** без 100% уверенности - **Liability Protection:** нельзя чтобы пользователь сломал машину из-за неверного диагноза ## LLM - Рассматривается DeepSeek (дёшево через API) - Или другая простая/дешёвая модель - Нужен RAG/grounding на реальных repair manuals и TSB, чтобы минимизировать галлюцинации ## Компоненты системы 1. **Android-приложение** (в последнюю очередь) - Стабильная версия Android (не гоняться за новейшей) - Максимально простое: минимум кнопок - Русский язык - Bluetooth SPP → ELM327 2. **Сервер** (после отладки логики на ноутбуке) - Принимает данные от приложения - Формирует запросы к LLM - Итеративный цикл: запрос → ответ → может запросить ещё параметры или действия от пользователя - Отдаёт диагноз с пояснениями 3. **LLM-слой** - Промпт с контекстом автомобиля (VIN → марка/модель/двигатель) - RAG на базу знаний (ошибки, мануалы, TSB) - Итеративная диагностика: сервер может переспрашивать LLM ## Протокол диагностики (конечный автомат) Цикл: 1. Приложение считывает VIN → сервер 2. Приложение считывает коды ошибок → сервер 3. Сервер → LLM: первичный анализ 4. LLM может запросить: - Дополнительные PID'ы с ЭБУ (live data) - Действия от пользователя (прогазовать, проехать, считать на холодную и т.д.) 5. Повторять пока не будет достаточно данных для диагноза 6. Финальный ответ: диагноз + степень уверенности + пояснения + что делать ## План разработки (три фазы) ### Фаза 1: Ноутбук + ELM327 (СЕЙЧАС) - Python-скрипт: Bluetooth → ELM327 → читаем VIN, ошибки, PID'ы - Отправляем в LLM вручную — отлаживаем логику, промпты, цикл вопросов-ответов - Никакого сервера, никакого Android ### Фаза 2: Сервер - Flask/FastAPI — принимать данные, проксировать в LLM - База знаний / RAG - State machine диагностики ### Фаза 3: Android-приложение - Bluetooth SPP (Serial Port Profile) — есть нюансы на Android 12+ - Минималистичный UI - Отправка данных на сервер, отображение ответов ## Риски 1. **ELM327 v1.5 клон** — неполный протокол, глюки на高速 CAN 2. **PID'ы разные у разных марок** — нужна БД по производителям 3. **LLM галлюцинации** — только grounding/RAG спасёт 4. **Bluetooth SPP на Android 12+** — permissions, pairing ## Ресурсы - `python-OBD` — библиотека для работы с ELM327 (или свой serial-протокол) - `pyserial` уже установлен в системе - DeepSeek API (или OpenRouter как альтернатива) --- ## Структура проекта (создана 2026-05-25) ``` elmer/ ├── elmer/ # Python-пакет │ ├── __init__.py # версия 0.1.0 │ ├── config.py # загрузка config.yaml + подстановка ${ENV} │ ├── elm.py # ELM327: pyserial, VIN, DTC, PID │ ├── db.py # SQLite: cars, tokens, llm_messages, ecu_parameters, dtc_codes │ ├── prompts.py # SYSTEM_PROMPT + build_user_prompt() │ └── diagnose.py # DeepSeek API (OpenAI-совместимый) ├── config.yaml # настройки (BT-порт, API-ключ, PID'ы) ├── requirements.txt # pyserial, pyyaml, requests ├── run.py # главный вход: ELM → данные → LLM → печать + сохранение ├── idea.md # исходная задумка └── analysis.md # этот файл ``` ## Запуск (в салоне авто) ```bash # 1. Установить зависимости pip install -r requirements.txt # 2. Сопрячь ELM327 по Bluetooth bluetoothctl pair 11:22:33:44:55:66 # (в config.yaml прописан порт /dev/rfcomm0) # 3. Запустить DEEPSEEK_API_KEY=sk-... python run.py ``` Что произойдёт: 1. Подключится к ELM327 2. Прочитает VIN 3. Считает ошибки (stored mode 03 + pending mode 07) 4. Считает параметры (обороты, температура, скорость, дроссель, MAP, IAT, топливные тримы) 5. Отправит в DeepSeek → напечатает диагноз 6. Сохранит всё в `elmer.db` (SQLite) --- ## Десктопный UI (Web) Для тестирования на ноутбуке (не тыкать грязным пальцем в телефон): - `web/app.py` — Flask (порт 5005), один endpoint `/api/diagnose` (POST) - `web/templates/index.html` — одна кнопка, тёмная тема, результат - В будущем этот же код — прототип серверного API Запуск: ```bash DEEPSEEK_API_KEY=sk-... python web/app.py # Открыть http://localhost:5005 ``` ## Версии для пользователей (будущее) - **Android** — Kotlin/Java, Bluetooth SPP - **Windows** — тот же веб-интерфейс в WebView (или Electron, или просто браузер) - Общий серверный API между ними --- *Продолжить: тестировать в салоне авто с реальным ELM327.*