File: keypad.py

package info (click to toggle)
python-yalexs 8.11.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,016 kB
  • sloc: python: 6,593; makefile: 3; sh: 2
file content (48 lines) | stat: -rw-r--r-- 1,277 bytes parent folder | download
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from ._compat import cached_property
from .device import DeviceDetail

BATTERY_LEVEL_FULL = "Full"
BATTERY_LEVEL_MEDIUM = "Medium"
BATTERY_LEVEL_LOW = "Low"

_LEVEL_TO_VALUE = {
    BATTERY_LEVEL_FULL: 100,
    BATTERY_LEVEL_MEDIUM: 60,
    BATTERY_LEVEL_LOW: 10,
}

_MAX_LEVEL = 200
_MIN_LEVEL = 120
_RATIO = 100 / (_MAX_LEVEL - _MIN_LEVEL)


class KeypadDetail(DeviceDetail):
    def __init__(self, house_id, keypad_name, data):
        super().__init__(
            data["_id"],
            keypad_name,
            house_id,
            data["serialNumber"],
            data["currentFirmwareVersion"],
            None,
            data,
        )
        self._battery_raw = data.get("batteryRaw")
        self._battery_level = data["batteryLevel"]

    @cached_property
    def model(self):
        return "AK-R1"

    @cached_property
    def battery_level(self):
        return self._battery_level

    @cached_property
    def battery_percentage(self):
        """Return an approximation of the battery percentage."""
        if self._battery_raw is not None:
            return int(max(0, min(100, (self._battery_raw - _MIN_LEVEL) * _RATIO)))
        if self._battery_level is None:
            return None
        return _LEVEL_TO_VALUE.get(self._battery_level, 0)