Browse Source

Add support for the motion sensor (#55)

J. Nick Koston 1 year ago
parent
commit
b8c023e8e3
1 changed files with 15 additions and 0 deletions
  1. 15 0
      switchbot/__init__.py

+ 15 - 0
switchbot/__init__.py

@@ -123,6 +123,20 @@ def _process_wocontact(data: bytes, mfr_data: bytes | None) -> dict[str, bool |
     }
 
 
+def _process_wopresence(data: bytes, mfr_data: bytes | None) -> dict[str, bool | int]:
+    """Process WoPresence Sensor services data."""
+    return {
+        "tested": bool(data[1] & 0b10000000),
+        "motion_detected": bool(data[1] & 0b01000000),
+        "battery": data[2] & 0b01111111,
+        "led": (data[5] & 0b00100000) >> 5,
+        "iot": (data[5] & 0b00010000) >> 4,
+        "sense_distance": (data[5] & 0b00001100) >> 2,
+        "light_intensity": data[5] & 0b00000011,
+        "is_light": bool(data[5] & 0b00000010),
+    }
+
+
 def _process_woplugmini(data: bytes, mfr_data: bytes | None) -> dict[str, bool | int]:
     """Process plug mini."""
     return {
@@ -157,6 +171,7 @@ def parse_advertisement_data(
     supported_types: dict[str, dict[str, Any]] = {
         "d": {"modelName": "WoContact", "func": _process_wocontact},
         "H": {"modelName": "WoHand", "func": _process_wohand},
+        "s": {"modelName": "WoPresence", "func": _process_wopresence},
         "c": {"modelName": "WoCurtain", "func": _process_wocurtain},
         "T": {"modelName": "WoSensorTH", "func": _process_wosensorth},
         "i": {"modelName": "WoSensorTH", "func": _process_wosensorth},