93 lines
4.5 KiB
Plaintext
93 lines
4.5 KiB
Plaintext
## 4. Контекст проекта (РЕЗЮМЕ для нового чата)
|
|
|
|
### Что это
|
|
elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327.
|
|
|
|
### Текущая версия
|
|
<!-- !!! АКТУАЛЬНАЯ ВЕРСИЯ !!! -->
|
|
<!-- Перед деплоем bump в android/app/build.gradle.kts, index.html (2 места), CHANGELOG.md, resume.txt, doc/architecture.md -->
|
|
**v0.59.0-dev** (APK: https://obdai.ru/elmer.apk)
|
|
|
|
### Репозитории
|
|
- Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка **dynamic-tests**)
|
|
- Android: https://github.com/Repinoid/elmer-android (ветка **dynamic-tests**)
|
|
- Сервер живёт на 5.172.178.213 (SSH: naeel@5.172.178.213, ключ ~/.ssh/naeel_vm_id_ed25519)
|
|
|
|
### Деплой (localhost → сервер)
|
|
```bash
|
|
# 1. bump версии в android/app/build.gradle.kts на локальной машине!
|
|
# 2. закоммитить + запушить (dynamic-tests!)
|
|
cd /home/naeel/elmer && git add -A && git commit -m "..." && git push origin dynamic-tests
|
|
|
|
# 3. залить android-исходники на сервер
|
|
|
|
# 3. залить android-исходники на сервер
|
|
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/
|
|
|
|
# 4. на сервере: обновить сервер + собрать APK
|
|
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 "
|
|
cd /opt/elmer && git checkout dynamic-tests && git pull origin dynamic-tests
|
|
pip install -r requirements.txt
|
|
sudo systemctl restart elmer
|
|
|
|
rm -rf android && tar xzf /tmp/android-src.tar.gz
|
|
cd android && gradle wrapper --gradle-version 8.7
|
|
export ANDROID_SDK_ROOT=\$HOME/android-sdk
|
|
./gradlew clean assembleDebug
|
|
cp app/build/outputs/apk/debug/app-debug.apk /opt/elmer/web/static/
|
|
"
|
|
```
|
|
|
|
### Структура проекта
|
|
```
|
|
elmer/
|
|
android/ — Android-приложение (Kotlin)
|
|
.../client/
|
|
MainActivity.kt — UI + приёмники
|
|
ElmForwardService.kt — BT/TCP-реле
|
|
TestService.kt — автономный тест ELM
|
|
api/ — Flask API (Python)
|
|
db.py — БД (sessions + device_profiles)
|
|
routes.py — эндпоинты
|
|
scripts.py — скрипты L0/L1/L2
|
|
parser.py — парсинг ответов
|
|
config.py, dtc.py, ping.py
|
|
brain/ — LLM-клиент, промпты
|
|
obd/ — ELM-протокол (Python)
|
|
commands.py — каталог AT-команд
|
|
classifier.py — классификация ответов
|
|
connection.py — SerialTransport
|
|
probe.py — пробинг ELM
|
|
protocol.py — стейт-машина AndrOBD
|
|
state.py — состояния/ответы
|
|
timing.py — адаптивный таймаут
|
|
doc/ — Документация, сессии
|
|
web/ — Flask web, статика
|
|
```
|
|
|
|
### Что сделано (сессия 2026-06-07)
|
|
|
|
#### Сервер
|
|
- **Пробинг ELM**: трехуровневый каскад (L0/L1/L2), профили в БД по MAC
|
|
- **Fix init**: больше не шлём ATAT1/ATSTxx (вешало клоны)
|
|
- **Скрипты под уровень**: L0 (5 PIDs), L1 (8 + VIN), L2 (14 + калибровки)
|
|
- **Рефакторинг**: код разбит на независимые модули (commands, classifier, connection...)
|
|
|
|
#### Android
|
|
- **Вывод**: append вместо overwrite (строки не перекрываются)
|
|
- **Таймер**: отдельный TextView, тикает только во время обмена (Engine Time)
|
|
- **TestService**: адаптивные таймауты, ATS0, \r терминатор
|
|
|
|
### Что НЕ сделано (TODO)
|
|
- Полевой тест на машине ← СЕЙЧАС
|
|
- Разбить MainActivity.kt
|
|
- Разбить ElmChecker.kt
|
|
|
|
### Важные правила
|
|
- ELM327 v1.5 — фейк, НЕ слать ATAT1/AT@1/AT@2/ATST/ATCAF1/ATCFC1
|
|
- Все статусы через append("\n..."), не tvStatus.text =
|
|
- Таймер операций (opTimerStart/Stop), не сессии
|
|
- Версию поднимать ВЕЗДЕ: build.gradle.kts, index.html (2 места), CHANGELOG.md, resume.txt, doc/architecture.md
|
|
- В проекте elmer — НИЧЕГО не делать без прямого указания
|