Update comfoconnect to use new fan entity model (#45593)

pull/45665/head
J. Nick Koston 2021-01-28 10:23:10 -06:00 committed by GitHub
parent d7e0391e03
commit d148f9aa85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 33 additions and 42 deletions

View File

@ -1,5 +1,6 @@
"""Platform to control a Zehnder ComfoAir Q350/450/600 ventilation unit."""
import logging
import math
from pycomfoconnect import (
CMD_FAN_MODE_AWAY,
@ -9,21 +10,25 @@ from pycomfoconnect import (
SENSOR_FAN_SPEED_MODE,
)
from homeassistant.components.fan import (
SPEED_HIGH,
SPEED_LOW,
SPEED_MEDIUM,
SPEED_OFF,
SUPPORT_SET_SPEED,
FanEntity,
)
from homeassistant.components.fan import SUPPORT_SET_SPEED, FanEntity
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.util.percentage import (
percentage_to_ranged_value,
ranged_value_to_percentage,
)
from . import DOMAIN, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, ComfoConnectBridge
_LOGGER = logging.getLogger(__name__)
SPEED_MAPPING = {0: SPEED_OFF, 1: SPEED_LOW, 2: SPEED_MEDIUM, 3: SPEED_HIGH}
CMD_MAPPING = {
0: CMD_FAN_MODE_AWAY,
1: CMD_FAN_MODE_LOW,
2: CMD_FAN_MODE_MEDIUM,
3: CMD_FAN_MODE_HIGH,
}
SPEED_RANGE = (1, 3) # away is not included in speeds and instead mapped to off
def setup_platform(hass, config, add_entities, discovery_info=None):
@ -89,50 +94,36 @@ class ComfoConnectFan(FanEntity):
return SUPPORT_SET_SPEED
@property
def speed(self):
"""Return the current fan mode."""
try:
speed = self._ccb.data[SENSOR_FAN_SPEED_MODE]
return SPEED_MAPPING[speed]
except KeyError:
def percentage(self) -> str:
"""Return the current speed percentage."""
speed = self._ccb.data[SENSOR_FAN_SPEED_MODE]
if speed is None:
return None
return ranged_value_to_percentage(SPEED_RANGE, speed)
@property
def speed_list(self):
"""List of available fan modes."""
return [SPEED_OFF, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH]
#
# The fan entity model has changed to use percentages and preset_modes
# instead of speeds.
#
# Please review
# https://developers.home-assistant.io/docs/core/entity/fan/
#
def turn_on(
self, speed: str = None, percentage=None, preset_mode=None, **kwargs
) -> None:
"""Turn on the fan."""
if speed is None:
speed = SPEED_LOW
self.set_speed(speed)
self.set_percentage(percentage)
def turn_off(self, **kwargs) -> None:
"""Turn off the fan (to away)."""
self.set_speed(SPEED_OFF)
self.set_percentage(0)
def set_speed(self, speed: str):
"""Set fan speed."""
_LOGGER.debug("Changing fan speed to %s", speed)
def set_percentage(self, percentage: int):
"""Set fan speed percentage."""
_LOGGER.debug("Changing fan speed percentage to %s", percentage)
if speed == SPEED_OFF:
self._ccb.comfoconnect.cmd_rmi_request(CMD_FAN_MODE_AWAY)
elif speed == SPEED_LOW:
self._ccb.comfoconnect.cmd_rmi_request(CMD_FAN_MODE_LOW)
elif speed == SPEED_MEDIUM:
self._ccb.comfoconnect.cmd_rmi_request(CMD_FAN_MODE_MEDIUM)
elif speed == SPEED_HIGH:
self._ccb.comfoconnect.cmd_rmi_request(CMD_FAN_MODE_HIGH)
if percentage is None:
cmd = CMD_FAN_MODE_LOW
elif percentage == 0:
cmd = CMD_FAN_MODE_AWAY
else:
speed = math.ceil(percentage_to_ranged_value(SPEED_RANGE, percentage))
cmd = CMD_MAPPING[speed]
self._ccb.comfoconnect.cmd_rmi_request(cmd)
# Update current mode
self.schedule_update_ha_state()