Add sensor device classes for apparent and reactive power (#62010)

This commit is contained in:
Erik Montnemery 2021-12-23 10:29:38 +01:00 committed by GitHub
parent 247c220882
commit 8e8e49d3e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 35 additions and 3 deletions

View File

@ -72,6 +72,9 @@ SCAN_INTERVAL: Final = timedelta(seconds=30)
class SensorDeviceClass(StrEnum):
"""Device class for sensors."""
# apparent power (VA)
APPARENT_POWER = "apparent_power"
# Air Quality Index
AQI = "aqi"
@ -138,6 +141,9 @@ class SensorDeviceClass(StrEnum):
# pressure (hPa/mbar)
PRESSURE = "pressure"
# reactive power (var)
REACTIVE_POWER = "reactive_power"
# signal strength (dB/dBm)
SIGNAL_STRENGTH = "signal_strength"

View File

@ -22,6 +22,7 @@ from . import DOMAIN, SensorDeviceClass
DEVICE_CLASS_NONE = "none"
CONF_IS_APPARENT_POWER = "is_apparent_power"
CONF_IS_BATTERY_LEVEL = "is_battery_level"
CONF_IS_CO = "is_carbon_monoxide"
CONF_IS_CO2 = "is_carbon_dioxide"
@ -41,6 +42,7 @@ CONF_IS_PM25 = "is_pm25"
CONF_IS_POWER = "is_power"
CONF_IS_POWER_FACTOR = "is_power_factor"
CONF_IS_PRESSURE = "is_pressure"
CONF_IS_REACTIVE_POWER = "is_reactive_power"
CONF_IS_SIGNAL_STRENGTH = "is_signal_strength"
CONF_IS_SULPHUR_DIOXIDE = "is_sulphur_dioxide"
CONF_IS_TEMPERATURE = "is_temperature"
@ -49,6 +51,7 @@ CONF_IS_VOLTAGE = "is_voltage"
CONF_IS_VALUE = "is_value"
ENTITY_CONDITIONS = {
SensorDeviceClass.APPARENT_POWER: [{CONF_TYPE: CONF_IS_APPARENT_POWER}],
SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}],
SensorDeviceClass.CO: [{CONF_TYPE: CONF_IS_CO}],
SensorDeviceClass.CO2: [{CONF_TYPE: CONF_IS_CO2}],
@ -68,6 +71,7 @@ ENTITY_CONDITIONS = {
SensorDeviceClass.PM10: [{CONF_TYPE: CONF_IS_PM10}],
SensorDeviceClass.PM25: [{CONF_TYPE: CONF_IS_PM25}],
SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}],
SensorDeviceClass.REACTIVE_POWER: [{CONF_TYPE: CONF_IS_REACTIVE_POWER}],
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}],
@ -84,6 +88,7 @@ CONDITION_SCHEMA = vol.All(
vol.Required(CONF_ENTITY_ID): cv.entity_id,
vol.Required(CONF_TYPE): vol.In(
[
CONF_IS_APPARENT_POWER,
CONF_IS_BATTERY_LEVEL,
CONF_IS_CO,
CONF_IS_CO2,
@ -103,6 +108,7 @@ CONDITION_SCHEMA = vol.All(
CONF_IS_PM10,
CONF_IS_PM25,
CONF_IS_PRESSURE,
CONF_IS_REACTIVE_POWER,
CONF_IS_SIGNAL_STRENGTH,
CONF_IS_SULPHUR_DIOXIDE,
CONF_IS_TEMPERATURE,

View File

@ -26,6 +26,7 @@ from . import DOMAIN, SensorDeviceClass
DEVICE_CLASS_NONE = "none"
CONF_APPARENT_POWER = "apparent_power"
CONF_BATTERY_LEVEL = "battery_level"
CONF_CO = "carbon_monoxide"
CONF_CO2 = "carbon_dioxide"
@ -45,6 +46,7 @@ CONF_PM25 = "pm25"
CONF_POWER = "power"
CONF_POWER_FACTOR = "power_factor"
CONF_PRESSURE = "pressure"
CONF_REACTIVE_POWER = "reactive_power"
CONF_SIGNAL_STRENGTH = "signal_strength"
CONF_SULPHUR_DIOXIDE = "sulphur_dioxide"
CONF_TEMPERATURE = "temperature"
@ -53,6 +55,7 @@ CONF_VOLTAGE = "voltage"
CONF_VALUE = "value"
ENTITY_TRIGGERS = {
SensorDeviceClass.APPARENT_POWER: [{CONF_TYPE: CONF_APPARENT_POWER}],
SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}],
SensorDeviceClass.CO: [{CONF_TYPE: CONF_CO}],
SensorDeviceClass.CO2: [{CONF_TYPE: CONF_CO2}],
@ -72,6 +75,7 @@ ENTITY_TRIGGERS = {
SensorDeviceClass.POWER: [{CONF_TYPE: CONF_POWER}],
SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}],
SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_PRESSURE}],
SensorDeviceClass.REACTIVE_POWER: [{CONF_TYPE: CONF_REACTIVE_POWER}],
SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}],
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}],
SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}],
@ -89,6 +93,7 @@ TRIGGER_SCHEMA = vol.All(
vol.Required(CONF_ENTITY_ID): cv.entity_id,
vol.Required(CONF_TYPE): vol.In(
[
CONF_APPARENT_POWER,
CONF_BATTERY_LEVEL,
CONF_CO,
CONF_CO2,
@ -108,6 +113,7 @@ TRIGGER_SCHEMA = vol.All(
CONF_POWER,
CONF_POWER_FACTOR,
CONF_PRESSURE,
CONF_REACTIVE_POWER,
CONF_SIGNAL_STRENGTH,
CONF_SULPHUR_DIOXIDE,
CONF_TEMPERATURE,

View File

@ -2,6 +2,7 @@
"title": "Sensor",
"device_automation": {
"condition_type": {
"is_apparent_power": "Current {entity_name} apparent power",
"is_battery_level": "Current {entity_name} battery level",
"is_carbon_monoxide": "Current {entity_name} carbon monoxide concentration level",
"is_carbon_dioxide": "Current {entity_name} carbon dioxide concentration level",
@ -17,6 +18,7 @@
"is_pm25": "Current {entity_name} PM2.5 concentration level",
"is_power": "Current {entity_name} power",
"is_pressure": "Current {entity_name} pressure",
"is_reactive_power": "Current {entity_name} reactive power",
"is_signal_strength": "Current {entity_name} signal strength",
"is_sulphur_dioxide": "Current {entity_name} sulphur dioxide concentration level",
"is_temperature": "Current {entity_name} temperature",
@ -29,6 +31,7 @@
"is_value": "Current {entity_name} value"
},
"trigger_type": {
"apparent_power": "{entity_name} apparent power changes",
"battery_level": "{entity_name} battery level changes",
"carbon_monoxide": "{entity_name} carbon monoxide concentration changes",
"carbon_dioxide": "{entity_name} carbon dioxide concentration changes",
@ -44,6 +47,7 @@
"pm25": "{entity_name} PM2.5 concentration changes",
"power": "{entity_name} power changes",
"pressure": "{entity_name} pressure changes",
"reactive_power": "{entity_name} reactive power changes",
"signal_strength": "{entity_name} signal strength changes",
"sulphur_dioxide": "{entity_name} sulphur dioxide concentration changes",
"temperature": "{entity_name} temperature changes",

View File

@ -458,12 +458,17 @@ ATTR_TEMPERATURE: Final = "temperature"
# #### UNITS OF MEASUREMENT ####
# Apparent power units
POWER_VOLT_AMPERE: Final = "VA"
# Power units
POWER_WATT: Final = "W"
POWER_KILO_WATT: Final = "kW"
POWER_VOLT_AMPERE: Final = "VA"
POWER_BTU_PER_HOUR: Final = "BTU/h"
# Reactive power units
POWER_VOLT_AMPERE_REACTIVE: Final = "var"
# Energy units
ENERGY_WATT_HOUR: Final = "Wh"
ENERGY_KILO_WATT_HOUR: Final = "kWh"

View File

@ -77,6 +77,7 @@ async def test_get_conditions(hass, device_reg, entity_reg, enable_custom_integr
conditions = await async_get_device_automations(
hass, DeviceAutomationType.CONDITION, device_entry.id
)
assert len(conditions) == 26
assert conditions == expected_conditions

View File

@ -81,7 +81,7 @@ async def test_get_triggers(hass, device_reg, entity_reg, enable_custom_integrat
triggers = await async_get_device_automations(
hass, DeviceAutomationType.TRIGGER, device_entry.id
)
assert len(triggers) == 24
assert len(triggers) == 26
assert triggers == expected_triggers

View File

@ -13,6 +13,8 @@ from homeassistant.const import (
CONCENTRATION_PARTS_PER_MILLION,
FREQUENCY_GIGAHERTZ,
PERCENTAGE,
POWER_VOLT_AMPERE,
POWER_VOLT_AMPERE_REACTIVE,
PRESSURE_HPA,
SIGNAL_STRENGTH_DECIBELS,
VOLUME_CUBIC_METERS,
@ -23,6 +25,7 @@ from tests.common import MockEntity
DEVICE_CLASSES.append("none")
UNITS_OF_MEASUREMENT = {
SensorDeviceClass.APPARENT_POWER: POWER_VOLT_AMPERE, # apparent power (VA)
SensorDeviceClass.BATTERY: PERCENTAGE, # % of battery that is left
SensorDeviceClass.CO: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO concentration
SensorDeviceClass.CO2: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO2 concentration
@ -41,9 +44,10 @@ UNITS_OF_MEASUREMENT = {
SensorDeviceClass.PRESSURE: PRESSURE_HPA, # pressure (hPa/mbar)
SensorDeviceClass.POWER: "kW", # power (W/kW)
SensorDeviceClass.CURRENT: "A", # current (A)
SensorDeviceClass.ENERGY: "kWh", # energy (Wh/kWh)
SensorDeviceClass.ENERGY: "kWh", # energy (Wh/kWh/MWh)
SensorDeviceClass.FREQUENCY: FREQUENCY_GIGAHERTZ, # energy (Hz/kHz/MHz/GHz)
SensorDeviceClass.POWER_FACTOR: PERCENTAGE, # power factor (no unit, min: -1.0, max: 1.0)
SensorDeviceClass.REACTIVE_POWER: POWER_VOLT_AMPERE_REACTIVE, # reactive power (var)
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, # µg/m³ of vocs
SensorDeviceClass.VOLTAGE: "V", # voltage (V)
SensorDeviceClass.GAS: VOLUME_CUBIC_METERS, # gas (m³)