86 lines
2.9 KiB
Markdown
86 lines
2.9 KiB
Markdown
# Логика диагностики — два режима
|
|
|
|
## Архитектура
|
|
|
|
Три слоя:
|
|
1. **Relay (Android)** — тупой ретранслятор: получил команду → отправил в ELM → вернул ответ
|
|
2. **Script Engine (сервер)** — отправляет команды по расписанию, собирает ответы
|
|
3. **LLM (сервер)** — анализирует собранные данные
|
|
|
|
---
|
|
|
|
## Режим 1: Прогрев на месте (3 минуты)
|
|
|
|
**Цель**: снять показания на холостых, погазовать, оценить прогрев
|
|
|
|
**Скрипт**:
|
|
```
|
|
Каждые 2 секунды — 3 PID: 010C (RPM), 0105 (темп), 0111 (дроссель)
|
|
Итого: 90 циклов × 3 PID = 270 запросов
|
|
При 70% успехе: ~190 ответов (~63 на каждый PID)
|
|
```
|
|
|
|
**Метрики**:
|
|
- RPM: мин/макс/среднее на холостых, отклик на газ
|
|
- Температура: скорость прогрева (°C/мин), выход на рабочую
|
|
- Дроссель: положение на холостых, реакция на педаль
|
|
|
|
---
|
|
|
|
## Режим 2: В движении (5 минут)
|
|
|
|
**Цель**: нагрузочный тест, динамика разгона, поведение под нагрузкой
|
|
|
|
**Скрипт**:
|
|
```
|
|
Каждые 2 секунды — 3 PID: 010C (RPM), 0105 (темп), 0111 (дроссель)
|
|
Итого: 150 циклов × 3 PID = 450 запросов
|
|
При 70% успехе: ~315 ответов (~105 на каждый PID)
|
|
```
|
|
|
|
**Метрики**:
|
|
- RPM: разгон/торможение, переключение передач
|
|
- Температура: стабильность под нагрузкой
|
|
- Дроссель: соответствие нагрузке
|
|
|
|
---
|
|
|
|
## Обработка ошибок
|
|
|
|
| Ответ | Действие |
|
|
|-------|----------|
|
|
| `41xx...` (hex данные) | Сохранить, декодировать |
|
|
| `STOPPED` | Пропустить, relay сам восстановит |
|
|
| Пусто / таймаут | Пропустить, следующий запрос |
|
|
| 3 таймаута подряд | Пауза 2с (клон перегрелся) |
|
|
|
|
---
|
|
|
|
## Выходные данные для LLM
|
|
|
|
```json
|
|
{
|
|
"mode": "warmup",
|
|
"duration_s": 180,
|
|
"total_requests": 270,
|
|
"successful": 190,
|
|
"pids": {
|
|
"010C": {
|
|
"min": 680, "max": 3200, "avg": 1250,
|
|
"samples": [680, 720, 750, ...]
|
|
},
|
|
"0105": {
|
|
"start_temp": 25, "end_temp": 87,
|
|
"warmup_rate": 0.34,
|
|
"samples": [25, 27, 30, ...]
|
|
},
|
|
"0111": {
|
|
"min": 0, "max": 45,
|
|
"samples": [0, 0, 1.5, ...]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
LLM получает: сырые данные + вопрос пользователя → ответ с диагнозом.
|