56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
import logging
|
|
from typing import List, Any, Optional
|
|
|
|
from gehomesdk import ErdCodeType, ErdOvenWarmingState
|
|
from ...devices import ApplianceApi
|
|
from ..common import GeErdSelect, OptionsConverter
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
class OvenWarmingStateOptionsConverter(OptionsConverter):
|
|
@property
|
|
def options(self) -> List[str]:
|
|
return [i.stringify() for i in ErdOvenWarmingState]
|
|
def from_option_string(self, value: str) -> Any:
|
|
try:
|
|
return ErdOvenWarmingState[value.upper()]
|
|
except:
|
|
_LOGGER.warning(f"Could not set Oven warming state to {value.upper()}")
|
|
return ErdOvenWarmingState.OFF
|
|
def to_option_string(self, value: ErdOvenWarmingState) -> Optional[str]:
|
|
try:
|
|
if value is not None:
|
|
return value.stringify()
|
|
except:
|
|
pass
|
|
return ErdOvenWarmingState.OFF.stringify()
|
|
|
|
class GeOvenWarmingStateSelect(GeErdSelect):
|
|
|
|
def __init__(self, api: ApplianceApi, erd_code: ErdCodeType, erd_override: str = None):
|
|
#check to see if we have a status
|
|
value: ErdOvenWarmingState = api.try_get_erd_value(erd_code)
|
|
self._has_status = value is not None and value != ErdOvenWarmingState.NOT_AVAILABLE
|
|
self._assumed_state = ErdOvenWarmingState.OFF
|
|
|
|
super().__init__(api, erd_code, OvenWarmingStateOptionsConverter(self._availability), erd_override=erd_override)
|
|
|
|
@property
|
|
def assumed_state(self) -> bool:
|
|
return not self._has_status
|
|
|
|
@property
|
|
def current_option(self):
|
|
if self.assumed_state:
|
|
return self._assumed_state
|
|
|
|
return self._converter.to_option_string(self.appliance.get_erd_value(self.erd_code))
|
|
|
|
async def async_select_option(self, option: str) -> None:
|
|
"""Change the selected option."""
|
|
_LOGGER.debug(f"Setting select from {self.current_option} to {option}")
|
|
|
|
new_state = self._converter.from_option_string(option)
|
|
await self.appliance.async_set_erd_value(self.erd_code, new_state)
|
|
self._assumed_state = new_state
|
|
|