python-kasa/kasa/smart/modules/fanmodule.py
Teemu R b860c32d5f
Implement feature categories (#846)
Initial implementation for feature categories to help downstreams and
our cli tool to categorize the data for more user-friendly manner. As
more and more information is being exposed through the generic features
interface, it is necessary to give some hints to downstreams about how
might want to present the information to users.

This is not a 1:1 mapping to the homeassistant's mental model, and it
will be necessary to fine-tune homeassistant-specific parameters by
other means to polish the presentation.
2024-04-23 19:20:12 +02:00

71 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,
category=Feature.Category.Primary,
)
)
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})