From 684c380ce20e6c7ef6023c36bb390b8a97a54603 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 21 Dec 2021 14:07:01 +0100 Subject: [PATCH] Use SensorDeviceClass enum in sensor device automations (#62480) --- .../components/sensor/device_condition.py | 80 ++++++------------- .../components/sensor/device_trigger.py | 73 ++++++----------- .../sensor/test_device_condition.py | 10 +-- .../components/sensor/test_device_trigger.py | 6 +- 4 files changed, 59 insertions(+), 110 deletions(-) diff --git a/homeassistant/components/sensor/device_condition.py b/homeassistant/components/sensor/device_condition.py index 612ebe0abd5..32fa06eb507 100644 --- a/homeassistant/components/sensor/device_condition.py +++ b/homeassistant/components/sensor/device_condition.py @@ -6,36 +6,8 @@ import voluptuous as vol from homeassistant.components.device_automation.exceptions import ( InvalidDeviceAutomationConfig, ) -from homeassistant.const import ( - CONF_ABOVE, - CONF_BELOW, - CONF_ENTITY_ID, - CONF_TYPE, - DEVICE_CLASS_BATTERY, - DEVICE_CLASS_CO, - DEVICE_CLASS_CO2, - DEVICE_CLASS_CURRENT, - DEVICE_CLASS_ENERGY, - DEVICE_CLASS_FREQUENCY, - DEVICE_CLASS_GAS, - DEVICE_CLASS_HUMIDITY, - DEVICE_CLASS_ILLUMINANCE, - DEVICE_CLASS_NITROGEN_DIOXIDE, - DEVICE_CLASS_NITROGEN_MONOXIDE, - DEVICE_CLASS_NITROUS_OXIDE, - DEVICE_CLASS_OZONE, - DEVICE_CLASS_PM1, - DEVICE_CLASS_PM10, - DEVICE_CLASS_PM25, - DEVICE_CLASS_POWER, - DEVICE_CLASS_POWER_FACTOR, - DEVICE_CLASS_PRESSURE, - DEVICE_CLASS_SIGNAL_STRENGTH, - DEVICE_CLASS_SULPHUR_DIOXIDE, - DEVICE_CLASS_TEMPERATURE, - DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS, - DEVICE_CLASS_VOLTAGE, -) +from homeassistant.components.sensor import SensorDeviceClass +from homeassistant.const import CONF_ABOVE, CONF_BELOW, CONF_ENTITY_ID, CONF_TYPE from homeassistant.core import HomeAssistant, HomeAssistantError, callback from homeassistant.helpers import condition, config_validation as cv from homeassistant.helpers.entity import get_device_class, get_unit_of_measurement @@ -78,32 +50,32 @@ CONF_IS_VOLTAGE = "is_voltage" CONF_IS_VALUE = "is_value" ENTITY_CONDITIONS = { - DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}], - DEVICE_CLASS_CO: [{CONF_TYPE: CONF_IS_CO}], - DEVICE_CLASS_CO2: [{CONF_TYPE: CONF_IS_CO2}], - DEVICE_CLASS_CURRENT: [{CONF_TYPE: CONF_IS_CURRENT}], - DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}], - DEVICE_CLASS_FREQUENCY: [{CONF_TYPE: CONF_IS_FREQUENCY}], - DEVICE_CLASS_GAS: [{CONF_TYPE: CONF_IS_GAS}], - DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}], - DEVICE_CLASS_ILLUMINANCE: [{CONF_TYPE: CONF_IS_ILLUMINANCE}], - DEVICE_CLASS_NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_DIOXIDE}], - DEVICE_CLASS_NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_MONOXIDE}], - DEVICE_CLASS_NITROUS_OXIDE: [{CONF_TYPE: CONF_IS_NITROUS_OXIDE}], - DEVICE_CLASS_OZONE: [{CONF_TYPE: CONF_IS_OZONE}], - DEVICE_CLASS_POWER: [{CONF_TYPE: CONF_IS_POWER}], - DEVICE_CLASS_POWER_FACTOR: [{CONF_TYPE: CONF_IS_POWER_FACTOR}], - DEVICE_CLASS_PM1: [{CONF_TYPE: CONF_IS_PM1}], - DEVICE_CLASS_PM10: [{CONF_TYPE: CONF_IS_PM10}], - DEVICE_CLASS_PM25: [{CONF_TYPE: CONF_IS_PM25}], - DEVICE_CLASS_PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}], - DEVICE_CLASS_SIGNAL_STRENGTH: [{CONF_TYPE: CONF_IS_SIGNAL_STRENGTH}], - DEVICE_CLASS_SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}], - DEVICE_CLASS_TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}], - DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS: [ + SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}], + SensorDeviceClass.CO: [{CONF_TYPE: CONF_IS_CO}], + SensorDeviceClass.CO2: [{CONF_TYPE: CONF_IS_CO2}], + SensorDeviceClass.CURRENT: [{CONF_TYPE: CONF_IS_CURRENT}], + SensorDeviceClass.ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}], + SensorDeviceClass.FREQUENCY: [{CONF_TYPE: CONF_IS_FREQUENCY}], + SensorDeviceClass.GAS: [{CONF_TYPE: CONF_IS_GAS}], + SensorDeviceClass.HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}], + SensorDeviceClass.ILLUMINANCE: [{CONF_TYPE: CONF_IS_ILLUMINANCE}], + SensorDeviceClass.NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_DIOXIDE}], + SensorDeviceClass.NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_MONOXIDE}], + SensorDeviceClass.NITROUS_OXIDE: [{CONF_TYPE: CONF_IS_NITROUS_OXIDE}], + SensorDeviceClass.OZONE: [{CONF_TYPE: CONF_IS_OZONE}], + SensorDeviceClass.POWER: [{CONF_TYPE: CONF_IS_POWER}], + SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_IS_POWER_FACTOR}], + SensorDeviceClass.PM1: [{CONF_TYPE: CONF_IS_PM1}], + SensorDeviceClass.PM10: [{CONF_TYPE: CONF_IS_PM10}], + SensorDeviceClass.PM25: [{CONF_TYPE: CONF_IS_PM25}], + SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}], + SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_IS_SIGNAL_STRENGTH}], + SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}], + SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}], + SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: [ {CONF_TYPE: CONF_IS_VOLATILE_ORGANIC_COMPOUNDS} ], - DEVICE_CLASS_VOLTAGE: [{CONF_TYPE: CONF_IS_VOLTAGE}], + SensorDeviceClass.VOLTAGE: [{CONF_TYPE: CONF_IS_VOLTAGE}], DEVICE_CLASS_NONE: [{CONF_TYPE: CONF_IS_VALUE}], } diff --git a/homeassistant/components/sensor/device_trigger.py b/homeassistant/components/sensor/device_trigger.py index a9d014e6856..e605ed3b797 100644 --- a/homeassistant/components/sensor/device_trigger.py +++ b/homeassistant/components/sensor/device_trigger.py @@ -8,36 +8,13 @@ from homeassistant.components.device_automation.exceptions import ( from homeassistant.components.homeassistant.triggers import ( numeric_state as numeric_state_trigger, ) +from homeassistant.components.sensor import SensorDeviceClass from homeassistant.const import ( CONF_ABOVE, CONF_BELOW, CONF_ENTITY_ID, CONF_FOR, CONF_TYPE, - DEVICE_CLASS_BATTERY, - DEVICE_CLASS_CO, - DEVICE_CLASS_CO2, - DEVICE_CLASS_CURRENT, - DEVICE_CLASS_ENERGY, - DEVICE_CLASS_FREQUENCY, - DEVICE_CLASS_GAS, - DEVICE_CLASS_HUMIDITY, - DEVICE_CLASS_ILLUMINANCE, - DEVICE_CLASS_NITROGEN_DIOXIDE, - DEVICE_CLASS_NITROGEN_MONOXIDE, - DEVICE_CLASS_NITROUS_OXIDE, - DEVICE_CLASS_OZONE, - DEVICE_CLASS_PM1, - DEVICE_CLASS_PM10, - DEVICE_CLASS_PM25, - DEVICE_CLASS_POWER, - DEVICE_CLASS_POWER_FACTOR, - DEVICE_CLASS_PRESSURE, - DEVICE_CLASS_SIGNAL_STRENGTH, - DEVICE_CLASS_SULPHUR_DIOXIDE, - DEVICE_CLASS_TEMPERATURE, - DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS, - DEVICE_CLASS_VOLTAGE, ) from homeassistant.core import HomeAssistantError from homeassistant.helpers import config_validation as cv @@ -77,32 +54,32 @@ CONF_VOLTAGE = "voltage" CONF_VALUE = "value" ENTITY_TRIGGERS = { - DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}], - DEVICE_CLASS_CO: [{CONF_TYPE: CONF_CO}], - DEVICE_CLASS_CO2: [{CONF_TYPE: CONF_CO2}], - DEVICE_CLASS_CURRENT: [{CONF_TYPE: CONF_CURRENT}], - DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_ENERGY}], - DEVICE_CLASS_FREQUENCY: [{CONF_TYPE: CONF_FREQUENCY}], - DEVICE_CLASS_GAS: [{CONF_TYPE: CONF_GAS}], - DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}], - DEVICE_CLASS_ILLUMINANCE: [{CONF_TYPE: CONF_ILLUMINANCE}], - DEVICE_CLASS_NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_NITROGEN_DIOXIDE}], - DEVICE_CLASS_NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_NITROGEN_MONOXIDE}], - DEVICE_CLASS_NITROUS_OXIDE: [{CONF_TYPE: CONF_NITROUS_OXIDE}], - DEVICE_CLASS_OZONE: [{CONF_TYPE: CONF_OZONE}], - DEVICE_CLASS_PM1: [{CONF_TYPE: CONF_PM1}], - DEVICE_CLASS_PM10: [{CONF_TYPE: CONF_PM10}], - DEVICE_CLASS_PM25: [{CONF_TYPE: CONF_PM25}], - DEVICE_CLASS_POWER: [{CONF_TYPE: CONF_POWER}], - DEVICE_CLASS_POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}], - DEVICE_CLASS_PRESSURE: [{CONF_TYPE: CONF_PRESSURE}], - DEVICE_CLASS_SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}], - DEVICE_CLASS_SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}], - DEVICE_CLASS_TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}], - DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS: [ + SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}], + SensorDeviceClass.CO: [{CONF_TYPE: CONF_CO}], + SensorDeviceClass.CO2: [{CONF_TYPE: CONF_CO2}], + SensorDeviceClass.CURRENT: [{CONF_TYPE: CONF_CURRENT}], + SensorDeviceClass.ENERGY: [{CONF_TYPE: CONF_ENERGY}], + SensorDeviceClass.FREQUENCY: [{CONF_TYPE: CONF_FREQUENCY}], + SensorDeviceClass.GAS: [{CONF_TYPE: CONF_GAS}], + SensorDeviceClass.HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}], + SensorDeviceClass.ILLUMINANCE: [{CONF_TYPE: CONF_ILLUMINANCE}], + SensorDeviceClass.NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_NITROGEN_DIOXIDE}], + SensorDeviceClass.NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_NITROGEN_MONOXIDE}], + SensorDeviceClass.NITROUS_OXIDE: [{CONF_TYPE: CONF_NITROUS_OXIDE}], + SensorDeviceClass.OZONE: [{CONF_TYPE: CONF_OZONE}], + SensorDeviceClass.PM1: [{CONF_TYPE: CONF_PM1}], + SensorDeviceClass.PM10: [{CONF_TYPE: CONF_PM10}], + SensorDeviceClass.PM25: [{CONF_TYPE: CONF_PM25}], + SensorDeviceClass.POWER: [{CONF_TYPE: CONF_POWER}], + SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}], + SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_PRESSURE}], + SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}], + SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}], + SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}], + SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: [ {CONF_TYPE: CONF_VOLATILE_ORGANIC_COMPOUNDS} ], - DEVICE_CLASS_VOLTAGE: [{CONF_TYPE: CONF_VOLTAGE}], + SensorDeviceClass.VOLTAGE: [{CONF_TYPE: CONF_VOLTAGE}], DEVICE_CLASS_NONE: [{CONF_TYPE: CONF_VALUE}], } diff --git a/tests/components/sensor/test_device_condition.py b/tests/components/sensor/test_device_condition.py index ca3b046cbbd..ebbeb5ee616 100644 --- a/tests/components/sensor/test_device_condition.py +++ b/tests/components/sensor/test_device_condition.py @@ -3,7 +3,7 @@ import pytest import homeassistant.components.automation as automation from homeassistant.components.device_automation import DeviceAutomationType -from homeassistant.components.sensor import DEVICE_CLASSES, DOMAIN, SensorDeviceClass +from homeassistant.components.sensor import DOMAIN, SensorDeviceClass from homeassistant.components.sensor.device_condition import ENTITY_CONDITIONS from homeassistant.const import CONF_PLATFORM, PERCENTAGE, STATE_UNKNOWN from homeassistant.helpers import device_registry @@ -50,7 +50,7 @@ async def test_get_conditions(hass, device_reg, entity_reg, enable_custom_integr config_entry_id=config_entry.entry_id, connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) - for device_class in DEVICE_CLASSES: + for device_class in SensorDeviceClass: entity_reg.async_get_or_create( DOMAIN, "test", @@ -69,7 +69,7 @@ async def test_get_conditions(hass, device_reg, entity_reg, enable_custom_integr "device_id": device_entry.id, "entity_id": platform.ENTITIES[device_class].entity_id, } - for device_class in DEVICE_CLASSES + for device_class in SensorDeviceClass if device_class in UNITS_OF_MEASUREMENT for condition in ENTITY_CONDITIONS[device_class] if device_class != "none" @@ -89,7 +89,7 @@ async def test_get_conditions_no_state(hass, device_reg, entity_reg): connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) entity_ids = {} - for device_class in DEVICE_CLASSES: + for device_class in SensorDeviceClass: entity_ids[device_class] = entity_reg.async_get_or_create( DOMAIN, "test", @@ -109,7 +109,7 @@ async def test_get_conditions_no_state(hass, device_reg, entity_reg): "device_id": device_entry.id, "entity_id": entity_ids[device_class], } - for device_class in DEVICE_CLASSES + for device_class in SensorDeviceClass if device_class in UNITS_OF_MEASUREMENT for condition in ENTITY_CONDITIONS[device_class] if device_class != "none" diff --git a/tests/components/sensor/test_device_trigger.py b/tests/components/sensor/test_device_trigger.py index b6e987b5fda..b217016d339 100644 --- a/tests/components/sensor/test_device_trigger.py +++ b/tests/components/sensor/test_device_trigger.py @@ -5,7 +5,7 @@ import pytest import homeassistant.components.automation as automation from homeassistant.components.device_automation import DeviceAutomationType -from homeassistant.components.sensor import DEVICE_CLASSES, DOMAIN, SensorDeviceClass +from homeassistant.components.sensor import DOMAIN, SensorDeviceClass from homeassistant.components.sensor.device_trigger import ENTITY_TRIGGERS from homeassistant.const import CONF_PLATFORM, PERCENTAGE, STATE_UNKNOWN from homeassistant.helpers import device_registry @@ -54,7 +54,7 @@ async def test_get_triggers(hass, device_reg, entity_reg, enable_custom_integrat config_entry_id=config_entry.entry_id, connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) - for device_class in DEVICE_CLASSES: + for device_class in SensorDeviceClass: entity_reg.async_get_or_create( DOMAIN, "test", @@ -73,7 +73,7 @@ async def test_get_triggers(hass, device_reg, entity_reg, enable_custom_integrat "device_id": device_entry.id, "entity_id": platform.ENTITIES[device_class].entity_id, } - for device_class in DEVICE_CLASSES + for device_class in SensorDeviceClass if device_class in UNITS_OF_MEASUREMENT for trigger in ENTITY_TRIGGERS[device_class] if device_class != "none"