mirror of https://github.com/simbaja/ha_gehome.git
- added dehumidifier (#114)
This commit is contained in:
parent
ed27905ad9
commit
ba6dc60b36
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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 *
|
|
@ -0,0 +1,2 @@
|
|||
from .dehumidifier_target_select import DehumidifierTargetHumiditySelect
|
||||
from .dehumidifier_fan_options import DehumidifierFanSettingOptionsConverter
|
|
@ -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()
|
|
@ -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)
|
|
@ -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"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue