python-kasa/kasa/smart/modules/fanmodule.py

70 lines
2.0 KiB
Python

"""Implementation of fan_control module."""
from __future__ import annotations
from typing import TYPE_CHECKING
from ...feature import Feature, FeatureType
from ..smartmodule import SmartModule
if TYPE_CHECKING:
from ..smartdevice import SmartDevice
class FanModule(SmartModule):
"""Implementation of fan_control module."""
REQUIRED_COMPONENT = "fan_control"
def __init__(self, device: SmartDevice, module: str):
super().__init__(device, module)
self._add_feature(
Feature(
device,
"Fan speed level",
container=self,
attribute_getter="fan_speed_level",
attribute_setter="set_fan_speed_level",
icon="mdi:fan",
type=FeatureType.Number,
minimum_value=1,
maximum_value=4,
)
)
self._add_feature(
Feature(
device,
"Fan sleep mode",
container=self,
attribute_getter="sleep_mode",
attribute_setter="set_sleep_mode",
icon="mdi:sleep",
type=FeatureType.Switch,
)
)
def query(self) -> dict:
"""Query to execute during the update cycle."""
return {}
@property
def fan_speed_level(self) -> int:
"""Return fan speed level."""
return self.data["fan_speed_level"]
async def set_fan_speed_level(self, level: int):
"""Set fan speed level."""
if level < 1 or level > 4:
raise ValueError("Invalid level, should be in range 1-4.")
return await self.call("set_device_info", {"fan_speed_level": level})
@property
def sleep_mode(self) -> bool:
"""Return sleep mode status."""
return self.data["fan_sleep_mode_on"]
async def set_sleep_mode(self, on: bool):
"""Set sleep mode."""
return await self.call("set_device_info", {"fan_sleep_mode_on": on})