Fallback to is_low for batterysensor's battery_low (#1420)

Fallback to `is_low` if `at_low_battery` is not available.
This commit is contained in:
Teemu R. 2025-01-15 14:33:05 +01:00 committed by GitHub
parent 1355e85f8e
commit 2ab42f59b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,7 +2,11 @@
from __future__ import annotations from __future__ import annotations
from typing import Annotated
from ...exceptions import KasaException
from ...feature import Feature from ...feature import Feature
from ...module import FeatureAttribute
from ..smartmodule import SmartModule from ..smartmodule import SmartModule
@ -14,18 +18,22 @@ class BatterySensor(SmartModule):
def _initialize_features(self) -> None: def _initialize_features(self) -> None:
"""Initialize features.""" """Initialize features."""
self._add_feature( if (
Feature( "at_low_battery" in self._device.sys_info
self._device, or "is_low" in self._device.sys_info
"battery_low", ):
"Battery low", self._add_feature(
container=self, Feature(
attribute_getter="battery_low", self._device,
icon="mdi:alert", "battery_low",
type=Feature.Type.BinarySensor, "Battery low",
category=Feature.Category.Debug, container=self,
attribute_getter="battery_low",
icon="mdi:alert",
type=Feature.Type.BinarySensor,
category=Feature.Category.Debug,
)
) )
)
# Some devices, like T110 contact sensor do not report the battery percentage # Some devices, like T110 contact sensor do not report the battery percentage
if "battery_percentage" in self._device.sys_info: if "battery_percentage" in self._device.sys_info:
@ -48,11 +56,17 @@ class BatterySensor(SmartModule):
return {} return {}
@property @property
def battery(self) -> int: def battery(self) -> Annotated[int, FeatureAttribute()]:
"""Return battery level.""" """Return battery level."""
return self._device.sys_info["battery_percentage"] return self._device.sys_info["battery_percentage"]
@property @property
def battery_low(self) -> bool: def battery_low(self) -> Annotated[bool, FeatureAttribute()]:
"""Return True if battery is low.""" """Return True if battery is low."""
return self._device.sys_info["at_low_battery"] is_low = self._device.sys_info.get(
"at_low_battery", self._device.sys_info.get("is_low")
)
if is_low is None:
raise KasaException("Device does not report battery low status")
return is_low