소스 검색

fix: add support for zero data with non-zero battery from Meter (#571)

* Add support for zero data with non-zero battery from Meter

* Fix wrong spelling

---------

Co-authored-by: Retha Runolfsson <137745329+zerzhang@users.noreply.github.com>
Sheldon Ip 2 주 전
부모
커밋
c8535bf312
2개의 변경된 파일과 42개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 1
      switchbot/adv_parsers/_sensor_th.py
  2. 41 0
      tests/test_adv_parser.py

+ 1 - 1
switchbot/adv_parsers/_sensor_th.py

@@ -24,7 +24,7 @@ def decode_temp_humidity(temp_data: bytes, battery: int | None) -> dict[str, Any
     _temp_f = (_temp_f * 10) / 10
     humidity = temp_data[2] & 0b01111111
 
-    if _temp_c == 0 and humidity == 0 and battery == 0:
+    if _temp_c == 0 and humidity == 0:
         return {}
 
     return {

+ 41 - 0
tests/test_adv_parser.py

@@ -937,6 +937,30 @@ def test_wosensor_active_zero_data():
     )
 
 
+def test_wosensor_active_positive_battery_and_zero_data():
+    """Test parsing wosensor with active data and positive battery but all other values are zero."""
+    ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
+    adv_data = generate_advertisement_data(
+        manufacturer_data={},
+        service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"T\x00P\x00\x00\x00"},
+        tx_power=-127,
+        rssi=-50,
+    )
+    result = parse_advertisement_data(ble_device, adv_data)
+    assert result == SwitchBotAdvertisement(
+        address="aa:bb:cc:dd:ee:ff",
+        data={
+            "data": {},
+            "isEncrypted": False,
+            "model": "T",
+            "rawAdvData": b"T\x00P\x00\x00\x00",
+        },
+        device=ble_device,
+        rssi=-50,
+        active=True,
+    )
+
+
 def test_wohub2_passive_and_active():
     """Test parsing wosensor as passive with active data as well."""
     ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
@@ -5058,6 +5082,23 @@ def test_weather_station_empty_data() -> None:
     assert result.data["data"] == {}
 
 
+def test_weather_station_positive_battery_and_empty_data() -> None:
+    """Test Weather Station with positive battery and empty/zero data returns empty dict."""
+    ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
+    adv_data = generate_advertisement_data(
+        manufacturer_data={
+            2409: b"\xaa\xbb\xcc\xdd\xee\xff\x01P\x00\x80\x00\x00\x00\x00\x00\x00"
+        },
+        service_data={
+            "0000fd3d-0000-1000-8000-00805f9b34fb": b"\x00\x00\x00\x00\x10\x53\xb0"
+        },
+        rssi=-67,
+    )
+    result = parse_advertisement_data(ble_device, adv_data)
+    assert result is not None
+    assert result.data["data"] == {}
+
+
 def test_weather_station_short_service_data() -> None:
     """Test Weather Station with too-short service data does not raise IndexError."""
     ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")