feat: build_test_script + mode=test

This commit is contained in:
Repinoid
2026-06-13 20:57:24 +04:00
parent 71200709ab
commit 6e59fef093
2 changed files with 46 additions and 1 deletions
+7 -1
View File
@@ -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:
+39
View File
@@ -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,
}