diff --git a/doc/session-resume-2026-06-14.md b/doc/session-resume-2026-06-14.md new file mode 100644 index 0000000..cf1da4e --- /dev/null +++ b/doc/session-resume-2026-06-14.md @@ -0,0 +1,113 @@ +# Резюме проекта 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`. Был удалён старый мусорный профиль.