Browse Source

Fix contact sensor not seeing timeout as open (#133)

J. Nick Koston 1 year ago
parent
commit
265d8e7a5c
1 changed files with 4 additions and 2 deletions
  1. 4 2
      switchbot/adv_parsers/contact.py

+ 4 - 2
switchbot/adv_parsers/contact.py

@@ -4,12 +4,14 @@ from __future__ import annotations
 
 def process_wocontact(data: bytes, mfr_data: bytes | None) -> dict[str, bool | int]:
     """Process woContact Sensor services data."""
+    contact_timeout = data[3] & 0b00000110 == 0b00000110
+    contact_open = data[3] & 0b00000010 == 0b00000010
     return {
         "tested": bool(data[1] & 0b10000000),
         "motion_detected": bool(data[1] & 0b01000000),
         "battery": data[2] & 0b01111111,
-        "contact_open": data[3] & 0b00000010 == 0b00000010,
-        "contact_timeout": data[3] & 0b00000110 == 0b00000110,
+        "contact_open": contact_open or contact_timeout,  # timeout still means its open
+        "contact_timeout": contact_timeout,
         "is_light": bool(data[3] & 0b00000001),
         "button_count": (data[8] & 0b00001111),
     }