File: leak.py

package info (click to toggle)
pyswitchbot 0.72.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 876 kB
  • sloc: python: 12,717; makefile: 2
file content (29 lines) | stat: -rw-r--r-- 918 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"""Leak detector adv parser."""


def process_leak(data: bytes | None, mfr_data: bytes | None) -> dict[str, bool | int]:
    """Process SwitchBot Water Leak Detector advertisement data."""
    if data is None or len(data) < 3 or mfr_data is None or len(mfr_data) < 2:
        return {}

    water_leak_detected = None
    device_tampered = None
    battery_level = None
    low_battery = None

    # Byte 1: Event Flags
    event_flags = mfr_data[8]
    water_leak_detected = bool(event_flags & 0b00000001)  # Bit 0
    device_tampered = bool(event_flags & 0b00000010)  # Bit 1

    # Byte 2: Battery Info
    battery_info = mfr_data[7]
    battery_level = battery_info & 0b01111111  # Bits 0-6
    low_battery = bool(battery_info & 0b10000000)  # Bit 7

    return {
        "leak": water_leak_detected,
        "tampered": device_tampered,
        "battery": battery_level,
        "low_battery": low_battery,
    }