fix: eliminate log spam crash - use plugin parser on start, silence noisy fallback warnings
This commit is contained in:
@@ -90,14 +90,6 @@ class TelemetryListener:
|
|||||||
host = cfg.get("telemetry_host", "0.0.0.0")
|
host = cfg.get("telemetry_host", "0.0.0.0")
|
||||||
port = cfg.get("telemetry_port", 20777)
|
port = cfg.get("telemetry_port", 20777)
|
||||||
|
|
||||||
selected_game = cfg.get("selected_game_id")
|
|
||||||
parser_key = None
|
|
||||||
if selected_game:
|
|
||||||
for game in cfg.get("games", []):
|
|
||||||
if game["id"] == selected_game:
|
|
||||||
parser_key = game.get("parser", "forza")
|
|
||||||
break
|
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
try:
|
try:
|
||||||
self._transport, _ = await loop.create_datagram_endpoint(
|
self._transport, _ = await loop.create_datagram_endpoint(
|
||||||
@@ -105,16 +97,14 @@ class TelemetryListener:
|
|||||||
local_addr=(host, port),
|
local_addr=(host, port),
|
||||||
)
|
)
|
||||||
self._running = True
|
self._running = True
|
||||||
|
|
||||||
self.forwarder.reload_targets()
|
self.forwarder.reload_targets()
|
||||||
|
|
||||||
if parser_key and parser_key in PARSER_MAP:
|
selected_game = cfg.get("selected_game_id")
|
||||||
self._parser = self._get_parser(parser_key)
|
if selected_game:
|
||||||
logger.info("Telemetry listener started on %s:%d [parser=%s]", host, port, parser_key)
|
self.set_parser_for_game(selected_game)
|
||||||
else:
|
|
||||||
self._parser = None
|
|
||||||
logger.info("Telemetry listener started on %s:%d [auto-detect]", host, port)
|
|
||||||
|
|
||||||
|
logger.info("Telemetry listener started on %s:%d [game=%s]",
|
||||||
|
host, port, selected_game or "none")
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Failed to start telemetry listener: %s", e)
|
logger.error("Failed to start telemetry listener: %s", e)
|
||||||
@@ -144,13 +134,6 @@ class TelemetryListener:
|
|||||||
if self._parser:
|
if self._parser:
|
||||||
td = self._parser.parse(data, addr)
|
td = self._parser.parse(data, addr)
|
||||||
else:
|
else:
|
||||||
for parser_cls in PARSER_MAP.values():
|
|
||||||
p = parser_cls()
|
|
||||||
td = p.parse(data, addr)
|
|
||||||
if td and td.speed_kmh > 0:
|
|
||||||
break
|
|
||||||
|
|
||||||
if td is None:
|
|
||||||
td = TelemetryData(timestamp=time.time(), raw={"raw_hex": data.hex(), "length": len(data)})
|
td = TelemetryData(timestamp=time.time(), raw={"raw_hex": data.hex(), "length": len(data)})
|
||||||
|
|
||||||
self._latest_data = td
|
self._latest_data = td
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class ForzaParser(BaseParser):
|
|||||||
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
||||||
|
|
||||||
if len(data) < 312:
|
if len(data) < 312:
|
||||||
logger.warning("Forza data too short: %d bytes", len(data))
|
logger.debug("Forza data too short: %d bytes", len(data))
|
||||||
return td
|
return td
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -73,7 +73,7 @@ class ForzaParser(BaseParser):
|
|||||||
})
|
})
|
||||||
|
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
logger.error("Forza parse error: %s", e)
|
logger.debug("Forza parse error: %s", e)
|
||||||
|
|
||||||
return td
|
return td
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ class ACCParser(BaseParser):
|
|||||||
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
||||||
|
|
||||||
if len(data) < 200:
|
if len(data) < 200:
|
||||||
logger.warning("ACC data too short: %d bytes", len(data))
|
logger.debug("ACC data too short: %d bytes", len(data))
|
||||||
return td
|
return td
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -109,7 +109,7 @@ class ACCParser(BaseParser):
|
|||||||
"brake": td.brake,
|
"brake": td.brake,
|
||||||
})
|
})
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
logger.error("ACC parse error: %s", e)
|
logger.debug("ACC parse error: %s", e)
|
||||||
|
|
||||||
return td
|
return td
|
||||||
|
|
||||||
@@ -123,7 +123,7 @@ class F1Parser(BaseParser):
|
|||||||
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
||||||
|
|
||||||
if len(data) < 1289:
|
if len(data) < 1289:
|
||||||
logger.warning("F1 data too short: %d bytes", len(data))
|
logger.debug("F1 data too short: %d bytes", len(data))
|
||||||
return td
|
return td
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -149,7 +149,7 @@ class F1Parser(BaseParser):
|
|||||||
"lap_time": td.lap_time,
|
"lap_time": td.lap_time,
|
||||||
})
|
})
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
logger.error("F1 parse error: %s", e)
|
logger.debug("F1 parse error: %s", e)
|
||||||
|
|
||||||
return td
|
return td
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ class IRacingParser(BaseParser):
|
|||||||
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
|
||||||
|
|
||||||
if len(data) < 100:
|
if len(data) < 100:
|
||||||
logger.warning("iRacing data too short: %d bytes", len(data))
|
logger.debug("iRacing data too short: %d bytes", len(data))
|
||||||
return td
|
return td
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -183,7 +183,7 @@ class IRacingParser(BaseParser):
|
|||||||
"brake": td.brake,
|
"brake": td.brake,
|
||||||
})
|
})
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
logger.error("iRacing parse error: %s", e)
|
logger.debug("iRacing parse error: %s", e)
|
||||||
|
|
||||||
return td
|
return td
|
||||||
|
|
||||||
@@ -216,7 +216,7 @@ class ACParser(BaseParser):
|
|||||||
"gear": td.gear,
|
"gear": td.gear,
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("AC parse error: %s", e)
|
logger.debug("AC parse error: %s", e)
|
||||||
|
|
||||||
return td
|
return td
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user