diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 342fb54..00a9a03 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -17,7 +17,7 @@ git add -A && git commit -m "краткое описание" && git push origin
Перед **каждым** деплоем APK на сервер — инкрементировать патч-версию в `android/app/build.gradle.kts`:
```
-versionName = "0.42.0-dev" → versionName = "0.43.0-dev"
+versionName = "X.Y.Z-dev" → versionName = "X.Y+1.Z-dev"
```
### Процедура
@@ -26,10 +26,10 @@ versionName = "0.42.0-dev" → versionName = "0.43.0-dev"
3. Закоммитить с сообщением `"bump vX.Y.Z-dev"`
4. Затем — сборка и деплой
-### Пример
+### Пример (актуальный)
```
-Было: versionName = "0.42.0-dev"
-Стало: versionName = "0.43.0-dev"
+Было: versionName = "0.47.0-dev"
+Стало: versionName = "0.48.0-dev"
```
## 3. Формат коммитов
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1c3082e..1fd0e71 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,7 @@
# elmAI — Changelog / Полное описание проекта
> Файл для нового агента: прочитай — и ты в курсе всего.
-> Актуально: v0.48.0, 7 июня 2026
+> Актуально: v0.48.0-dev, 7 июня 2026
---
diff --git a/deploy.sh b/deploy.sh
old mode 100755
new mode 100644
index b7ec436..dd9bd20
--- a/deploy.sh
+++ b/deploy.sh
@@ -1,15 +1,12 @@
#!/bin/bash
# Деплой Elmer на obdai.ru
+# ВНИМАНИЕ: запускать НА СЕРВЕРЕ (5.172.178.213), не локально!
set -e
-echo "=== Установка пакетов ==="
-apt update && apt install -y python3-pip python3-venv nginx certbot python3-certbot-nginx
-
-echo "=== Клонирование репо ==="
-cd /opt
-git clone https://gitea.services.ngcloud.ru/Nail/elmer.git || (cd elmer && git pull)
-cd elmer
-git checkout fat-client
+echo "=== Обновление репо ==="
+cd /opt/elmer || { echo "Репозиторий не найден, клонируем..."; git clone https://gitea.services.ngcloud.ru/Nail/elmer.git /opt/elmer; cd /opt/elmer; }
+git checkout master
+git pull origin master
echo "=== Виртуальное окружение ==="
python3 -m venv venv
@@ -17,26 +14,8 @@ source venv/bin/activate
pip install -r requirements.txt
pip install gunicorn
-echo "=== Конфигурация ==="
-cp config.yaml config.yaml.bak
-cat > config.yaml << 'YAML'
-elm327:
- port: /dev/rfcomm0
- baudrate: 38400
-
-llm:
- api_key: "sk-ucI5YvOticoOQ9Kuj5K9mQ"
- model: "gpt-oss-120b"
- base_url: "https://api.aillm.ru/v1"
-
-pids:
- "0105": ["coolant_temp", "°C"]
- "010C": ["rpm", "об/мин"]
- "010D": ["speed", "км/ч"]
-YAML
-
echo "=== Systemd сервис ==="
-cat > /etc/systemd/system/elmer.service << 'UNIT'
+sudo cat > /etc/systemd/system/elmer.service << 'UNIT'
[Unit]
Description=Elmer Flask API
After=network.target
@@ -52,7 +31,7 @@ WantedBy=multi-user.target
UNIT
echo "=== Nginx ==="
-cat > /etc/nginx/sites-available/elmer << 'NGX'
+sudo cat > /etc/nginx/sites-available/elmer << 'NGX'
server {
listen 80;
server_name obdai.ru www.obdai.ru ai.obdai.ru test.obdai.ru;
@@ -69,18 +48,20 @@ server {
}
NGX
-ln -sf /etc/nginx/sites-available/elmer /etc/nginx/sites-enabled/
-rm -f /etc/nginx/sites-enabled/default
-nginx -t && systemctl reload nginx
+sudo ln -sf /etc/nginx/sites-available/elmer /etc/nginx/sites-enabled/
+sudo rm -f /etc/nginx/sites-enabled/default
+sudo nginx -t && sudo systemctl reload nginx
-echo "=== SSL ==="
-certbot --nginx -d obdai.ru -d www.obdai.ru --non-interactive --agree-tos -m tazet@narod.ru || true
+echo "=== SSL (первичная настройка, потом не трогает) ==="
+sudo certbot --nginx -d obdai.ru -d www.obdai.ru --non-interactive --agree-tos -m tazet@narod.ru || true
echo "=== Запуск ==="
-systemctl daemon-reload
-systemctl enable elmer
-systemctl restart elmer
-systemctl restart nginx
+sudo systemctl daemon-reload
+sudo systemctl enable elmer
+sudo systemctl restart elmer
+sudo systemctl restart nginx
+echo "=== ПРОВЕРКА ==="
+curl -s https://obdai.ru/api/v1/ping
+echo ""
echo "=== ГОТОВО ==="
-curl -s http://obdai.ru/api/v1/script | head -c 50
diff --git a/doc/architecture.md b/doc/architecture.md
index 8f701b8..e00ffce 100644
--- a/doc/architecture.md
+++ b/doc/architecture.md
@@ -1,6 +1,6 @@
# Архитектура elmAI
-> v0.48.0, 7 июня 2026
+> v0.48.0-dev, 7 июня 2026
## Общая схема
diff --git a/legacy-deploy.sh b/legacy-deploy.sh
new file mode 100755
index 0000000..b7ec436
--- /dev/null
+++ b/legacy-deploy.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+# Деплой Elmer на obdai.ru
+set -e
+
+echo "=== Установка пакетов ==="
+apt update && apt install -y python3-pip python3-venv nginx certbot python3-certbot-nginx
+
+echo "=== Клонирование репо ==="
+cd /opt
+git clone https://gitea.services.ngcloud.ru/Nail/elmer.git || (cd elmer && git pull)
+cd elmer
+git checkout fat-client
+
+echo "=== Виртуальное окружение ==="
+python3 -m venv venv
+source venv/bin/activate
+pip install -r requirements.txt
+pip install gunicorn
+
+echo "=== Конфигурация ==="
+cp config.yaml config.yaml.bak
+cat > config.yaml << 'YAML'
+elm327:
+ port: /dev/rfcomm0
+ baudrate: 38400
+
+llm:
+ api_key: "sk-ucI5YvOticoOQ9Kuj5K9mQ"
+ model: "gpt-oss-120b"
+ base_url: "https://api.aillm.ru/v1"
+
+pids:
+ "0105": ["coolant_temp", "°C"]
+ "010C": ["rpm", "об/мин"]
+ "010D": ["speed", "км/ч"]
+YAML
+
+echo "=== Systemd сервис ==="
+cat > /etc/systemd/system/elmer.service << 'UNIT'
+[Unit]
+Description=Elmer Flask API
+After=network.target
+
+[Service]
+User=naeel
+WorkingDirectory=/opt/elmer
+ExecStart=/opt/elmer/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 web.app:app
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
+UNIT
+
+echo "=== Nginx ==="
+cat > /etc/nginx/sites-available/elmer << 'NGX'
+server {
+ listen 80;
+ server_name obdai.ru www.obdai.ru ai.obdai.ru test.obdai.ru;
+
+ location /static/ {
+ alias /opt/elmer/web/static/;
+ }
+
+ location / {
+ proxy_pass http://127.0.0.1:8000;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ }
+}
+NGX
+
+ln -sf /etc/nginx/sites-available/elmer /etc/nginx/sites-enabled/
+rm -f /etc/nginx/sites-enabled/default
+nginx -t && systemctl reload nginx
+
+echo "=== SSL ==="
+certbot --nginx -d obdai.ru -d www.obdai.ru --non-interactive --agree-tos -m tazet@narod.ru || true
+
+echo "=== Запуск ==="
+systemctl daemon-reload
+systemctl enable elmer
+systemctl restart elmer
+systemctl restart nginx
+
+echo "=== ГОТОВО ==="
+curl -s http://obdai.ru/api/v1/script | head -c 50
diff --git a/legacy-resume.txt b/legacy-resume.txt
new file mode 100644
index 0000000..e58b1fb
--- /dev/null
+++ b/legacy-resume.txt
@@ -0,0 +1,78 @@
+## 4. Контекст проекта (РЕЗЮМЕ для нового чата)
+
+### Что это
+elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327.
+
+### Текущая версия
+**v0.48.0** (APK: https://obdai.ru/elmer.apk)
+
+### Репозитории
+- Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка master)
+- Android: https://github.com/Repinoid/elmer-android (ветка relay-only)
+- Сервер живёт на 5.172.178.213 (SSH: naeel@5.172.178.213, ключ ~/.ssh/naeel_vm_id_ed25519)
+
+### Деплой
+```bash
+# ВСЕГДА сначала bump версии в android/app/build.gradle.kts!
+cd /home/naeel/elmer/android && git add -A && git commit -m "..." && git push origin master
+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 && 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 — НИЧЕГО не делать без прямого указания
diff --git a/resume.txt b/resume.txt
index e58b1fb..8e32a9b 100644
--- a/resume.txt
+++ b/resume.txt
@@ -4,25 +4,37 @@
elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327.
### Текущая версия
-**v0.48.0** (APK: https://obdai.ru/elmer.apk)
+
+
+**v0.48.0-dev** (APK: https://obdai.ru/elmer.apk)
### Репозитории
- Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка master)
- Android: https://github.com/Repinoid/elmer-android (ветка relay-only)
- Сервер живёт на 5.172.178.213 (SSH: naeel@5.172.178.213, ключ ~/.ssh/naeel_vm_id_ed25519)
-### Деплой
+### Деплой (localhost → сервер)
```bash
-# ВСЕГДА сначала bump версии в android/app/build.gradle.kts!
-cd /home/naeel/elmer/android && git add -A && git commit -m "..." && git push origin master
+# 1. bump версии в android/app/build.gradle.kts на локальной машине!
+# 2. закоммитить + запушить
+cd /home/naeel/elmer && git add -A && git commit -m "bump vX.Y.Z-dev" && git push origin master
+
+# 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/
-ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 \
- "cd /opt/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/"
+
+# 4. на сервере: обновить сервер + собрать APK
+ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 "
+ cd /opt/elmer && git checkout master && git pull origin master
+ 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/
+"
```
### Структура проекта
diff --git a/web/templates/index.html b/web/templates/index.html
index c1fc9db..64713e8 100644
--- a/web/templates/index.html
+++ b/web/templates/index.html
@@ -13,14 +13,14 @@
Диагностика авто через ELM327 + ИИ
-v0.48.0 — 7 июня 2026
+v0.48.0-dev — 7 июня 2026
📱 Скачай приложение на телефон:
⬇️ Скачать elmAI APK -v0.48.0 • нажмите чтобы скачать
+v0.48.0-dev • нажмите чтобы скачать