From a29265e725ed857667b31082c77457f817714443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Sat, 23 Apr 2022 07:27:23 +0200 Subject: [PATCH] Add Airzone Low Battery Binary Sensor (#69022) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * airzone: binary_sensor: add Low Battery This binary sensor is only applicable for Radio Thermostats. Signed-off-by: Álvaro Fernández Rojas * airzone: use BinarySensorDeviceClass Signed-off-by: Álvaro Fernández Rojas --- .../components/airzone/binary_sensor.py | 6 +++++ .../components/airzone/test_binary_sensor.py | 20 +++++++++++++++- tests/components/airzone/util.py | 24 ++++++++++++++++++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/airzone/binary_sensor.py b/homeassistant/components/airzone/binary_sensor.py index e0f4027e951..fe29ceb3fb0 100644 --- a/homeassistant/components/airzone/binary_sensor.py +++ b/homeassistant/components/airzone/binary_sensor.py @@ -7,6 +7,7 @@ from typing import Any, Final from aioairzone.const import ( AZD_AIR_DEMAND, + AZD_BATTERY_LOW, AZD_ERRORS, AZD_FLOOR_DEMAND, AZD_NAME, @@ -42,6 +43,11 @@ ZONE_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...] key=AZD_AIR_DEMAND, name="Air Demand", ), + AirzoneBinarySensorEntityDescription( + device_class=BinarySensorDeviceClass.BATTERY, + key=AZD_BATTERY_LOW, + name="Battery Low", + ), AirzoneBinarySensorEntityDescription( device_class=BinarySensorDeviceClass.RUNNING, key=AZD_FLOOR_DEMAND, diff --git a/tests/components/airzone/test_binary_sensor.py b/tests/components/airzone/test_binary_sensor.py index 2dd9daa8af7..d6a3fdcb115 100644 --- a/tests/components/airzone/test_binary_sensor.py +++ b/tests/components/airzone/test_binary_sensor.py @@ -1,5 +1,7 @@ """The sensor tests for the Airzone platform.""" +from aioairzone.const import API_ERROR_LOW_BATTERY + from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant @@ -14,15 +16,22 @@ async def test_airzone_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.despacho_air_demand") assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.despacho_battery_low") + assert state.state == STATE_ON + state = hass.states.get("binary_sensor.despacho_floor_demand") assert state is None state = hass.states.get("binary_sensor.despacho_problem") - assert state.state == STATE_OFF + assert state.state == STATE_ON + assert state.attributes.get("errors") == [API_ERROR_LOW_BATTERY] state = hass.states.get("binary_sensor.dorm_1_air_demand") assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.dorm_1_battery_low") + assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.dorm_1_floor_demand") assert state.state == STATE_OFF @@ -32,6 +41,9 @@ async def test_airzone_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.dorm_2_air_demand") assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.dorm_2_battery_low") + assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.dorm_2_floor_demand") assert state is None @@ -41,6 +53,9 @@ async def test_airzone_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.dorm_ppal_air_demand") assert state.state == STATE_ON + state = hass.states.get("binary_sensor.dorm_ppal_battery_low") + assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.dorm_ppal_floor_demand") assert state.state == STATE_ON @@ -50,6 +65,9 @@ async def test_airzone_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.salon_air_demand") assert state.state == STATE_OFF + state = hass.states.get("binary_sensor.salon_battery_low") + assert state is None + state = hass.states.get("binary_sensor.salon_floor_demand") assert state is None diff --git a/tests/components/airzone/util.py b/tests/components/airzone/util.py index fcc3be8a469..8f7b8910c8c 100644 --- a/tests/components/airzone/util.py +++ b/tests/components/airzone/util.py @@ -22,6 +22,9 @@ from aioairzone.const import ( API_SET_POINT, API_SYSTEM_ID, API_SYSTEMS, + API_THERMOS_FIRMWARE, + API_THERMOS_RADIO, + API_THERMOS_TYPE, API_UNITS, API_ZONE_ID, ) @@ -58,6 +61,9 @@ HVAC_MOCK = { API_SYSTEM_ID: 1, API_ZONE_ID: 1, API_NAME: "Salon", + API_THERMOS_TYPE: 2, + API_THERMOS_FIRMWARE: "3.51", + API_THERMOS_RADIO: 0, API_ON: 0, API_MAX_TEMP: 30, API_MIN_TEMP: 15, @@ -79,6 +85,9 @@ HVAC_MOCK = { API_SYSTEM_ID: 1, API_ZONE_ID: 2, API_NAME: "Dorm Ppal", + API_THERMOS_TYPE: 4, + API_THERMOS_FIRMWARE: "3.33", + API_THERMOS_RADIO: 1, API_ON: 1, API_MAX_TEMP: 30, API_MIN_TEMP: 15, @@ -99,6 +108,9 @@ HVAC_MOCK = { API_SYSTEM_ID: 1, API_ZONE_ID: 3, API_NAME: "Dorm #1", + API_THERMOS_TYPE: 4, + API_THERMOS_FIRMWARE: "3.33", + API_THERMOS_RADIO: 1, API_ON: 1, API_MAX_TEMP: 30, API_MIN_TEMP: 15, @@ -119,6 +131,9 @@ HVAC_MOCK = { API_SYSTEM_ID: 1, API_ZONE_ID: 4, API_NAME: "Despacho", + API_THERMOS_TYPE: 4, + API_THERMOS_FIRMWARE: "3.33", + API_THERMOS_RADIO: 1, API_ON: 0, API_MAX_TEMP: 86, API_MIN_TEMP: 59, @@ -131,7 +146,11 @@ HVAC_MOCK = { API_HEAT_STAGE: 1, API_HUMIDITY: 36, API_UNITS: 1, - API_ERRORS: [], + API_ERRORS: [ + { + "Zone": "Low battery", + }, + ], API_AIR_DEMAND: 0, API_FLOOR_DEMAND: 0, }, @@ -139,6 +158,9 @@ HVAC_MOCK = { API_SYSTEM_ID: 1, API_ZONE_ID: 5, API_NAME: "Dorm #2", + API_THERMOS_TYPE: 4, + API_THERMOS_FIRMWARE: "3.33", + API_THERMOS_RADIO: 1, API_ON: 0, API_MAX_TEMP: 30, API_MIN_TEMP: 15,