mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 03:33:35 +00:00
Add powerprotection module
This commit is contained in:
parent
123ea107b1
commit
06dbc7d7ce
@ -24,6 +24,7 @@ from .lightpreset import LightPreset
|
|||||||
from .lightstripeffect import LightStripEffect
|
from .lightstripeffect import LightStripEffect
|
||||||
from .lighttransition import LightTransition
|
from .lighttransition import LightTransition
|
||||||
from .motionsensor import MotionSensor
|
from .motionsensor import MotionSensor
|
||||||
|
from .powerprotection import PowerProtection
|
||||||
from .reportmode import ReportMode
|
from .reportmode import ReportMode
|
||||||
from .temperaturecontrol import TemperatureControl
|
from .temperaturecontrol import TemperatureControl
|
||||||
from .temperaturesensor import TemperatureSensor
|
from .temperaturesensor import TemperatureSensor
|
||||||
@ -64,4 +65,5 @@ __all__ = [
|
|||||||
"FrostProtection",
|
"FrostProtection",
|
||||||
"Thermostat",
|
"Thermostat",
|
||||||
"SmartLightEffect",
|
"SmartLightEffect",
|
||||||
|
"PowerProtection",
|
||||||
]
|
]
|
||||||
|
98
kasa/smart/modules/powerprotection.py
Normal file
98
kasa/smart/modules/powerprotection.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
"""Power protection module."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from ...feature import Feature
|
||||||
|
from ..smartmodule import SmartModule
|
||||||
|
|
||||||
|
|
||||||
|
class PowerProtection(SmartModule):
|
||||||
|
"""Implementation for power_protection."""
|
||||||
|
|
||||||
|
REQUIRED_COMPONENT = "power_protection"
|
||||||
|
|
||||||
|
def _initialize_features(self) -> None:
|
||||||
|
"""Initialize features after the initial update."""
|
||||||
|
self._add_feature(
|
||||||
|
Feature(
|
||||||
|
device=self._device,
|
||||||
|
id="overloaded",
|
||||||
|
name="Overloaded",
|
||||||
|
container=self,
|
||||||
|
attribute_getter="overloaded",
|
||||||
|
type=Feature.Type.BinarySensor,
|
||||||
|
category=Feature.Category.Info,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self._add_feature(
|
||||||
|
Feature(
|
||||||
|
device=self._device,
|
||||||
|
id="power_protection_enabled",
|
||||||
|
name="Power protection enabled",
|
||||||
|
container=self,
|
||||||
|
attribute_getter="enabled",
|
||||||
|
attribute_setter="set_enabled",
|
||||||
|
type=Feature.Type.Switch,
|
||||||
|
category=Feature.Category.Config,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self._add_feature(
|
||||||
|
Feature(
|
||||||
|
device=self._device,
|
||||||
|
id="power_protection_threshold",
|
||||||
|
name="Power protection threshold",
|
||||||
|
container=self,
|
||||||
|
attribute_getter="protection_threshold",
|
||||||
|
attribute_setter="set_protection_threshold",
|
||||||
|
unit_getter=lambda: "W",
|
||||||
|
type=Feature.Type.Number,
|
||||||
|
range_getter="protection_threshold_range",
|
||||||
|
category=Feature.Category.Config,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def query(self) -> dict:
|
||||||
|
"""Query to execute during the update cycle."""
|
||||||
|
return {"get_protection_power": None, "get_max_power": None}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def overloaded(self) -> bool:
|
||||||
|
"""Return True is power protection has been triggered.
|
||||||
|
|
||||||
|
This value remains True until the device is turned on again.
|
||||||
|
"""
|
||||||
|
return self._device.sys_info["power_protection_status"] == "overloaded"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def enabled(self) -> bool:
|
||||||
|
"""Return True if child protection is enabled."""
|
||||||
|
return self.data["get_protection_power"]["enabled"]
|
||||||
|
|
||||||
|
async def set_enabled(self, enabled: bool) -> dict:
|
||||||
|
"""Set child protection."""
|
||||||
|
params = {**self.data["get_protection_power"], "enabled": enabled}
|
||||||
|
return await self.call("set_protection_power", params)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def protection_threshold_range(self) -> tuple[int, int]:
|
||||||
|
"""Return threshold range."""
|
||||||
|
return 0, self.data["get_max_power"]["max_power"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def protection_threshold(self) -> int:
|
||||||
|
"""Return protection threshold in watts."""
|
||||||
|
# If never configured, there is no value set.
|
||||||
|
return self.data["get_protection_power"].get("protection_power", 0)
|
||||||
|
|
||||||
|
async def set_protection_threshold(self, threshold: int) -> dict:
|
||||||
|
"""Set protection threshold."""
|
||||||
|
if threshold < 0 or threshold > self.protection_threshold_range[1]:
|
||||||
|
raise ValueError(
|
||||||
|
"Threshold out of range: %s (%s)", threshold, self.protection_threshold
|
||||||
|
)
|
||||||
|
|
||||||
|
params = {
|
||||||
|
**self.data["get_protection_power"],
|
||||||
|
"protection_power": threshold,
|
||||||
|
}
|
||||||
|
return await self.call("set_protection_power", params)
|
Loading…
Reference in New Issue
Block a user