Browse Source

Fix contact_open timeout (#184)

Co-authored-by: J. Nick Koston <nick@koston.org>
Daniel Cousens 1 year ago
parent
commit
9bad836202
2 changed files with 5 additions and 4 deletions
  1. 3 2
      switchbot/adv_parsers/contact.py
  2. 2 2
      tests/test_adv_parser.py

+ 3 - 2
switchbot/adv_parsers/contact.py

@@ -11,16 +11,17 @@ def process_wocontact(
 
     battery = data[2] & 0b01111111 if data else None
     tested = bool(data[1] & 0b10000000) if data else None
-    contact_timeout = data[3] & 0b00000100 == 0b00000100 if data else False
 
     if mfr_data and len(mfr_data) >= 13:
         motion_detected = bool(mfr_data[7] & 0b10000000)
         contact_open = bool(mfr_data[7] & 0b00010000)
+        contact_timeout = bool(mfr_data[7] & 0b00100000)
         button_count = mfr_data[12] & 0b00001111
         is_light = bool(mfr_data[7] & 0b01000000)
     else:
         motion_detected = bool(data[1] & 0b01000000)
-        contact_open = data[3] & 0b00000010 == 0b00000010
+        contact_open = bool(data[3] & 0b00000010)
+        contact_timeout = bool(data[3] & 0b00000100)
         button_count = data[8] & 0b00001111
         is_light = bool(data[3] & 0b00000001)
 

+ 2 - 2
tests/test_adv_parser.py

@@ -504,8 +504,8 @@ def test_contact_sensor_mfr_no_service_data():
             "data": {
                 "battery": None,
                 "button_count": 4,
-                "contact_open": False,
-                "contact_timeout": False,
+                "contact_open": True,
+                "contact_timeout": True,
                 "is_light": False,
                 "motion_detected": False,
                 "tested": None,