Allow getting Annotated features from modules (#1018)

Co-authored-by: Teemu R. <tpr@iki.fi>
This commit is contained in:
Steven B.
2024-11-22 07:52:23 +00:00
committed by GitHub
parent cae9decb02
commit 37cc4da7b6
3 changed files with 119 additions and 7 deletions

View File

@@ -2,8 +2,11 @@
from __future__ import annotations
from typing import Annotated
from ...feature import Feature
from ...interfaces.fan import Fan as FanInterface
from ...module import FeatureAttribute
from ..smartmodule import SmartModule
@@ -46,11 +49,13 @@ class Fan(SmartModule, FanInterface):
return {}
@property
def fan_speed_level(self) -> int:
def fan_speed_level(self) -> Annotated[int, FeatureAttribute()]:
"""Return fan speed level."""
return 0 if self.data["device_on"] is False else self.data["fan_speed_level"]
async def set_fan_speed_level(self, level: int) -> dict:
async def set_fan_speed_level(
self, level: int
) -> Annotated[dict, FeatureAttribute()]:
"""Set fan speed level, 0 for off, 1-4 for on."""
if level < 0 or level > 4:
raise ValueError("Invalid level, should be in range 0-4.")
@@ -61,11 +66,11 @@ class Fan(SmartModule, FanInterface):
)
@property
def sleep_mode(self) -> bool:
def sleep_mode(self) -> Annotated[bool, FeatureAttribute()]:
"""Return sleep mode status."""
return self.data["fan_sleep_mode_on"]
async def set_sleep_mode(self, on: bool) -> dict:
async def set_sleep_mode(self, on: bool) -> Annotated[dict, FeatureAttribute()]:
"""Set sleep mode."""
return await self.call("set_device_info", {"fan_sleep_mode_on": on})