Files
elmer/doc/session-2026-05-27.md
T

5.5 KiB

Сессия 2026-05-27 — домен obdai.ru, стратегия деплоя, исследование ELM/BT

Домен

  • obdai.ru — куплен, DNS-зона в ngcloud (PowerDNS)
  • NS: ns5.rcloud.ru / ns4.rcloud.ru (у регистратора сменили с reg.ru)
  • A-записи: @, www, ai, test5.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-база | 🔵 потом |