Files
elmer/doc/session-resume-2026-06-14.md
T

114 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Резюме проекта 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`. Был удалён старый мусорный профиль.