feat: build_test_script + mode=test
This commit is contained in:
+7
-1
@@ -16,7 +16,7 @@ from flask import jsonify, request
|
|||||||
from api.config import load
|
from api.config import load
|
||||||
from api.db import Database
|
from api.db import Database
|
||||||
from api.parser import format_no_llm, parse_batch
|
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.client import Diagnoser, LLMError
|
||||||
from brain.prompts import SYSTEM_PROMPT, DYNAMIC_PROMPT
|
from brain.prompts import SYSTEM_PROMPT, DYNAMIC_PROMPT
|
||||||
|
|
||||||
@@ -93,6 +93,12 @@ def register(app):
|
|||||||
script = build_default_script()
|
script = build_default_script()
|
||||||
elif mode == "dynamic":
|
elif mode == "dynamic":
|
||||||
script = build_dynamic_script()
|
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":
|
elif mode == "full":
|
||||||
script = build_full_script()
|
script = build_full_script()
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -131,3 +131,42 @@ def build_dynamic_script() -> dict:
|
|||||||
{"id": "pid_1F", "cmd": "011F", "desc": "Время работы"},
|
{"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,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user