docs: резюме сессии — v1.18.0-dev, авто-подбор, нерешённая проблема

This commit is contained in:
Repinoid
2026-06-14 16:13:52 +04:00
parent 2ea989e5a3
commit 7d23a874e0
+113
View File
@@ -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`. Был удалён старый мусорный профиль.