-
-
Notifications
You must be signed in to change notification settings - Fork 187
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto auto-off module for smartdevice (#760)
Adds auto-off implementation. The feature stays enabled after the timer runs out, and it will start the countdown if the device is turned on again without explicitly disabling it. New features: * Switch to select if enabled: `Auto off enabled (auto_off_enabled): False` * Setting to change the delay: `Auto off minutes (auto_off_minutes): 222` * If timer is active, datetime object when the device gets turned off: `Auto off at (auto_off_at): None`
- Loading branch information
Showing
5 changed files
with
90 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
"""Implementation of auto off module.""" | ||
from datetime import datetime, timedelta | ||
from typing import TYPE_CHECKING, Dict, Optional | ||
|
||
from ...feature import Feature | ||
from ..smartmodule import SmartModule | ||
|
||
if TYPE_CHECKING: | ||
from ..smartdevice import SmartDevice | ||
|
||
|
||
class AutoOffModule(SmartModule): | ||
"""Implementation of auto off module.""" | ||
|
||
REQUIRED_COMPONENT = "auto_off" | ||
QUERY_GETTER_NAME = "get_auto_off_config" | ||
|
||
def __init__(self, device: "SmartDevice", module: str): | ||
super().__init__(device, module) | ||
self._add_feature( | ||
Feature( | ||
device, | ||
"Auto off enabled", | ||
container=self, | ||
attribute_getter="enabled", | ||
attribute_setter="set_enabled", | ||
) | ||
) | ||
self._add_feature( | ||
Feature( | ||
device, | ||
"Auto off minutes", | ||
container=self, | ||
attribute_getter="delay", | ||
attribute_setter="set_delay", | ||
) | ||
) | ||
self._add_feature( | ||
Feature( | ||
device, "Auto off at", container=self, attribute_getter="auto_off_at" | ||
) | ||
) | ||
|
||
def query(self) -> Dict: | ||
"""Query to execute during the update cycle.""" | ||
return {self.QUERY_GETTER_NAME: {"start_index": 0}} | ||
|
||
@property | ||
def enabled(self) -> bool: | ||
"""Return True if enabled.""" | ||
return self.data["enable"] | ||
|
||
def set_enabled(self, enable: bool): | ||
"""Enable/disable auto off.""" | ||
return self.call( | ||
"set_auto_off_config", | ||
{"enable": enable, "delay_min": self.data["delay_min"]}, | ||
) | ||
|
||
@property | ||
def delay(self) -> int: | ||
"""Return time until auto off.""" | ||
return self.data["delay_min"] | ||
|
||
def set_delay(self, delay: int): | ||
"""Set time until auto off.""" | ||
return self.call( | ||
"set_auto_off_config", {"delay_min": delay, "enable": self.data["enable"]} | ||
) | ||
|
||
@property | ||
def is_timer_active(self) -> bool: | ||
"""Return True is auto-off timer is active.""" | ||
return self._device.sys_info["auto_off_status"] == "on" | ||
|
||
@property | ||
def auto_off_at(self) -> Optional[datetime]: | ||
"""Return when the device will be turned off automatically.""" | ||
if not self.is_timer_active: | ||
return None | ||
|
||
sysinfo = self._device.sys_info | ||
|
||
return self._device.time + timedelta(seconds=sysinfo["auto_off_remain_time"]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters