1
0
Эх сурвалжийг харах

feat(presence sensor): add duration parsing and fix lightLevel mask (#426)

Co-authored-by: J. Nick Koston <nick@koston.org>
Yoshio HANAWA 4 өдөр өмнө
parent
commit
eb25905735

+ 3 - 1
switchbot/adv_parsers/presence_sensor.py

@@ -21,15 +21,17 @@ def process_presence_sensor(
     motion_detected = bool(mfr_data[7] & 0x40)
     battery_bits = (mfr_data[7] >> 2) & 0x03
     battery_range = BATTERY_LEVEL_MAP.get(battery_bits, "Unknown")
+    duration = (mfr_data[8] << 8) + mfr_data[9]
     trigger_flag = mfr_data[10]
     led_state = bool(mfr_data[11] & 0x80)
-    light_level = mfr_data[11] & 0x0F
+    light_level = mfr_data[11] & 0x1F
 
     result = {
         "sequence_number": seq_number,
         "adaptive_state": adaptive_state,
         "motion_detected": motion_detected,
         "battery_range": battery_range,
+        "duration": duration,
         "trigger_flag": trigger_flag,
         "led_state": led_state,
         "lightLevel": light_level,

+ 2 - 0
tests/test_adv_parser.py

@@ -3508,6 +3508,7 @@ def test_humidifer_with_empty_data() -> None:
                 "adaptive_state": True,
                 "battery": 100,
                 "battery_range": ">=60%",
+                "duration": 1110,
                 "led_state": True,
                 "lightLevel": 12,
                 "motion_detected": True,
@@ -3821,6 +3822,7 @@ def test_adv_active(test_case: AdvTestCase) -> None:
             {
                 "adaptive_state": True,
                 "battery_range": ">=60%",
+                "duration": 1110,
                 "led_state": True,
                 "lightLevel": 12,
                 "motion_detected": True,