Add fan module (#764)

Co-authored-by: Steven B <51370195+sdb9696@users.noreply.github.com>
This commit is contained in:
Teemu R
2024-04-17 12:07:16 +02:00
committed by GitHub
parent da441bc697
commit 700643d3cf
8 changed files with 120 additions and 7 deletions

View File

@@ -9,6 +9,7 @@ from .cloudmodule import CloudModule
from .colortemp import ColorTemperatureModule
from .devicemodule import DeviceModule
from .energymodule import EnergyModule
from .fanmodule import FanModule
from .firmware import Firmware
from .humidity import HumiditySensor
from .ledmodule import LedModule
@@ -30,6 +31,7 @@ __all__ = [
"AutoOffModule",
"LedModule",
"Brightness",
"FanModule",
"Firmware",
"CloudModule",
"LightTransitionModule",

View File

@@ -0,0 +1,66 @@
"""Implementation of fan_control module."""
from typing import TYPE_CHECKING, Dict
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})