From 64c92d38c525da15a9fc334eb7fdb0e7f78ab354 Mon Sep 17 00:00:00 2001 From: Jack Simbach Date: Fri, 8 Oct 2021 22:10:38 -0400 Subject: [PATCH] - added convertable drawer to fridge --- custom_components/ge_home/devices/fridge.py | 17 ++++++---- .../ge_home/entities/fridge/__init__.py | 3 +- .../fridge/convertable_drawer_mode_options.py | 34 +++++++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 custom_components/ge_home/entities/fridge/convertable_drawer_mode_options.py diff --git a/custom_components/ge_home/devices/fridge.py b/custom_components/ge_home/devices/fridge.py index 2a99b6d..6fa4cea 100644 --- a/custom_components/ge_home/devices/fridge.py +++ b/custom_components/ge_home/devices/fridge.py @@ -1,4 +1,3 @@ -from custom_components.ge_home.entities.common.bool_converter import ErdOnOffBoolConverter from homeassistant.components.binary_sensor import DEVICE_CLASS_PROBLEM from homeassistant.const import DEVICE_CLASS_TEMPERATURE import logging @@ -14,19 +13,23 @@ IceMakerControlStatus, ErdFilterStatus, HotWaterStatus, - FridgeModelInfo + FridgeModelInfo, + ErdConvertableDrawerMode ) from .base import ApplianceApi from ..entities import ( + ErdOnOffBoolConverter, GeErdSensor, GeErdBinarySensor, GeErdSwitch, + GeErdSelect, GeFridge, GeFreezer, GeDispenser, GeErdPropertySensor, - GeErdPropertyBinarySensor + GeErdPropertyBinarySensor, + ConvertableDrawerModeOptionsConverter ) _LOGGER = logging.getLogger(__name__) @@ -50,11 +53,11 @@ def get_all_entities(self) -> List[Entity]: air_filter: ErdFilterStatus = self.try_get_erd_value(ErdCode.AIR_FILTER_STATUS) hot_water_status: HotWaterStatus = self.try_get_erd_value(ErdCode.HOT_WATER_STATUS) fridge_model_info: FridgeModelInfo = self.try_get_erd_value(ErdCode.FRIDGE_MODEL_INFO) - + convertable_drawer: ErdConvertableDrawerMode = self.try_get_erd_value(ErdCode.CONVERTABLE_DRAWER_MODE) + interior_light: int = self.try_get_erd_value(ErdCode.INTERIOR_LIGHT) proximity_light: ErdOnOff = self.try_get_erd_value(ErdCode.PROXIMITY_LIGHT) - # Common entities common_entities = [ GeErdSensor(self, ErdCode.FRIDGE_MODEL_INFO), @@ -83,7 +86,9 @@ def get_all_entities(self) -> List[Entity]: fridge_entities.append(GeErdSensor(self, ErdCode.INTERIOR_LIGHT)) if(proximity_light and proximity_light != ErdOnOff.NA): fridge_entities.append(GeErdSwitch(self, ErdCode.PROXIMITY_LIGHT, ErdOnOffBoolConverter(), icon_on_override="mdi:lightbulb-on", icon_off_override="mdi:lightbulb")) - + if(convertable_drawer and convertable_drawer != ErdConvertableDrawerMode.NA): + fridge_entities.append(GeErdSelect(self, ErdCode.CONVERTABLE_DRAWER_MODE, ConvertableDrawerModeOptionsConverter())) + # Freezer entities if fridge_model_info is None or fridge_model_info.has_freezer: freezer_entities.extend([ diff --git a/custom_components/ge_home/entities/fridge/__init__.py b/custom_components/ge_home/entities/fridge/__init__.py index 5dde001..b277fcf 100644 --- a/custom_components/ge_home/entities/fridge/__init__.py +++ b/custom_components/ge_home/entities/fridge/__init__.py @@ -1,3 +1,4 @@ from .ge_fridge import GeFridge from .ge_freezer import GeFreezer -from .ge_dispenser import GeDispenser \ No newline at end of file +from .ge_dispenser import GeDispenser +from .convertable_drawer_mode_options import ConvertableDrawerModeOptionsConverter \ No newline at end of file diff --git a/custom_components/ge_home/entities/fridge/convertable_drawer_mode_options.py b/custom_components/ge_home/entities/fridge/convertable_drawer_mode_options.py new file mode 100644 index 0000000..6cb36c1 --- /dev/null +++ b/custom_components/ge_home/entities/fridge/convertable_drawer_mode_options.py @@ -0,0 +1,34 @@ +import logging +from typing import List, Any, Optional + +from gehomesdk import ErdConvertableDrawerMode +from ..common import OptionsConverter + +_LOGGER = logging.getLogger(__name__) + +class ConvertableDrawerModeOptionsConverter(OptionsConverter): + def __init__(self): + super().__init__() + self._excluded_options = [ + ErdConvertableDrawerMode.UNKNOWN0, + ErdConvertableDrawerMode.UNKNOWN1, + ErdConvertableDrawerMode.NA + ] + + @property + def options(self) -> List[str]: + return [i.stringify() for i in ErdConvertableDrawerMode if i not in self._excluded_options] + def from_option_string(self, value: str) -> Any: + try: + return ErdConvertableDrawerMode[value.upper()] + except: + _LOGGER.warn(f"Could not set hood light level to {value.upper()}") + return ErdConvertableDrawerMode.NA + def to_option_string(self, value: ErdConvertableDrawerMode) -> Optional[str]: + try: + if value is not None: + return value.stringify() + except: + pass + return ErdConvertableDrawerMode.NA.stringify() +