Browse Source

Update for bleak 0.19 (#130)

J. Nick Koston 1 year ago
parent
commit
4226355fab
4 changed files with 31 additions and 5 deletions
  1. 1 1
      switchbot/adv_parser.py
  2. 3 1
      switchbot/devices/device.py
  3. 1 0
      switchbot/models.py
  4. 26 3
      tests/test_adv_parser.py

+ 1 - 1
switchbot/adv_parser.py

@@ -107,7 +107,7 @@ def parse_advertisement_data(
     _mfr_data = _mgr_datas[0] if _mgr_datas else None
 
     data = _parse_data(_service_data, _mfr_data)
-    return SwitchBotAdvertisement(device.address, data, device)
+    return SwitchBotAdvertisement(device.address, data, device, advertisement_data.rssi)
 
 
 @lru_cache(maxsize=128)

+ 3 - 1
switchbot/devices/device.py

@@ -193,7 +193,9 @@ class SwitchbotBaseDevice:
     @property
     def rssi(self) -> int:
         """Return RSSI of device."""
-        return self._get_adv_value("rssi") or self._device.rssi
+        if self._sb_adv_data:
+            return self._sb_adv_data.rssi
+        return self._device.rssi
 
     async def _ensure_connected(self):
         """Ensure connection to device is established."""

+ 1 - 0
switchbot/models.py

@@ -14,3 +14,4 @@ class SwitchBotAdvertisement:
     address: str
     data: dict[str, Any]
     device: BLEDevice
+    rssi: int

+ 26 - 3
tests/test_adv_parser.py

@@ -1,3 +1,4 @@
+from typing import Any
 from switchbot.adv_parser import parse_advertisement_data
 from bleak.backends.scanner import AdvertisementData
 from bleak.backends.device import BLEDevice
@@ -5,13 +6,32 @@ from bleak.backends.device import BLEDevice
 from switchbot.models import SwitchBotAdvertisement
 from switchbot import SwitchbotModel
 
+ADVERTISEMENT_DATA_DEFAULTS = {
+    "local_name": "",
+    "manufacturer_data": {},
+    "service_data": {},
+    "service_uuids": [],
+    "rssi": -127,
+    "platform_data": ((),),
+    "tx_power": -127,
+}
+
+
+def generate_advertisement_data(**kwargs: Any) -> AdvertisementData:
+    """Generate advertisement data with defaults."""
+    new = kwargs.copy()
+    for key, value in ADVERTISEMENT_DATA_DEFAULTS.items():
+        new.setdefault(key, value)
+    return AdvertisementData(**new)
+
 
 def test_parse_advertisement_data_curtain():
     """Test parse_advertisement_data for curtain."""
     ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
-    adv_data = AdvertisementData(
+    adv_data = generate_advertisement_data(
         manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
         service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"c\xc0X\x00\x11\x04"},
+        rssi=-80,
     )
     result = parse_advertisement_data(ble_device, adv_data)
     assert result == SwitchBotAdvertisement(
@@ -32,13 +52,14 @@ def test_parse_advertisement_data_curtain():
             "modelName": SwitchbotModel.CURTAIN,
         },
         device=ble_device,
+        rssi=-80,
     )
 
 
 def test_parse_advertisement_data_empty():
     """Test parse_advertisement_data with empty data does not blow up."""
     ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
-    adv_data = AdvertisementData(
+    adv_data = generate_advertisement_data(
         manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
         service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b""},
     )
@@ -49,10 +70,11 @@ def test_parse_advertisement_data_empty():
 def test_new_bot_firmware():
     """Test parsing adv data from new bot firmware."""
     ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
-    adv_data = AdvertisementData(
+    adv_data = generate_advertisement_data(
         manufacturer_data={89: b"\xd8.\xad\xcd\r\x85"},
         service_data={"00000d00-0000-1000-8000-00805f9b34fb": b"H\x10\xe1"},
         service_uuids=["CBA20D00-224D-11E6-9FB8-0002A5D5C51B"],
+        rssi=-90,
     )
     result = parse_advertisement_data(ble_device, adv_data)
     assert result == SwitchBotAdvertisement(
@@ -66,4 +88,5 @@ def test_new_bot_firmware():
             "modelName": SwitchbotModel.BOT,
         },
         device=ble_device,
+        rssi=-90,
     )