docs: логика диагностики — два режима
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# Логика диагностики — два режима
|
||||
|
||||
## Архитектура
|
||||
|
||||
Три слоя:
|
||||
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 получает: сырые данные + вопрос пользователя → ответ с диагнозом.
|
||||
Reference in New Issue
Block a user