chore: тесты, SETUP.md, фикс parser DTC (mode=43, не 03)
This commit is contained in:
+159
@@ -0,0 +1,159 @@
|
||||
# elmAI — полная настройка для нового разработчика
|
||||
|
||||
> v0.40.0-dev, 6 июня 2026
|
||||
|
||||
---
|
||||
|
||||
## 1. Что где лежит
|
||||
|
||||
```
|
||||
elmer/ ← сервер (gitea.services.ngcloud.ru/Nail/elmer)
|
||||
├── api/ Python/Flask эндпоинты, БД, парсер, скрипты
|
||||
├── brain/ LLM-клиент (Diagnoser), промпты
|
||||
├── obd/ ELM327 стейт-машина (AndrOBD)
|
||||
├── web/ Flask, шаблоны, статика (APK, лого)
|
||||
├── android/ ← Android (github.com/Repinoid/elmer-android)
|
||||
│ └── app/... Kotlin-код, ресурсы
|
||||
├── doc/ Документация, история изменений, DTC-коды
|
||||
├── config.yaml LLM API ключ, модель, порты
|
||||
├── deploy.sh Скрипт развёртывания
|
||||
└── run.py Локальный запуск
|
||||
```
|
||||
|
||||
## 2. Git
|
||||
|
||||
**Сервер:** `https://gitea.services.ngcloud.ru/Nail/elmer.git`
|
||||
**Android:** `https://github.com/Repinoid/elmer-android.git`
|
||||
|
||||
```bash
|
||||
git clone https://Nail:b1fe1db54be4cfcc19c38f7fee713cde6f351524@gitea.services.ngcloud.ru/Nail/elmer.git
|
||||
cd elmer
|
||||
git clone https://github.com/Repinoid/elmer-android.git android
|
||||
# или если уже есть:
|
||||
git pull origin master
|
||||
cd android && git pull origin master
|
||||
```
|
||||
|
||||
## 3. Зависимости сервера
|
||||
|
||||
```bash
|
||||
cd elmer
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt gunicorn
|
||||
```
|
||||
|
||||
## 4. Конфигурация
|
||||
|
||||
`config.yaml`:
|
||||
```yaml
|
||||
llm:
|
||||
api_key: "sk-78ec529c1eba4ba69995091046c9fa33"
|
||||
model: "deepseek-v4-flash"
|
||||
base_url: "https://api.deepseek.com/v1"
|
||||
|
||||
elm327:
|
||||
port: /dev/rfcomm0
|
||||
baudrate: 38400
|
||||
```
|
||||
|
||||
## 5. Запуск локально
|
||||
|
||||
```bash
|
||||
cd elmer
|
||||
source venv/bin/activate
|
||||
python run.py
|
||||
# → http://localhost:5005
|
||||
```
|
||||
|
||||
## 6. Боевой сервер (obdai.ru, 5.172.178.213)
|
||||
|
||||
**SSH ключ:** `~/.ssh/naeel_vm_id_ed25519`
|
||||
|
||||
```bash
|
||||
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213
|
||||
```
|
||||
|
||||
**Деплой сервера:**
|
||||
```bash
|
||||
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 \
|
||||
"cd /opt/elmer && git pull origin master && sudo systemctl restart elmer"
|
||||
```
|
||||
|
||||
**Сборка APK (на сервере):**
|
||||
```bash
|
||||
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 \
|
||||
"export ANDROID_SDK_ROOT=\$HOME/android-sdk && \
|
||||
export ANDROID_HOME=\$ANDROID_SDK_ROOT && \
|
||||
cd /opt/elmer && rm -rf android && \
|
||||
cd /opt/elmer && \
|
||||
export ANDROID_SDK_ROOT=\$HOME/android-sdk && \
|
||||
export ANDROID_HOME=\$ANDROID_SDK_ROOT && \
|
||||
cd android && gradle wrapper --gradle-version 8.7 && \
|
||||
./gradlew clean assembleDebug && \
|
||||
cp app/build/outputs/apk/debug/app-debug.apk /opt/elmer/web/static/"
|
||||
```
|
||||
|
||||
**Nginx:**
|
||||
```nginx
|
||||
location = /elmer.apk { alias /opt/elmer/web/static/app-debug.apk; }
|
||||
location /static/ { alias /opt/elmer/web/static/; }
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
client_body_timeout 120s;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
```
|
||||
|
||||
**Systemd сервис:** `/etc/systemd/system/elmer.service`
|
||||
```
|
||||
[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 --timeout 180 web.app:app
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
## 7. Структура БД SQLite
|
||||
|
||||
Файл: `elmer.db` (создаётся автоматически)
|
||||
|
||||
Таблица `sessions` (35+ колонок):
|
||||
- client_ip, real_ip, user_agent, content_length, created_at
|
||||
- phone_model, phone_maker, android_version, android_sdk, app_version
|
||||
- android_id, device_uuid, phone_lang, phone_tz, phone_display
|
||||
- elm_mac, elm_bt_name, obd_protocol
|
||||
- vin, dtc_count, pid_count
|
||||
- duration_ms, response_count, error_count, retry_count, timeout_count
|
||||
- script_mode, transport, mock_mode
|
||||
- diagnosis_text, diagnosis_len, llm_model, llm_duration_ms, llm_success
|
||||
- raw_responses, request_id, response_json
|
||||
|
||||
## 8. API эндпоинты
|
||||
|
||||
| Метод | Путь | Описание |
|
||||
|---|---|---|
|
||||
| GET | `/api/v1/ping` | Проверка сервера |
|
||||
| GET | `/api/v1/ping-llm` | Проверка LLM (кэш 60с) |
|
||||
| GET | `/api/v1/script?mode=full/test` | Скрипт диагностики |
|
||||
| POST | `/api/v1/session/upload` | Загрузка батча + LLM |
|
||||
| POST | `/api/v1/chat` | Вопрос к LLM |
|
||||
| POST | `/api/v1/dtc/decode` | Расшифровка DTC |
|
||||
| POST | `/api/v1/dtc/upload` | Сохранение DTC |
|
||||
|
||||
## 9. Правила работы с Copilot
|
||||
|
||||
См. `.instructions.md` в корне. Главное:
|
||||
- **Вопрос → только ответ. Никаких действий.**
|
||||
- Всегда читать `doc/architecture.md` перед действиями
|
||||
- Изменения документировать в `doc/history/YYYY-MM-DD.md`
|
||||
- APK отдавать через nginx, не через Flask
|
||||
Reference in New Issue
Block a user