docs: пояснения почему выбрана такая логика (reasoning)
This commit is contained in:
+8
-1
@@ -44,13 +44,20 @@ def parse_batch(responses: list[dict]) -> dict:
|
||||
|
||||
|
||||
def _parse_vin(result: dict, raw: str, decoded: str):
|
||||
"""Извлечь VIN из decoded (Android) или из raw HEX (fallback).
|
||||
|
||||
Два пути получения VIN:
|
||||
1. Android-декодер уже распарсил → decoded = "VIN: WVWZZZ..."
|
||||
2. Сырой HEX от ELM → парсим 490201 + 17 байт ASCII
|
||||
Fallback нужен для старых клиентов без декодера.
|
||||
"""
|
||||
if decoded.startswith("VIN:"):
|
||||
vin = decoded.replace("VIN:", "").strip()
|
||||
if len(vin) == 17:
|
||||
result["vin"] = vin
|
||||
return
|
||||
|
||||
# Fallback: парсим VIN из raw HEX
|
||||
# Fallback: парсим VIN из raw HEX (CAN multi-frame, ISO-TP, обычный)
|
||||
if "49" in raw and ("02" in raw or "4902" in raw.replace(" ", "")):
|
||||
# Чистим: убираем CAN адресацию (N:), ISO-TP (10..), двоеточия
|
||||
import re
|
||||
|
||||
Reference in New Issue
Block a user