From 098fab6acabfbcd439e734c7a382de7146c6ff0f Mon Sep 17 00:00:00 2001 From: Smittix Date: Wed, 21 Jan 2026 23:39:38 +0000 Subject: [PATCH] Fix is_known_tracker to handle hex string manufacturer data The function now accepts both bytes and hex string formats for manufacturer_data, converting hex strings to bytes before processing. Co-Authored-By: Claude Opus 4.5 --- data/tscm_frequencies.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/data/tscm_frequencies.py b/data/tscm_frequencies.py index 6789c26..5d549bc 100644 --- a/data/tscm_frequencies.py +++ b/data/tscm_frequencies.py @@ -365,10 +365,14 @@ def get_all_sweep_presets() -> dict: } -def is_known_tracker(device_name: str | None, manufacturer_data: bytes | None = None) -> dict | None: +def is_known_tracker(device_name: str | None, manufacturer_data: bytes | str | None = None) -> dict | None: """ Check if a BLE device matches known tracker signatures. + Args: + device_name: Device name to check against patterns + manufacturer_data: Manufacturer data as bytes or hex string + Returns: Tracker info dict if match found, None otherwise """ @@ -379,11 +383,20 @@ def is_known_tracker(device_name: str | None, manufacturer_data: bytes | None = if pattern in name_lower: return tracker_info - if manufacturer_data and len(manufacturer_data) >= 2: - company_id = int.from_bytes(manufacturer_data[:2], 'little') - for tracker_id, tracker_info in BLE_TRACKER_SIGNATURES.items(): - if tracker_info.get('company_id') == company_id: - return tracker_info + if manufacturer_data: + # Convert hex string to bytes if needed + mfr_bytes = manufacturer_data + if isinstance(manufacturer_data, str): + try: + mfr_bytes = bytes.fromhex(manufacturer_data) + except ValueError: + return None + + if len(mfr_bytes) >= 2: + company_id = int.from_bytes(mfr_bytes[:2], 'little') + for tracker_id, tracker_info in BLE_TRACKER_SIGNATURES.items(): + if tracker_info.get('company_id') == company_id: + return tracker_info return None