# Архитектура elmAI > v0.28.0-dev, 29 мая 2026 ## Общая схема ``` 📱 Android (elmer-android) │ Bluetooth ▼ 🔌 ELM327 │ OBD-ответы ▼ 📱 Android (ScriptRunnerService) │ HTTPS POST /api/v1/session/upload ▼ 🌐 Сервер (5.172.178.213) ├── nginx :443 → gunicorn :8000 ├── obd/ — ELM327 протокол ├── brain/ — LLM-клиент ├── api/ — REST, БД, скрипты └── web/ — точка входа Flask, статика ``` ## Структура сервера ``` elmer/ ├── obd/ # Модуль 1: ELM327 протокол │ └── protocol.py # AndrOBD — стейт-машина (1:1 копия AndrOBD) │ # State, Rsp, AdaptiveTiming │ ├── brain/ # Модуль 2: LLM-взаимодействие │ ├── client.py # Diagnoser — HTTP к api.aillm.ru │ └── prompts.py # SYSTEM_PROMPT для диагностики │ ├── api/ # Модуль 3: REST API + БД │ ├── config.py # Загрузка config.yaml │ ├── db.py # SQLite (sessions, cars, dtc) │ ├── routes.py # Все эндпоинты (5 шт) │ ├── scripts.py # Сборка диагностических скриптов │ └── parser.py # Парсинг ответов ELM327 │ ├── web/ # Веб-интерфейс │ ├── app.py # Точка входа Flask │ ├── templates/index.html │ └── static/app-debug.apk │ ├── tools/ # Разработка │ ├── mock_elm327_v2.py # Мок ELM327 (TCP) │ └── test_androbd.py # Тесты стейт-машины │ ├── doc/ # Документация │ ├── architecture.md # Этот файл │ ├── roadmap.md │ └── session-*.md # Логи сессий │ ├── config.yaml # LLM API key, порты └── requirements.txt ``` ## Взаимодействие модулей ``` web/app.py └─ import api/routes.py ├─ import api/config.py → config.yaml ├─ import api/db.py → SQLite ├─ import api/scripts.py → сборка скриптов ├─ import api/parser.py → парсинг батча ├─ import brain/client.py → Diagnoser → api.aillm.ru └─ import brain/prompts.py → SYSTEM_PROMPT ``` Каждый модуль можно тестировать отдельно. Циклических зависимостей нет. ## API эндпоинты | Метод | Путь | Описание | Время | |---|---|---|---| | GET | /api/v1/ping | Проверка сервера | ~5мс | | GET | /api/v1/ping-llm | Проверка LLM | ~2с | | GET | /api/v1/script?mode= | Скрипт диагностики | ~50мс | | POST | /api/v1/session/upload | Загрузка батча + LLM | ~30-120с | | POST | /api/v1/chat | Вопрос к LLM | ~5-15с | ## Android (отдельный репо) ``` elmer-android/app/src/main/java/ru/elmer/client/ ├── ElmProtocol.kt # ELM327 стейт-машина ├── ObdDecoder.kt # Декодер PID/DTC/VIN ├── ServerClient.kt # HTTP к серверу (retry 3x) ├── ScriptEngine.kt # Движок скриптов ├── ScriptRunnerService.kt # Фоновая диагностика ├── SessionDb.kt # Локальная история ├── MainActivity.kt # UI ├── TestService.kt # (устарел) └── ElmForwardService.kt # (устарел) ``` Планируется рефакторинг в пакеты: `elm/`, `server/`, `script/`, `db/`, `ui/`, `test/`.