mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-08-06 10:44:04 +00:00
Add fan module (#764)
Co-authored-by: Steven B <51370195+sdb9696@users.noreply.github.com>
This commit is contained in:
@@ -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",
|
||||
|
66
kasa/smart/modules/fanmodule.py
Normal file
66
kasa/smart/modules/fanmodule.py
Normal 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})
|
@@ -49,6 +49,8 @@ class SmartChildDevice(SmartDevice):
|
||||
child_device_map = {
|
||||
"plug.powerstrip.sub-plug": DeviceType.Plug,
|
||||
"subg.trigger.temp-hmdt-sensor": DeviceType.Sensor,
|
||||
"kasa.switch.outlet.sub-fan": DeviceType.Fan,
|
||||
"kasa.switch.outlet.sub-dimmer": DeviceType.Dimmer,
|
||||
}
|
||||
dev_type = child_device_map.get(self.sys_info["category"])
|
||||
if dev_type is None:
|
||||
|
@@ -314,12 +314,11 @@ class SmartDevice(Device):
|
||||
return self._last_update
|
||||
|
||||
def _update_internal_state(self, info):
|
||||
"""Update internal state.
|
||||
"""Update the internal info state.
|
||||
|
||||
This is used by the parent to push updates to its children
|
||||
This is used by the parent to push updates to its children.
|
||||
"""
|
||||
# TODO: cleanup the _last_update, _info mess.
|
||||
self._last_update = self._info = info
|
||||
self._info = info
|
||||
|
||||
async def _query_helper(
|
||||
self, method: str, params: Optional[Dict] = None, child_ids=None
|
||||
|
@@ -62,7 +62,7 @@ class SmartModule(Module):
|
||||
q = self.query()
|
||||
|
||||
if not q:
|
||||
return dev.internal_state["get_device_info"]
|
||||
return dev.sys_info
|
||||
|
||||
q_keys = list(q.keys())
|
||||
query_key = q_keys[0]
|
||||
|
Reference in New Issue
Block a user