mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
Add smartdevice module for led controls (#761)
Allows controlling LED on devices that support it.
This commit is contained in:
parent
f5175c5632
commit
44b59efbb2
@ -3,6 +3,7 @@ from .childdevicemodule import ChildDeviceModule
|
||||
from .cloudmodule import CloudModule
|
||||
from .devicemodule import DeviceModule
|
||||
from .energymodule import EnergyModule
|
||||
from .ledmodule import LedModule
|
||||
from .lighttransitionmodule import LightTransitionModule
|
||||
from .timemodule import TimeModule
|
||||
|
||||
@ -11,6 +12,7 @@ __all__ = [
|
||||
"EnergyModule",
|
||||
"DeviceModule",
|
||||
"ChildDeviceModule",
|
||||
"LedModule",
|
||||
"CloudModule",
|
||||
"LightTransitionModule",
|
||||
]
|
||||
|
65
kasa/smart/modules/ledmodule.py
Normal file
65
kasa/smart/modules/ledmodule.py
Normal file
@ -0,0 +1,65 @@
|
||||
"""Module for led controls."""
|
||||
from typing import TYPE_CHECKING, Dict
|
||||
|
||||
from ...feature import Feature, FeatureType
|
||||
from ..smartmodule import SmartModule
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..smartdevice import SmartDevice
|
||||
|
||||
|
||||
class LedModule(SmartModule):
|
||||
"""Implementation of led controls."""
|
||||
|
||||
REQUIRED_COMPONENT = "led"
|
||||
QUERY_GETTER_NAME = "get_led_info"
|
||||
|
||||
def __init__(self, device: "SmartDevice", module: str):
|
||||
super().__init__(device, module)
|
||||
self._add_feature(
|
||||
Feature(
|
||||
device=device,
|
||||
container=self,
|
||||
name="LED",
|
||||
icon="mdi:led-{state}",
|
||||
attribute_getter="led",
|
||||
attribute_setter="set_led",
|
||||
type=FeatureType.Switch,
|
||||
)
|
||||
)
|
||||
|
||||
def query(self) -> Dict:
|
||||
"""Query to execute during the update cycle."""
|
||||
return {self.QUERY_GETTER_NAME: {"led_rule": None}}
|
||||
|
||||
@property
|
||||
def mode(self):
|
||||
"""LED mode setting.
|
||||
|
||||
"always", "never", "night_mode"
|
||||
"""
|
||||
return self.data["led_rule"]
|
||||
|
||||
@property
|
||||
def led(self):
|
||||
"""Return current led status."""
|
||||
return self.data["led_status"]
|
||||
|
||||
async def set_led(self, enable: bool):
|
||||
"""Set led.
|
||||
|
||||
This should probably be a select with always/never/nightmode.
|
||||
"""
|
||||
rule = "always" if enable else "never"
|
||||
return await self.call("set_led_info", self.data | {"led_rule": rule})
|
||||
|
||||
@property
|
||||
def night_mode_settings(self):
|
||||
"""Night mode settings."""
|
||||
return {
|
||||
"start": self.data["start_time"],
|
||||
"end": self.data["end_time"],
|
||||
"type": self.data["night_mode_type"],
|
||||
"sunrise_offset": self.data["sunrise_offset"],
|
||||
"sunset_offset": self.data["sunset_offset"],
|
||||
}
|
@ -14,8 +14,10 @@ from ..feature import Feature, FeatureType
|
||||
from ..smartprotocol import SmartProtocol
|
||||
from .modules import ( # noqa: F401
|
||||
ChildDeviceModule,
|
||||
CloudModule,
|
||||
DeviceModule,
|
||||
EnergyModule,
|
||||
LedModule,
|
||||
LightTransitionModule,
|
||||
TimeModule,
|
||||
)
|
||||
|
@ -46,6 +46,20 @@ class FakeSmartTransport(BaseTransport):
|
||||
|
||||
FIXTURE_MISSING_MAP = {
|
||||
"get_wireless_scan_info": ("wireless", {"ap_list": [], "wep_supported": False}),
|
||||
"get_led_info": (
|
||||
"led",
|
||||
{
|
||||
"led_rule": "never",
|
||||
"led_status": False,
|
||||
"night_mode": {
|
||||
"end_time": 420,
|
||||
"night_mode_type": "sunrise_sunset",
|
||||
"start_time": 1140,
|
||||
"sunrise_offset": 0,
|
||||
"sunset_offset": 0,
|
||||
},
|
||||
},
|
||||
),
|
||||
"get_connect_cloud_state": ("cloud_connect", {"status": 1}),
|
||||
"get_on_off_gradually_info": ("on_off_gradually", {"enable": True}),
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user