diff --git a/api/routes.py b/api/routes.py index f5bfc6a..21ce817 100644 --- a/api/routes.py +++ b/api/routes.py @@ -16,7 +16,7 @@ from flask import jsonify, request from api.config import load from api.db import Database from api.parser import format_no_llm, parse_batch -from api.scripts import build_default_script, build_full_script, build_script_for_level, build_dynamic_script +from api.scripts import build_default_script, build_full_script, build_script_for_level, build_dynamic_script, build_test_script from brain.client import Diagnoser, LLMError from brain.prompts import SYSTEM_PROMPT, DYNAMIC_PROMPT @@ -93,6 +93,12 @@ def register(app): script = build_default_script() elif mode == "dynamic": script = build_dynamic_script() + elif mode == "test": + wait = int(request.args.get("wait", 400)) + pid_str = request.args.get("pids", "") + pids = pid_str.split(",") if pid_str else None + repeat = int(request.args.get("repeat", 10)) + script = build_test_script(wait_ms=wait, pids=pids, repeat=repeat) elif mode == "full": script = build_full_script() else: diff --git a/api/scripts.py b/api/scripts.py index 0059edd..2e79a71 100644 --- a/api/scripts.py +++ b/api/scripts.py @@ -131,3 +131,42 @@ def build_dynamic_script() -> dict: {"id": "pid_1F", "cmd": "011F", "desc": "Время работы"}, ], } + + +def build_test_script(wait_ms: int = 400, pids: list[str] | None = None, repeat: int = 10) -> dict: + """Тестовый скрипт для отладки таймингов ELM327. + + Сервер управляет таймингами — можно менять wait_ms/pids/repeat без передеплоя APK. + + Args: + wait_ms: пауза ПЕРЕД каждой OBD-командой (ms) + pids: список PID для опроса (по умолчанию 010C,0110,0106) + repeat: сколько раз повторить цикл + """ + if pids is None: + pids = ["010C", "0110", "0106"] + + pid_names = {"010C": "RPM", "0110": "MAF", "0106": "STFT", "0105": "ОЖ", + "0104": "Нагрузка", "0107": "LTFT", "0111": "Дроссель", + "010D": "Скорость", "010B": "MAP", "010F": "IAT"} + + steps = [] + # Статика — один проход по всем PID для калибровки + for pid in pids: + name = pid_names.get(pid, pid) + steps.append({"id": f"static_{pid}", "cmd": pid, "desc": f"{name} (статик)", "wait": 0}) + + # Динамика — repeat циклов + for cycle in range(repeat): + for pid in pids: + name = pid_names.get(pid, pid) + steps.append({"id": f"dyn{cycle}_{pid}", "cmd": pid, "desc": f"{name}", "wait": wait_ms}) + + return { + "version": 1, + "mode": "test", + "title": f"Тест: {len(pids)} PID × {repeat}, пауза {wait_ms}ms", + "wait_ms": wait_ms, + "repeat": repeat, + "steps": steps, + }