Skip to content

Commit 4226355

Browse files
authored
Update for bleak 0.19 (#130)
1 parent dba64fa commit 4226355

File tree

4 files changed

+31
-5
lines changed

4 files changed

+31
-5
lines changed

switchbot/adv_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def parse_advertisement_data(
107107
_mfr_data = _mgr_datas[0] if _mgr_datas else None
108108

109109
data = _parse_data(_service_data, _mfr_data)
110-
return SwitchBotAdvertisement(device.address, data, device)
110+
return SwitchBotAdvertisement(device.address, data, device, advertisement_data.rssi)
111111

112112

113113
@lru_cache(maxsize=128)

switchbot/devices/device.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,9 @@ def name(self) -> str:
193193
@property
194194
def rssi(self) -> int:
195195
"""Return RSSI of device."""
196-
return self._get_adv_value("rssi") or self._device.rssi
196+
if self._sb_adv_data:
197+
return self._sb_adv_data.rssi
198+
return self._device.rssi
197199

198200
async def _ensure_connected(self):
199201
"""Ensure connection to device is established."""

switchbot/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ class SwitchBotAdvertisement:
1414
address: str
1515
data: dict[str, Any]
1616
device: BLEDevice
17+
rssi: int

tests/test_adv_parser.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,37 @@
1+
from typing import Any
12
from switchbot.adv_parser import parse_advertisement_data
23
from bleak.backends.scanner import AdvertisementData
34
from bleak.backends.device import BLEDevice
45

56
from switchbot.models import SwitchBotAdvertisement
67
from switchbot import SwitchbotModel
78

9+
ADVERTISEMENT_DATA_DEFAULTS = {
10+
"local_name": "",
11+
"manufacturer_data": {},
12+
"service_data": {},
13+
"service_uuids": [],
14+
"rssi": -127,
15+
"platform_data": ((),),
16+
"tx_power": -127,
17+
}
18+
19+
20+
def generate_advertisement_data(**kwargs: Any) -> AdvertisementData:
21+
"""Generate advertisement data with defaults."""
22+
new = kwargs.copy()
23+
for key, value in ADVERTISEMENT_DATA_DEFAULTS.items():
24+
new.setdefault(key, value)
25+
return AdvertisementData(**new)
26+
827

928
def test_parse_advertisement_data_curtain():
1029
"""Test parse_advertisement_data for curtain."""
1130
ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
12-
adv_data = AdvertisementData(
31+
adv_data = generate_advertisement_data(
1332
manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
1433
service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"c\xc0X\x00\x11\x04"},
34+
rssi=-80,
1535
)
1636
result = parse_advertisement_data(ble_device, adv_data)
1737
assert result == SwitchBotAdvertisement(
@@ -32,13 +52,14 @@ def test_parse_advertisement_data_curtain():
3252
"modelName": SwitchbotModel.CURTAIN,
3353
},
3454
device=ble_device,
55+
rssi=-80,
3556
)
3657

3758

3859
def test_parse_advertisement_data_empty():
3960
"""Test parse_advertisement_data with empty data does not blow up."""
4061
ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
41-
adv_data = AdvertisementData(
62+
adv_data = generate_advertisement_data(
4263
manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
4364
service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b""},
4465
)
@@ -49,10 +70,11 @@ def test_parse_advertisement_data_empty():
4970
def test_new_bot_firmware():
5071
"""Test parsing adv data from new bot firmware."""
5172
ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
52-
adv_data = AdvertisementData(
73+
adv_data = generate_advertisement_data(
5374
manufacturer_data={89: b"\xd8.\xad\xcd\r\x85"},
5475
service_data={"00000d00-0000-1000-8000-00805f9b34fb": b"H\x10\xe1"},
5576
service_uuids=["CBA20D00-224D-11E6-9FB8-0002A5D5C51B"],
77+
rssi=-90,
5678
)
5779
result = parse_advertisement_data(ble_device, adv_data)
5880
assert result == SwitchBotAdvertisement(
@@ -66,4 +88,5 @@ def test_new_bot_firmware():
6688
"modelName": SwitchbotModel.BOT,
6789
},
6890
device=ble_device,
91+
rssi=-90,
6992
)

0 commit comments

Comments
 (0)