diff --git a/CODEOWNERS b/CODEOWNERS index 775fd8be5c196a7782637ae7b977366582b0695b..ee6a8cd169cb6232a0d277659c8932bb830f3704 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -61,6 +61,7 @@ homeassistant/components/cisco_webex_teams/* @fbradyirl homeassistant/components/ciscospark/* @fbradyirl homeassistant/components/cloud/* @home-assistant/cloud homeassistant/components/cloudflare/* @ludeeus +homeassistant/components/comfoconnect/* @michaelarnauts homeassistant/components/config/* @home-assistant/core homeassistant/components/configurator/* @home-assistant/core homeassistant/components/conversation/* @home-assistant/core diff --git a/homeassistant/components/comfoconnect/__init__.py b/homeassistant/components/comfoconnect/__init__.py index aef4bf1deebca7d9d51c77e5f6d0b557691cc555..efdbf020f1adb689efc4a7318b8a7a494faed462 100644 --- a/homeassistant/components/comfoconnect/__init__.py +++ b/homeassistant/components/comfoconnect/__init__.py @@ -102,7 +102,6 @@ class ComfoConnectBridge: def __init__(self, hass, bridge, name, token, friendly_name, pin): """Initialize the ComfoConnect bridge.""" - self.data = {} self.name = name self.hass = hass @@ -136,7 +135,3 @@ class ComfoConnectBridge: # Notify listeners that we have received an update dispatcher_send(self.hass, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, var) - - def subscribe_sensor(self, sensor_id): - """Subscribe for the specified sensor.""" - self.comfoconnect.register_sensor(sensor_id) diff --git a/homeassistant/components/comfoconnect/fan.py b/homeassistant/components/comfoconnect/fan.py index bbb4b0176bf84c44c912e8a791d63e571bc088ef..34e784d61ebec2e5f216ac9468e2a7897b3f31da 100644 --- a/homeassistant/components/comfoconnect/fan.py +++ b/homeassistant/components/comfoconnect/fan.py @@ -17,7 +17,7 @@ from homeassistant.components.fan import ( SUPPORT_SET_SPEED, FanEntity, ) -from homeassistant.helpers.dispatcher import dispatcher_connect +from homeassistant.helpers.dispatcher import async_dispatcher_connect from . import DOMAIN, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, ComfoConnectBridge @@ -30,28 +30,36 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the ComfoConnect fan platform.""" ccb = hass.data[DOMAIN] - add_entities([ComfoConnectFan(hass, name=ccb.name, ccb=ccb)], True) + add_entities([ComfoConnectFan(ccb.name, ccb)], True) class ComfoConnectFan(FanEntity): """Representation of the ComfoConnect fan platform.""" - def __init__(self, hass, name, ccb: ComfoConnectBridge) -> None: + def __init__(self, name, ccb: ComfoConnectBridge) -> None: """Initialize the ComfoConnect fan.""" - self._ccb = ccb self._name = name - # Ask the bridge to keep us updated - self._ccb.comfoconnect.register_sensor(SENSOR_FAN_SPEED_MODE) - - def _handle_update(var): - if var == SENSOR_FAN_SPEED_MODE: - _LOGGER.debug("Dispatcher update for %s", var) - self.schedule_update_ha_state() + async def async_added_to_hass(self): + """Register for sensor updates.""" + await self.hass.async_add_executor_job( + self._ccb.comfoconnect.register_sensor, SENSOR_FAN_SPEED_MODE + ) + async_dispatcher_connect( + self.hass, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, self._handle_update + ) + + def _handle_update(self, var): + """Handle update callbacks.""" + if var == SENSOR_FAN_SPEED_MODE: + _LOGGER.debug("Received update for %s", var) + self.schedule_update_ha_state() - # Register for dispatcher updates - dispatcher_connect(hass, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, _handle_update) + @property + def should_poll(self) -> bool: + """Do not poll.""" + return False @property def name(self): @@ -71,7 +79,6 @@ class ComfoConnectFan(FanEntity): @property def speed(self): """Return the current fan mode.""" - try: speed = self._ccb.data[SENSOR_FAN_SPEED_MODE] return SPEED_MAPPING[speed] @@ -95,7 +102,7 @@ class ComfoConnectFan(FanEntity): def set_speed(self, speed: str): """Set fan speed.""" - _LOGGER.debug("Changing fan speed to %s.", speed) + _LOGGER.debug("Changing fan speed to %s", speed) if speed == SPEED_OFF: self._ccb.comfoconnect.cmd_rmi_request(CMD_FAN_MODE_AWAY) diff --git a/homeassistant/components/comfoconnect/manifest.json b/homeassistant/components/comfoconnect/manifest.json index 57daba7fdbd1dd583c68b9dfb25abdfc7c5b0f04..091b7f7bcdda4bd058f8c460f6d7eba9632f8737 100644 --- a/homeassistant/components/comfoconnect/manifest.json +++ b/homeassistant/components/comfoconnect/manifest.json @@ -6,5 +6,5 @@ "pycomfoconnect==0.3" ], "dependencies": [], - "codeowners": [] + "codeowners": ["@michaelarnauts"] } diff --git a/homeassistant/components/comfoconnect/sensor.py b/homeassistant/components/comfoconnect/sensor.py index 06d0506e2cf39c1b1afaba66ceeabbd3f1c23325..a1f16ed96311990786702ad21c66f7c793305f78 100644 --- a/homeassistant/components/comfoconnect/sensor.py +++ b/homeassistant/components/comfoconnect/sensor.py @@ -11,7 +11,7 @@ from pycomfoconnect import ( ) from homeassistant.const import CONF_RESOURCES, TEMP_CELSIUS -from homeassistant.helpers.dispatcher import dispatcher_connect +from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity from . import ( @@ -81,13 +81,12 @@ def setup_platform(hass, config, add_entities, discovery_info=None): sensor_type = resource.lower() if sensor_type not in SENSOR_TYPES: - _LOGGER.warning("Sensor type: %s is not a valid sensor.", sensor_type) + _LOGGER.warning("Sensor type: %s is not a valid sensor", sensor_type) continue sensors.append( ComfoConnectSensor( - hass, - name="%s %s" % (ccb.name, SENSOR_TYPES[sensor_type][0]), + name=f"{ccb.name} {SENSOR_TYPES[sensor_type][0]}", ccb=ccb, sensor_type=sensor_type, ) @@ -99,23 +98,27 @@ def setup_platform(hass, config, add_entities, discovery_info=None): class ComfoConnectSensor(Entity): """Representation of a ComfoConnect sensor.""" - def __init__(self, hass, name, ccb: ComfoConnectBridge, sensor_type) -> None: + def __init__(self, name, ccb: ComfoConnectBridge, sensor_type) -> None: """Initialize the ComfoConnect sensor.""" self._ccb = ccb self._sensor_type = sensor_type self._sensor_id = SENSOR_TYPES[self._sensor_type][3] self._name = name - # Register the requested sensor - self._ccb.comfoconnect.register_sensor(self._sensor_id) - - def _handle_update(var): - if var == self._sensor_id: - _LOGGER.debug("Dispatcher update for %s.", var) - self.schedule_update_ha_state() + async def async_added_to_hass(self): + """Register for sensor updates.""" + await self.hass.async_add_executor_job( + self._ccb.comfoconnect.register_sensor, self._sensor_id + ) + async_dispatcher_connect( + self.hass, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, self._handle_update + ) - # Register for dispatcher updates - dispatcher_connect(hass, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED, _handle_update) + def _handle_update(self, var): + """Handle update callbacks.""" + if var == self._sensor_id: + _LOGGER.debug("Received update for %s", var) + self.schedule_update_ha_state() @property def state(self): @@ -125,6 +128,11 @@ class ComfoConnectSensor(Entity): except KeyError: return None + @property + def should_poll(self) -> bool: + """Do not poll.""" + return False + @property def name(self): """Return the name of the sensor."""