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)
|