36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
|
|
import logging
|
|
from typing import Any, List, Optional
|
|
|
|
from homeassistant.components.select import SelectEntity
|
|
from gehomesdk import ErdCodeType
|
|
|
|
from ...devices import ApplianceApi
|
|
from .ge_erd_entity import GeErdEntity
|
|
from .options_converter import OptionsConverter
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
class GeErdSelect(GeErdEntity, SelectEntity):
|
|
"""ERD-based selector entity"""
|
|
device_class = "select"
|
|
|
|
def __init__(self, api: ApplianceApi, erd_code: ErdCodeType, converter: OptionsConverter, erd_override: str = None, icon_override: str = None, device_class_override: str = None):
|
|
super().__init__(api, erd_code, erd_override=erd_override, icon_override=icon_override, device_class_override=device_class_override)
|
|
self._converter = converter
|
|
|
|
@property
|
|
def current_option(self):
|
|
return self._converter.to_option_string(self.appliance.get_erd_value(self.erd_code))
|
|
|
|
@property
|
|
def options(self) -> List[str]:
|
|
"Return a list of options"
|
|
return self._converter.options
|
|
|
|
async def async_select_option(self, option: str) -> None:
|
|
_LOGGER.debug(f"Setting select from {self.current_option} to {option}")
|
|
"""Change the selected option."""
|
|
if option != self.current_option:
|
|
await self.appliance.async_set_erd_value(self.erd_code, self._converter.from_option_string(option))
|