# Резюме проекта elmAI — 14 июня 2026 ## Текущая версия: v1.18.0-dev ## Архитектура **Сервер (Python/Flask):** `gitea.services.ngcloud.ru/Nail/elmer`, ветка `bugfix-2026-06-07` - Хост: `obdai.ru` (5.172.178.213), доступ по SSH: `ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213` - Репо на сервере: `/opt/elmer`, сервис `elmer` (gunicorn), nginx прокси **Android (Kotlin):** `github.com/Repinoid/elmer-android`, ветка `bugfix-2026-06-07` - APK собирается на сервере: `export ANDROID_SDK_ROOT=$HOME/android-sdk && cd /opt/elmer/android && ./gradlew clean assembleDebug` - APK на сайте: `web/static/app-debug.apk` → `https://obdai.ru/elmer.apk` ## Что работает ✅ 1. **Статическая диагностика** — одиночные PID (0104-011F), DTC, VIN — ИДЕАЛЬНО 2. **Speed-test** — замер задержек RPM/MAF/STFT при клике на 🔵 ELM (если нет профиля) 3. **Серверный тестовый скрипт** — `GET /api/v1/script?mode=test` 4. **Авто-подбор таймингов** — `POST /api/v1/test/next` — сервер получает результаты, увеличивает wait_ms если ошибок >20% ## Что НЕ работает ❌ 1. **Динамический тест (СТАРТ/СТОП)** — ELM327 v1.5 замолкает после первых 1-2 команд. Статика работает, динамика нет. Причина не найдена. ## Ключевые файлы ### Сервер | Файл | Что | |------|-----| | `api/routes.py` | `?mode=test`, `POST /api/v1/test/next`, авто-подбор | | `api/scripts.py` | `build_test_script(wait_ms, pids, repeat)` | | `api/db.py` | `device_profiles` таблица с `response_time_ms` | | `api/ping.py` | ping/ping-llm эндпоинты | ### Android | Файл | Что | |------|-----| | `elm/ElmProtocol.kt` | Стейт-машина AndrOBD. `MAX_RETRIES=3`, `state=ERROR` убран | | `elm/ElmChecker.kt` | checkDevice, checkEcu, speed-test, quickCheck | | `script/DynamicCollector.kt` | Оригинальный DynamicCollector (не используется сейчас) | | `script/ScriptEngine.kt` | Выполнение скриптов с сервера, поддержка `wait` | | `server/ServerClient.kt` | `downloadTestScript()`, `postTestNext()` | | `ui/MainActivity.kt` | `startDynamicRecording()` — авто-подбор с сервера | ## Логика авто-подбора (v1.17+) ``` Пользователь: СТАРТ ↓ Статика 9 PID (как обычно) ↓ Цикл 1: GET /api/v1/script?mode=test → wait=2000ms, 2 PID (010C,0106), 8 повторов ↓ выполняет ↓ POST /api/v1/test/next {run:0, results:[...]} ↓ ответ: {done:false, message:"50% ошибок — увеличиваю до 2500ms"} ↓ Цикл 2: wait=2500ms → выполняет → POST → ответ ↓ ... пока done:true или run≥5 ``` ## Деплой ### Только сервер (без APK): ```bash cd /home/naeel/elmer git add -A && git commit -m "..." && git push origin bugfix-2026-06-07 ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 'cd /opt/elmer && git pull origin bugfix-2026-06-07 && sudo systemctl restart elmer' ``` ### APK + сервер: ```bash # Бамп версии в android/app/build.gradle.kts и web/templates/index.html # Затем: cd /home/naeel/elmer/android git add -A && git commit -m "..." && git push origin bugfix-2026-06-07 cd /home/naeel/elmer git add -A && git commit -m "bump vX.Y.Z-dev" && git push origin bugfix-2026-06-07 cd /home/naeel/elmer tar czf /tmp/android-src.tar.gz --exclude='.git' --exclude='build' --exclude='.gradle' android/ scp -i ~/.ssh/naeel_vm_id_ed25519 /tmp/android-src.tar.gz naeel@5.172.178.213:/tmp/ ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 '\ cd /opt/elmer && git pull origin bugfix-2026-06-07 && \ export ANDROID_SDK_ROOT=$HOME/android-sdk && export ANDROID_HOME=$ANDROID_SDK_ROOT && \ rm -rf android && tar xzf /tmp/android-src.tar.gz -C /opt/elmer/ && \ cd android && ./gradlew clean assembleDebug && \ cp app/build/outputs/apk/debug/app-debug.apk /opt/elmer/web/static/' ``` ## Нерешённая проблема ELM327 v1.5 замолкает при последовательных OBD-командах. Статика (одиночные) — ок. Динамика (подряд) — пустые ответы. Уже пробовали: - Разные паузы (250ms → 4000ms) — не помогает - ATWS перед динамикой — делает хуже - Убирали/возвращали drainInput() — v1.9 без drain хуже - Retry в exec() — оригинальный AndrOBD код не помогает - Разное количество PID — не помогает - DynamicCollector → серверный скрипт — не помогает Текущий авто-подбор должен найти рабочий интервал, но если даже 4000ms не помогает — проблема глубже таймингов. ## Конфигурация авто-подбора (api/routes.py) - Старт: 2000ms - Шаг: +500ms - Макс: 5 циклов - PIDs: 010C (RPM), 0106 (STFT) - Повторов: 6 ## Профиль ELM Таблица `device_profiles` в `elmer.db`. MAC: `AA:BB:CC:11:22:33`. Был удалён старый мусорный профиль.