From ee5e1fa35563b69aa2ccd078f8ad457ef70579cf Mon Sep 17 00:00:00 2001 From: MatteGary Date: Mon, 8 Oct 2018 10:49:54 +0200 Subject: [PATCH] Daikin Climate - Better integration with Climate base component (#16913) * Daikin Climate - Better integration with Climate base component Made some modification in order to better integrate the Daikin AC Component with the base Climate Component. Benefits are: Support localization for Operation Mode Support for Homekit Integration (if the AC is turned On, now the status is updated in Homekit) * Build bug fixing * Bug fixing in Set Operation_Mode functionality Fixed to .title() functionality in matching the Operation_Mode * Fix useless code * Fix hound bug * Bug fixing Change in list of Operation Mode * Trailing white space fix * Compile fixing * Whitespace fix --- homeassistant/components/climate/daikin.py | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/climate/daikin.py b/homeassistant/components/climate/daikin.py index 6743bf034dc..66e380ad68d 100644 --- a/homeassistant/components/climate/daikin.py +++ b/homeassistant/components/climate/daikin.py @@ -40,6 +40,15 @@ HA_STATE_TO_DAIKIN = { STATE_OFF: 'off', } +DAIKIN_TO_HA_STATE = { + 'fan': STATE_FAN_ONLY, + 'dry': STATE_DRY, + 'cool': STATE_COOL, + 'hot': STATE_HEAT, + 'auto': STATE_AUTO, + 'off': STATE_OFF, +} + HA_ATTR_TO_DAIKIN = { ATTR_OPERATION_MODE: 'mode', ATTR_FAN_MODE: 'f_rate', @@ -75,9 +84,7 @@ class DaikinClimate(ClimateDevice): self._api = api self._force_refresh = False self._list = { - ATTR_OPERATION_MODE: list( - map(str.title, set(HA_STATE_TO_DAIKIN.values())) - ), + ATTR_OPERATION_MODE: list(HA_STATE_TO_DAIKIN), ATTR_FAN_MODE: list( map( str.title, @@ -136,11 +143,11 @@ class DaikinClimate(ClimateDevice): elif key == ATTR_OPERATION_MODE: # Daikin can return also internal states auto-1 or auto-7 # and we need to translate them as AUTO - value = re.sub( - '[^a-z]', - '', - self._api.device.represent(daikin_attr)[1] - ).title() + daikin_mode = re.sub( + '[^a-z]', '', + self._api.device.represent(daikin_attr)[1]) + ha_mode = DAIKIN_TO_HA_STATE.get(daikin_mode) + value = ha_mode if value is None: _LOGGER.error("Invalid value requested for key %s", key) @@ -167,8 +174,8 @@ class DaikinClimate(ClimateDevice): daikin_attr = HA_ATTR_TO_DAIKIN.get(attr) if daikin_attr is not None: - if value.title() in self._list[attr]: - values[daikin_attr] = value.lower() + if value in self._list[attr]: + values[daikin_attr] = HA_STATE_TO_DAIKIN[value] else: _LOGGER.error("Invalid value %s for %s", attr, value)