From 6ee82e103188b46d5ec4085e26c015d6f3a43c88 Mon Sep 17 00:00:00 2001 From: Brett Date: Wed, 21 Jul 2021 09:38:50 +1000 Subject: [PATCH] Advantage Air add zone temperature sensors (#51941) * Create AdvantageAirZoneTemp * Disable by default * Add test coverage * add state_class * Use entity class attributes * Match code style of PR #52498 --- .../components/advantage_air/sensor.py | 25 ++++++++++++++++-- tests/components/advantage_air/test_sensor.py | 26 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/advantage_air/sensor.py b/homeassistant/components/advantage_air/sensor.py index edf079e1cba..e2bf90e73c3 100644 --- a/homeassistant/components/advantage_air/sensor.py +++ b/homeassistant/components/advantage_air/sensor.py @@ -2,7 +2,7 @@ import voluptuous as vol from homeassistant.components.sensor import STATE_CLASS_MEASUREMENT, SensorEntity -from homeassistant.const import PERCENTAGE +from homeassistant.const import PERCENTAGE, TEMP_CELSIUS from homeassistant.helpers import config_validation as cv, entity_platform from .const import ADVANTAGE_AIR_STATE_OPEN, DOMAIN as ADVANTAGE_AIR_DOMAIN @@ -25,9 +25,10 @@ async def async_setup_entry(hass, config_entry, async_add_entities): entities.append(AdvantageAirTimeTo(instance, ac_key, "On")) entities.append(AdvantageAirTimeTo(instance, ac_key, "Off")) for zone_key, zone in ac_device["zones"].items(): - # Only show damper sensors when zone is in temperature control + # Only show damper and temp sensors when zone is in temperature control if zone["type"] != 0: entities.append(AdvantageAirZoneVent(instance, ac_key, zone_key)) + entities.append(AdvantageAirZoneTemp(instance, ac_key, zone_key)) # Only show wireless signal strength sensors when using wireless sensors if zone["rssi"] > 0: entities.append(AdvantageAirZoneSignal(instance, ac_key, zone_key)) @@ -144,3 +145,23 @@ class AdvantageAirZoneSignal(AdvantageAirEntity, SensorEntity): if self._zone["rssi"] >= 20: return "mdi:wifi-strength-1" return "mdi:wifi-strength-outline" + + +class AdvantageAirZoneTemp(AdvantageAirEntity, SensorEntity): + """Representation of Advantage Air Zone wireless signal sensor.""" + + _attr_unit_of_measurement = TEMP_CELSIUS + _attr_state_class = STATE_CLASS_MEASUREMENT + _attr_icon = "mdi:thermometer" + _attr_entity_registry_enabled_default = False + + def __init__(self, instance, ac_key, zone_key): + """Initialize an Advantage Air Zone Temp Sensor.""" + super().__init__(instance, ac_key, zone_key) + self._attr_name = f'{self._zone["name"]} Temperature' + self._attr_unique_id = f'{self.coordinator.data["system"]["rid"]}-{self.ac_key}-{self.zone_key}-temp' + + @property + def state(self): + """Return the current value of the measured temperature.""" + return self._zone["measuredTemp"] diff --git a/tests/components/advantage_air/test_sensor.py b/tests/components/advantage_air/test_sensor.py index 684b965d94f..997f11dea91 100644 --- a/tests/components/advantage_air/test_sensor.py +++ b/tests/components/advantage_air/test_sensor.py @@ -1,5 +1,6 @@ """Test the Advantage Air Sensor Platform.""" +from datetime import timedelta from json import loads from homeassistant.components.advantage_air.const import DOMAIN as ADVANTAGE_AIR_DOMAIN @@ -7,9 +8,12 @@ from homeassistant.components.advantage_air.sensor import ( ADVANTAGE_AIR_SERVICE_SET_TIME_TO, ADVANTAGE_AIR_SET_COUNTDOWN_VALUE, ) +from homeassistant.config_entries import RELOAD_AFTER_UPDATE_DELAY from homeassistant.const import ATTR_ENTITY_ID from homeassistant.helpers import entity_registry as er +from homeassistant.util import dt +from tests.common import async_fire_time_changed from tests.components.advantage_air import ( TEST_SET_RESPONSE, TEST_SET_URL, @@ -125,3 +129,25 @@ async def test_sensor_platform(hass, aioclient_mock): entry = registry.async_get(entity_id) assert entry assert entry.unique_id == "uniqueid-ac1-z02-signal" + + # Test First Zone Temp Sensor (disabled by default) + entity_id = "sensor.zone_open_with_sensor_temperature" + + assert not hass.states.get(entity_id) + + registry.async_update_entity(entity_id=entity_id, disabled_by=None) + await hass.async_block_till_done() + + async_fire_time_changed( + hass, + dt.utcnow() + timedelta(seconds=RELOAD_AFTER_UPDATE_DELAY + 1), + ) + await hass.async_block_till_done() + + state = hass.states.get(entity_id) + assert state + assert int(state.state) == 25 + + entry = registry.async_get(entity_id) + assert entry + assert entry.unique_id == "uniqueid-ac1-z01-temp"