11"""Library to handle connection with Switchbot."""
22from __future__ import annotations
3+ from functools import lru_cache
34
45import logging
56from collections .abc import Callable
@@ -104,11 +105,19 @@ def parse_advertisement_data(
104105 if not _service_data :
105106 return None
106107 _mfr_data = _mgr_datas [0 ] if _mgr_datas else None
107- _model = chr (_service_data [0 ] & 0b01111111 )
108108
109+ data = _parse_data (_service_data , _mfr_data )
110+ return SwitchBotAdvertisement (device .address , data , device )
111+
112+
113+ @lru_cache (maxsize = 128 )
114+ def _parse_data (
115+ _service_data : bytes , _mfr_data : bytes | None
116+ ) -> SwitchBotAdvertisement | None :
117+ """Parse advertisement data."""
118+ _model = chr (_service_data [0 ] & 0b01111111 )
109119 data = {
110- "address" : device .address , # MacOS uses UUIDs
111- "rawAdvData" : list (advertisement_data .service_data .values ())[0 ],
120+ "rawAdvData" : _service_data ,
112121 "data" : {},
113122 "model" : _model ,
114123 "isEncrypted" : bool (_service_data [0 ] & 0b10000000 ),
@@ -124,6 +133,4 @@ def parse_advertisement_data(
124133 }
125134 )
126135
127- data ["data" ]["rssi" ] = device .rssi
128-
129- return SwitchBotAdvertisement (device .address , data , device )
136+ return data
0 commit comments