contact.py 702 B

1234567891011121314151617
  1. """Contact sensor parser."""
  2. from __future__ import annotations
  3. def process_wocontact(data: bytes, mfr_data: bytes | None) -> dict[str, bool | int]:
  4. """Process woContact Sensor services data."""
  5. contact_timeout = data[3] & 0b00000100 == 0b00000100
  6. contact_open = data[3] & 0b00000010 == 0b00000010
  7. return {
  8. "tested": bool(data[1] & 0b10000000),
  9. "motion_detected": bool(data[1] & 0b01000000),
  10. "battery": data[2] & 0b01111111,
  11. "contact_open": contact_open or contact_timeout, # timeout still means its open
  12. "contact_timeout": contact_timeout,
  13. "is_light": bool(data[3] & 0b00000001),
  14. "button_count": (data[8] & 0b00001111),
  15. }