Use SensorDeviceClass enum in sensor device automations (#62480)

This commit is contained in:
Erik Montnemery 2021-12-21 14:07:01 +01:00 committed by GitHub
parent 69ba04be3c
commit 684c380ce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 59 additions and 110 deletions

View File

@ -6,36 +6,8 @@ import voluptuous as vol
from homeassistant.components.device_automation.exceptions import ( from homeassistant.components.device_automation.exceptions import (
InvalidDeviceAutomationConfig, InvalidDeviceAutomationConfig,
) )
from homeassistant.const import ( from homeassistant.components.sensor import SensorDeviceClass
CONF_ABOVE, from homeassistant.const import CONF_ABOVE, CONF_BELOW, CONF_ENTITY_ID, CONF_TYPE
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.core import HomeAssistant, HomeAssistantError, callback from homeassistant.core import HomeAssistant, HomeAssistantError, callback
from homeassistant.helpers import condition, config_validation as cv from homeassistant.helpers import condition, config_validation as cv
from homeassistant.helpers.entity import get_device_class, get_unit_of_measurement 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" CONF_IS_VALUE = "is_value"
ENTITY_CONDITIONS = { ENTITY_CONDITIONS = {
DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}], SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}],
DEVICE_CLASS_CO: [{CONF_TYPE: CONF_IS_CO}], SensorDeviceClass.CO: [{CONF_TYPE: CONF_IS_CO}],
DEVICE_CLASS_CO2: [{CONF_TYPE: CONF_IS_CO2}], SensorDeviceClass.CO2: [{CONF_TYPE: CONF_IS_CO2}],
DEVICE_CLASS_CURRENT: [{CONF_TYPE: CONF_IS_CURRENT}], SensorDeviceClass.CURRENT: [{CONF_TYPE: CONF_IS_CURRENT}],
DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}], SensorDeviceClass.ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}],
DEVICE_CLASS_FREQUENCY: [{CONF_TYPE: CONF_IS_FREQUENCY}], SensorDeviceClass.FREQUENCY: [{CONF_TYPE: CONF_IS_FREQUENCY}],
DEVICE_CLASS_GAS: [{CONF_TYPE: CONF_IS_GAS}], SensorDeviceClass.GAS: [{CONF_TYPE: CONF_IS_GAS}],
DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}], SensorDeviceClass.HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}],
DEVICE_CLASS_ILLUMINANCE: [{CONF_TYPE: CONF_IS_ILLUMINANCE}], SensorDeviceClass.ILLUMINANCE: [{CONF_TYPE: CONF_IS_ILLUMINANCE}],
DEVICE_CLASS_NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_DIOXIDE}], SensorDeviceClass.NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_DIOXIDE}],
DEVICE_CLASS_NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_MONOXIDE}], SensorDeviceClass.NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_IS_NITROGEN_MONOXIDE}],
DEVICE_CLASS_NITROUS_OXIDE: [{CONF_TYPE: CONF_IS_NITROUS_OXIDE}], SensorDeviceClass.NITROUS_OXIDE: [{CONF_TYPE: CONF_IS_NITROUS_OXIDE}],
DEVICE_CLASS_OZONE: [{CONF_TYPE: CONF_IS_OZONE}], SensorDeviceClass.OZONE: [{CONF_TYPE: CONF_IS_OZONE}],
DEVICE_CLASS_POWER: [{CONF_TYPE: CONF_IS_POWER}], SensorDeviceClass.POWER: [{CONF_TYPE: CONF_IS_POWER}],
DEVICE_CLASS_POWER_FACTOR: [{CONF_TYPE: CONF_IS_POWER_FACTOR}], SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_IS_POWER_FACTOR}],
DEVICE_CLASS_PM1: [{CONF_TYPE: CONF_IS_PM1}], SensorDeviceClass.PM1: [{CONF_TYPE: CONF_IS_PM1}],
DEVICE_CLASS_PM10: [{CONF_TYPE: CONF_IS_PM10}], SensorDeviceClass.PM10: [{CONF_TYPE: CONF_IS_PM10}],
DEVICE_CLASS_PM25: [{CONF_TYPE: CONF_IS_PM25}], SensorDeviceClass.PM25: [{CONF_TYPE: CONF_IS_PM25}],
DEVICE_CLASS_PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}], SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}],
DEVICE_CLASS_SIGNAL_STRENGTH: [{CONF_TYPE: CONF_IS_SIGNAL_STRENGTH}], SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_IS_SIGNAL_STRENGTH}],
DEVICE_CLASS_SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}], SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}],
DEVICE_CLASS_TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}], SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}],
DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS: [ SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: [
{CONF_TYPE: CONF_IS_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}], DEVICE_CLASS_NONE: [{CONF_TYPE: CONF_IS_VALUE}],
} }

View File

@ -8,36 +8,13 @@ from homeassistant.components.device_automation.exceptions import (
from homeassistant.components.homeassistant.triggers import ( from homeassistant.components.homeassistant.triggers import (
numeric_state as numeric_state_trigger, numeric_state as numeric_state_trigger,
) )
from homeassistant.components.sensor import SensorDeviceClass
from homeassistant.const import ( from homeassistant.const import (
CONF_ABOVE, CONF_ABOVE,
CONF_BELOW, CONF_BELOW,
CONF_ENTITY_ID, CONF_ENTITY_ID,
CONF_FOR, CONF_FOR,
CONF_TYPE, 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.core import HomeAssistantError
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
@ -77,32 +54,32 @@ CONF_VOLTAGE = "voltage"
CONF_VALUE = "value" CONF_VALUE = "value"
ENTITY_TRIGGERS = { ENTITY_TRIGGERS = {
DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}], SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}],
DEVICE_CLASS_CO: [{CONF_TYPE: CONF_CO}], SensorDeviceClass.CO: [{CONF_TYPE: CONF_CO}],
DEVICE_CLASS_CO2: [{CONF_TYPE: CONF_CO2}], SensorDeviceClass.CO2: [{CONF_TYPE: CONF_CO2}],
DEVICE_CLASS_CURRENT: [{CONF_TYPE: CONF_CURRENT}], SensorDeviceClass.CURRENT: [{CONF_TYPE: CONF_CURRENT}],
DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_ENERGY}], SensorDeviceClass.ENERGY: [{CONF_TYPE: CONF_ENERGY}],
DEVICE_CLASS_FREQUENCY: [{CONF_TYPE: CONF_FREQUENCY}], SensorDeviceClass.FREQUENCY: [{CONF_TYPE: CONF_FREQUENCY}],
DEVICE_CLASS_GAS: [{CONF_TYPE: CONF_GAS}], SensorDeviceClass.GAS: [{CONF_TYPE: CONF_GAS}],
DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}], SensorDeviceClass.HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}],
DEVICE_CLASS_ILLUMINANCE: [{CONF_TYPE: CONF_ILLUMINANCE}], SensorDeviceClass.ILLUMINANCE: [{CONF_TYPE: CONF_ILLUMINANCE}],
DEVICE_CLASS_NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_NITROGEN_DIOXIDE}], SensorDeviceClass.NITROGEN_DIOXIDE: [{CONF_TYPE: CONF_NITROGEN_DIOXIDE}],
DEVICE_CLASS_NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_NITROGEN_MONOXIDE}], SensorDeviceClass.NITROGEN_MONOXIDE: [{CONF_TYPE: CONF_NITROGEN_MONOXIDE}],
DEVICE_CLASS_NITROUS_OXIDE: [{CONF_TYPE: CONF_NITROUS_OXIDE}], SensorDeviceClass.NITROUS_OXIDE: [{CONF_TYPE: CONF_NITROUS_OXIDE}],
DEVICE_CLASS_OZONE: [{CONF_TYPE: CONF_OZONE}], SensorDeviceClass.OZONE: [{CONF_TYPE: CONF_OZONE}],
DEVICE_CLASS_PM1: [{CONF_TYPE: CONF_PM1}], SensorDeviceClass.PM1: [{CONF_TYPE: CONF_PM1}],
DEVICE_CLASS_PM10: [{CONF_TYPE: CONF_PM10}], SensorDeviceClass.PM10: [{CONF_TYPE: CONF_PM10}],
DEVICE_CLASS_PM25: [{CONF_TYPE: CONF_PM25}], SensorDeviceClass.PM25: [{CONF_TYPE: CONF_PM25}],
DEVICE_CLASS_POWER: [{CONF_TYPE: CONF_POWER}], SensorDeviceClass.POWER: [{CONF_TYPE: CONF_POWER}],
DEVICE_CLASS_POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}], SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}],
DEVICE_CLASS_PRESSURE: [{CONF_TYPE: CONF_PRESSURE}], SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_PRESSURE}],
DEVICE_CLASS_SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}], SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}],
DEVICE_CLASS_SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}], SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}],
DEVICE_CLASS_TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}], SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}],
DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS: [ SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: [
{CONF_TYPE: CONF_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}], DEVICE_CLASS_NONE: [{CONF_TYPE: CONF_VALUE}],
} }

View File

@ -3,7 +3,7 @@ import pytest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
from homeassistant.components.device_automation import DeviceAutomationType 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.components.sensor.device_condition import ENTITY_CONDITIONS
from homeassistant.const import CONF_PLATFORM, PERCENTAGE, STATE_UNKNOWN from homeassistant.const import CONF_PLATFORM, PERCENTAGE, STATE_UNKNOWN
from homeassistant.helpers import device_registry 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, config_entry_id=config_entry.entry_id,
connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, 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( entity_reg.async_get_or_create(
DOMAIN, DOMAIN,
"test", "test",
@ -69,7 +69,7 @@ async def test_get_conditions(hass, device_reg, entity_reg, enable_custom_integr
"device_id": device_entry.id, "device_id": device_entry.id,
"entity_id": platform.ENTITIES[device_class].entity_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 if device_class in UNITS_OF_MEASUREMENT
for condition in ENTITY_CONDITIONS[device_class] for condition in ENTITY_CONDITIONS[device_class]
if device_class != "none" 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")}, connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
) )
entity_ids = {} entity_ids = {}
for device_class in DEVICE_CLASSES: for device_class in SensorDeviceClass:
entity_ids[device_class] = entity_reg.async_get_or_create( entity_ids[device_class] = entity_reg.async_get_or_create(
DOMAIN, DOMAIN,
"test", "test",
@ -109,7 +109,7 @@ async def test_get_conditions_no_state(hass, device_reg, entity_reg):
"device_id": device_entry.id, "device_id": device_entry.id,
"entity_id": entity_ids[device_class], "entity_id": entity_ids[device_class],
} }
for device_class in DEVICE_CLASSES for device_class in SensorDeviceClass
if device_class in UNITS_OF_MEASUREMENT if device_class in UNITS_OF_MEASUREMENT
for condition in ENTITY_CONDITIONS[device_class] for condition in ENTITY_CONDITIONS[device_class]
if device_class != "none" if device_class != "none"

View File

@ -5,7 +5,7 @@ import pytest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
from homeassistant.components.device_automation import DeviceAutomationType 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.components.sensor.device_trigger import ENTITY_TRIGGERS
from homeassistant.const import CONF_PLATFORM, PERCENTAGE, STATE_UNKNOWN from homeassistant.const import CONF_PLATFORM, PERCENTAGE, STATE_UNKNOWN
from homeassistant.helpers import device_registry 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, config_entry_id=config_entry.entry_id,
connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, 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( entity_reg.async_get_or_create(
DOMAIN, DOMAIN,
"test", "test",
@ -73,7 +73,7 @@ async def test_get_triggers(hass, device_reg, entity_reg, enable_custom_integrat
"device_id": device_entry.id, "device_id": device_entry.id,
"entity_id": platform.ENTITIES[device_class].entity_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 if device_class in UNITS_OF_MEASUREMENT
for trigger in ENTITY_TRIGGERS[device_class] for trigger in ENTITY_TRIGGERS[device_class]
if device_class != "none" if device_class != "none"