diff --git a/resume.txt b/resume.txt index 2126b28..b50d30a 100644 --- a/resume.txt +++ b/resume.txt @@ -1,12 +1,100 @@ -## 4. Контекст проекта (РЕЗЮМЕ для нового чата) +# Резюме elmAI — для нового чата -### Что это -elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327. +> Создано: 2026-07-10 | Предыдущий чат: relay-отладка -### Текущая версия - - -**v0.77.0-dev** (APK: https://obdai.ru/elmer.apk) +## Проект + +elmAI — OBD2-диагностика через ELM327 + LLM (DeepSeek). +Два репо: `elmer/` (gitea, сервер) и `elmer/android/` (github, Android). + +## Версии + +| Компонент | Версия | +|-----------|--------| +| Основной APK (app) | v0.42.0-dev | +| Raw-реле APK (raw) | v0.4.0-dev | + +## Два режима + +1. **app/** — прямая диагностика: телефон→ELM→скрипт→батч→сервер→LLM +2. **raw/** — ретранслятор: Copilot→сервер→телефон→ELM→ответ. HTTP-поллинг. + +## Raw-реле (raw/) + +``` +Copilot → POST /cmd → очередь SQLite → GET /cmd (телефон) → sendCommand() → ELM + ↓ +Copilot ← GET /response?device_id=X&seq=N ← POST /response (телефон) ← ответ +``` + +**Ключевые файлы:** +- `ElmProtocol.kt` — 1:1 с `app/.../ElmProtocol.kt` (AndrOBD: ATSP0→ATAT1→ATST→ATS0→ATL0→ATE0) +- `ElmActor.kt` — single-thread executor +- `RawRelayService.kt` — foreground-сервис: BT→init→поллинг +- `RelayClient.kt` — HTTP к `/api/v1/elm/raw/*` + +**handle()**: BUS_ERROR→ATPC+ATSP0, ERROR→ATWS, STOPPED→только state. MAX_RETRIES=3. + +## Результаты тестов (клоны v1.5) + +- Клон #1: 12/12 (100% первые 12), потом 13/16 (81%) +- Клон #2: 13/18 (72%) +- Закономерность: деградация после 10-12 команд +- Двигатель заглушен: PID не работают (STOPPED) +- RPM: 2688–2807, темп: 84–88°C, дроссель: 0–1.5% — данные верны + +## Сервер (obdai.ru, 5.172.178.213) + +- nginx:443 → gunicorn:8000 (4 воркера) +- Flask: `web/app.py`, blueprints: routes, dtc, ping, raw_elm +- SQLite: `command_queue` (raw), `sessions` (app) +- `/api/v1/elm/raw/*`: hello, cmd×2, response×2, status +- **device_id обязателен** в `/response` +- **Flask использует** `/opt/elmer/templates/index.html` (не web/templates) + +## 12 главных провалов (подробно: `doc/failures-journal.md`) + +1. Не скопировал рабочий `app/ElmProtocol.kt` — писал с нуля +2. Доверял Opus вместо проверки AndrOBD +3. ATST96 убивает клон +4. ATI в init ломает порядок +5. drainInput() в write() — буферный сдвиг +6. Freeze detection через ATRV +7. AT-команды в handle() +8. Recovery ATSP0 в relayLoop +9. Дренаж 0100 после init +10. Тест без device_id +11. Версия сайта не обновлялась +12. APK не долетел до телефона + +## Правила (`.github/copilot-instructions.md`) + +1. НИЧЕГО не делать без прямого указания +2. На вопросы — только отвечать +3. Коммит + push после каждой правки +4. При деплое — bump версии в build.gradle.kts +5. Формат: fix/feat/refactor/bump/docs +6. ELM327 — только как AndrOBD, без самодеятельности +7. Рассуждение ≠ команда + +## Деплой raw APK + +```bash +cd android +sed -i 's/appVersionCode = XX/appVersionCode = YY/' raw/build.gradle.kts +sed -i 's/X.Y.Z-dev/X.Y+1.Z-dev/' raw/build.gradle.kts +git add -A && git commit -m "bump vX.Y+1.Z-dev" && git push origin opus-fixes +scp raw/build.gradle.kts raw/src/.../*.kt obdai.ru:/opt/elmer/android/raw/ +ssh obdai.ru './gradlew :raw:assembleDebug && cp ...apk /opt/elmer/web/static/elm-raw-v022.apk' +# Обновить версию в /opt/elmer/templates/index.html и /opt/elmer/web/templates/index.html +``` + +## Ключевые документы + +- `doc/failures-journal.md` — 12 провалов +- `doc/architecture.md` — полная архитектура +- `doc/diagnostic-logic.md` — режимы диагностики +- `STRUCTURE.md` — все файлы и папки ### Репозитории - Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка **dynamic-tests**)