mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 11:43:34 +00:00
b860c32d5f
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.
71 lines
2.0 KiB
Python
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})
|