# Сессия 2026-05-27 — домен obdai.ru, стратегия деплоя, исследование ELM/BT ## Домен - `obdai.ru` — куплен, DNS-зона в ngcloud (PowerDNS) - NS: `ns5.rcloud.ru` / `ns4.rcloud.ru` (у регистратора сменили с reg.ru) - A-записи: `@`, `www`, `ai`, `test` → `5.172.178.213` - Ждём propagation (TTL старой зоны 86400) ## Решение: obdai.ru пока НЕ деплоим ### Причина Главная задача сейчас — **стабильный обмен ELM327↔Android**. Пока это звено не отлажено на 100%, деплой на ВМ и домен не дают никакой ценности: - В машине телефон на одном WiFi с ноутбуком — локальный IP быстрее и надёжнее - Клиент уже принимает URL сервера как параметр — сменить на `obdai.ru` = одна строка - DNS ещё не пророс ### Порядок приоритетов 1. **Стабильный обмен ELM↔Android** — критический путь, уже выявлено 4+ багов 2. **Fat-client протокол** (скрипт + батч) — обкатать на реальном ELM 3. **Gunicorn + nginx на ВМ** — только после пунктов 1-2 4. **Переключение клиента на `obdai.ru`** — последний шаг, одна строка ### Состояние звена ELM↔Android | Баг | Статус | |-----|--------| | Сервер шлёт команды без пауз → ELM не успевает | ⚠️ не решён | | `\r` vs `\r\n` → мусор в буфере | ✅ исправлено | | Deadlock при старте (ELM не шлёт приветствие) | ✅ исправлено (fwd READY) | | Android блокирует HTTP (cleartext) | ✅ исправлено (usesCleartextTraffic) | ### Архитектура деплоя (в будущем) ``` obdai.ru (95.172.178.213) ├── nginx (reverse proxy + SSL) │ ├── / → лендинг (статический HTML) │ ├── /static/app.apk → APK для скачивания │ └── /api/v1/* → gunicorn (Flask) │ ├── /script → выдача скрипта диагностики │ └── /session/upload → приём батча + LLM └── gunicorn (web/app.py) ├── script_endpoint (fat-client) └── возможно raw_endpoint (опционально) ``` ### Что НЕ переносится на ВМ - Десктоп-диагностика (`POST /api/diagnose`, `ELM327.elm.py`) — требует Bluetooth на ноутбуке в машине - Локальный Flask для тестов — остаётся на ноутбуке разработчика --- ## 11:00-15:00 — Исследование ELM327/BT: 19 проектов ### Найдено и изучено | Тип | Кол-во | Лучший | |-----|--------|--------| | ELM→LLM проекты | 5 | OBD-Droid (Wal33D) | | Традиционные OBD2 Android | 14 | **AndrOBD** (1993⭐) | ### Ключевой результат: AndrOBD — золотой стандарт Изучен **сырой исходный код**. Выписаны все паттерны в `doc/elm-reference.md` (1100+ строк). **Критические находки, которых не было в нашем коде:** 1. `Thread.sleep(500)` после BT connect — без этого Android теряет данные 2. Fallback RFCOMM channel 1 через reflection (для китайских клонов) 3. Адаптивный таймаут: 200мс ± 4мс, диапазон 12-1000мс 4. ATST меняется на лету 5. Побайтовое чтение с паузой 1мс (не readLine!) 6. `>` — НЕ спецсигнал, а разделитель строк как CR/LF 7. Мульти-фрейм ISO-TP с префиксом длины 8. Полная обработка ошибок: SEARCHING, NO DATA, BUS ERROR, UNABLE, DATA ERROR 9. Инициализация: ATSP→ATAT→ATS0→ATL0→ATE0 (без ATZ при каждом подключении) ### Созданные документы | Файл | Содержание | |------|-----------| | `doc/elm-reference.md` | 1100+ строк: паттерны 19 проектов + сырой код AndrOBD | | `doc/competitors.md` | 7 конкурентов, русских 0 | | `elmer/elm_proto.py` | ❌ Переусложнён (написан до изучения AndrOBD) | | `tools/mock_elm327_v2.py` | ❌ Требует доработки под реальные паттерны | ### План: переписать ELM-слой по AndrOBD **Шаг 1 — СЕЙЧАС:** Переписать `elmer/elm_proto.py` — эталонный Python-референс. **Шаг 2 — ЗАВТРА:** Перенести в `ScriptRunnerService.kt` (Kotlin). **Шаг 3:** Тест на Mock ELM327 v2. **Шаг 4:** Выезд к Фаэтону. ### Что НЕ делаем сейчас (приоритеты) | P0 | Стабильный ELM↔Android | 🔴 сейчас | | P1 | ScriptRunner v2 + Mock v2 | 🟡 завтра | | P2 | Трёхфазный флоу, жалобы водителя | 🟢 потом | | P3 | LLM-промпты, cross-val, DTC-база | 🔵 потом |