2024-02-19 19:59:09 +00:00
|
|
|
"""Module for led controls."""
|
2024-04-16 18:21:20 +00:00
|
|
|
|
2024-04-17 13:39:24 +00:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
from typing import TYPE_CHECKING
|
2024-02-19 19:59:09 +00:00
|
|
|
|
2024-04-24 16:38:52 +00:00
|
|
|
from ...feature import Feature
|
2024-02-19 19:59:09 +00:00
|
|
|
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"
|
|
|
|
|
2024-04-17 13:39:24 +00:00
|
|
|
def __init__(self, device: SmartDevice, module: str):
|
2024-02-19 19:59:09 +00:00
|
|
|
super().__init__(device, module)
|
|
|
|
self._add_feature(
|
|
|
|
Feature(
|
|
|
|
device=device,
|
|
|
|
container=self,
|
2024-05-07 09:13:35 +00:00
|
|
|
id="led",
|
2024-02-19 19:59:09 +00:00
|
|
|
name="LED",
|
|
|
|
icon="mdi:led-{state}",
|
|
|
|
attribute_getter="led",
|
|
|
|
attribute_setter="set_led",
|
2024-04-24 16:38:52 +00:00
|
|
|
type=Feature.Type.Switch,
|
2024-04-23 17:20:12 +00:00
|
|
|
category=Feature.Category.Config,
|
2024-02-19 19:59:09 +00:00
|
|
|
)
|
|
|
|
)
|
|
|
|
|
2024-04-17 13:39:24 +00:00
|
|
|
def query(self) -> dict:
|
2024-02-19 19:59:09 +00:00
|
|
|
"""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"],
|
|
|
|
}
|