From 17a0dddf61bf6851e926d28d3317ee5a150d7bbf Mon Sep 17 00:00:00 2001 From: Smittix Date: Wed, 21 Jan 2026 23:31:21 +0000 Subject: [PATCH] Fix bytes conversion in fallback Bluetooth scanner Handle various data types safely when converting manufacturer_data and service_data in the bleak fallback scanner. Co-Authored-By: Claude Opus 4.5 --- utils/bluetooth/fallback_scanner.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/utils/bluetooth/fallback_scanner.py b/utils/bluetooth/fallback_scanner.py index a8357b8..5bb8d5b 100644 --- a/utils/bluetooth/fallback_scanner.py +++ b/utils/bluetooth/fallback_scanner.py @@ -144,14 +144,35 @@ class BleakScanner: if adv_data.manufacturer_data: for mid, mdata in adv_data.manufacturer_data.items(): manufacturer_id = mid - manufacturer_data = bytes(mdata) + # Handle various data types safely + try: + if isinstance(mdata, (bytes, bytearray)): + manufacturer_data = bytes(mdata) + elif isinstance(mdata, (list, tuple)): + manufacturer_data = bytes(mdata) + elif isinstance(mdata, str): + manufacturer_data = bytes.fromhex(mdata) + else: + manufacturer_data = bytes(mdata) + except (TypeError, ValueError) as e: + logger.debug(f"Could not convert manufacturer data: {e}") break # Extract service data service_data = {} if adv_data.service_data: for uuid, data in adv_data.service_data.items(): - service_data[str(uuid)] = bytes(data) + try: + if isinstance(data, (bytes, bytearray)): + service_data[str(uuid)] = bytes(data) + elif isinstance(data, (list, tuple)): + service_data[str(uuid)] = bytes(data) + elif isinstance(data, str): + service_data[str(uuid)] = bytes.fromhex(data) + else: + service_data[str(uuid)] = bytes(data) + except (TypeError, ValueError) as e: + logger.debug(f"Could not convert service data for {uuid}: {e}") return BTObservation( timestamp=datetime.now(),