- added dehumidifier (#114)

This commit is contained in:
Jack Simbach 2023-07-30 17:40:35 -04:00
parent ed27905ad9
commit ba6dc60b36
7 changed files with 132 additions and 3 deletions

View File

@ -25,7 +25,7 @@ from .oim import OimApi
from .coffee_maker import CcmApi
from .dual_dishwasher import DualDishwasherApi
from .espresso_maker import EspressoMakerApi
from .dehumidifier import DehumidifierApi
_LOGGER = logging.getLogger(__name__)
@ -77,6 +77,8 @@ def get_appliance_api_type(appliance_type: ErdApplianceType) -> Type:
return CcmApi
if appliance_type == ErdApplianceType.ESPRESSO_MAKER:
return EspressoMakerApi
if appliance_type == ErdApplianceType.DEHUMIDIFIER:
return DehumidifierApi
# Fallback
return ApplianceApi

View File

@ -0,0 +1,43 @@
import logging
from typing import List
from homeassistant.helpers.entity import Entity
from gehomesdk import (
ErdCode,
ErdApplianceType,
ErdOnOff
)
from .base import ApplianceApi
from ..entities import (
GeErdSensor,
GeErdSelect,
GeErdPropertySensor,
GeErdSwitch,
ErdOnOffBoolConverter,
DehumidifierTargetHumiditySelect,
DehumidifierFanSettingOptionsConverter
)
_LOGGER = logging.getLogger(__name__)
class DehumidifierApi(ApplianceApi):
"""API class for Dehumidifier objects"""
APPLIANCE_TYPE = ErdApplianceType.WATER_HEATER
def get_all_entities(self) -> List[Entity]:
base_entities = super().get_all_entities()
dhum_entities = [
GeErdSwitch(self, ErdCode.AC_POWER_STATUS, bool_converter=ErdOnOffBoolConverter(), icon_on_override="mdi:power-on", icon_off_override="mdi:power-off"),
GeErdSelect(self, ErdCode.AC_FAN_SETTING, DehumidifierFanSettingOptionsConverter(), icon_override="mdi:fan"),
GeErdSensor(self, ErdCode.DHUM_CURRENT_HUMIDITY, uom_override="%", icon_override="mdi:water-percent"),
DehumidifierTargetHumiditySelect(self, ErdCode.DHUM_TARGET_HUMIDITY, icon_override="mdi:water-percent"),
GeErdPropertySensor(self, ErdCode.DHUM_MAINTENANCE, "empty_bucket", device_class_override="problem"),
GeErdPropertySensor(self, ErdCode.DHUM_MAINTENANCE, "clean_filter", device_class_override="problem")
]
entities = base_entities + dhum_entities
return entities

View File

@ -9,4 +9,5 @@ from .hood import *
from .water_softener import *
from .water_heater import *
from .opal_ice_maker import *
from .ccm import *
from .ccm import *
from .dehumidifier import *

View File

@ -0,0 +1,2 @@
from .dehumidifier_target_select import DehumidifierTargetHumiditySelect
from .dehumidifier_fan_options import DehumidifierFanSettingOptionsConverter

View File

@ -0,0 +1,26 @@
import logging
from typing import List, Any, Optional
from gehomesdk import ErdAcFanSetting
from ..common import OptionsConverter
_LOGGER = logging.getLogger(__name__)
class DehumidifierFanSettingOptionsConverter(OptionsConverter):
@property
def options(self) -> List[str]:
return [i.stringify() for i in [ErdAcFanSetting.DEFAULT, ErdAcFanSetting.LOW, ErdAcFanSetting.MED, ErdAcFanSetting.HIGH]]
def from_option_string(self, value: str) -> Any:
try:
return ErdAcFanSetting[value.upper()]
except:
_LOGGER.warn(f"Could not set fan setting to {value.upper()}")
return ErdAcFanSetting.DEFAULT
def to_option_string(self, value: ErdAcFanSetting) -> Optional[str]:
try:
if value is not None:
return value.stringify()
except:
pass
return ErdAcFanSetting.DEFAULT.stringify()

View File

@ -0,0 +1,55 @@
import logging
from typing import List, Any, Optional
from gehomesdk import ErdCodeType, DehumidifierTargetRange
from ...devices import ApplianceApi
from ..common import GeErdSelect, OptionsConverter
_LOGGER = logging.getLogger(__name__)
DEFAULT_MIN_HUMIDITY = 35
DEFAULT_MAX_HUMIDITY = 80
class DehumidifierTargetOptionsConverter(OptionsConverter):
def __init__(self, min = DEFAULT_MIN_HUMIDITY, max = DEFAULT_MAX_HUMIDITY) -> None:
super().__init__()
self._min = min
self._max = max
@property
def options(self) -> List[str]:
return [str(i) for i in range(min,max) if i % 5 == 0]
def from_option_string(self, value: str) -> Any:
return int(value)
def to_option_string(self, value: int) -> Optional[str]:
try:
if value is not None:
return str(value)
except:
return self._min
class DehumidifierTargetHumiditySelect(GeErdSelect):
def __init__(self, api: ApplianceApi, erd_code: ErdCodeType, erd_override: str = None):
self._low = DEFAULT_MIN_HUMIDITY
self._high = DEFAULT_MAX_HUMIDITY
#try to get the range
value: DehumidifierTargetRange = api.try_get_erd_value(erd_code)
if value is not None:
self._low = value.min_humidity
self._high = value.max_humidity
super().__init__(api, erd_code, DehumidifierTargetOptionsConverter(self._low, self._high), erd_override=erd_override)
@property
def current_option(self):
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)

View File

@ -5,7 +5,7 @@
"integration_type": "hub",
"iot_class": "cloud_push",
"documentation": "https://github.com/simbaja/ha_gehome",
"requirements": ["gehomesdk==0.5.16","magicattr==0.1.6","slixmpp==1.8.3"],
"requirements": ["gehomesdk==0.5.17","magicattr==0.1.6","slixmpp==1.8.3"],
"codeowners": ["@simbaja"],
"version": "0.6.7"
}