From 3334baf8fc2d08e6e9e5f23af5eca26029502740 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Sun, 7 Jun 2026 08:59:34 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20deploy.sh=20=D0=BD=D0=B0=20master,=20leg?= =?UTF-8?q?acy-=D0=BF=D1=80=D0=B5=D1=84=D0=B8=D0=BA=D1=81=D1=8B,=20v0.48.0?= =?UTF-8?q?-dev=20=D0=B2=D0=B5=D0=B7=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/copilot-instructions.md | 8 +-- CHANGELOG.md | 2 +- deploy.sh | 57 ++++++++-------------- doc/architecture.md | 2 +- legacy-deploy.sh | 86 +++++++++++++++++++++++++++++++++ legacy-resume.txt | 78 ++++++++++++++++++++++++++++++ resume.txt | 32 ++++++++---- web/templates/index.html | 4 +- 8 files changed, 213 insertions(+), 56 deletions(-) mode change 100755 => 100644 deploy.sh create mode 100755 legacy-deploy.sh create mode 100644 legacy-resume.txt 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 @@ elmAI

elmAI

Диагностика авто через ELM327 + ИИ

-

v0.48.0 — 7 июня 2026

+

v0.48.0-dev — 7 июня 2026

📱 Скачай приложение на телефон:

⬇️ Скачать elmAI APK -

v0.48.0 • нажмите чтобы скачать

+

v0.48.0-dev • нажмите чтобы скачать