mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 17:27:52 +00:00
Add sensor device classes for apparent and reactive power (#62010)
This commit is contained in:
parent
247c220882
commit
8e8e49d3e7
@ -72,6 +72,9 @@ SCAN_INTERVAL: Final = timedelta(seconds=30)
|
|||||||
class SensorDeviceClass(StrEnum):
|
class SensorDeviceClass(StrEnum):
|
||||||
"""Device class for sensors."""
|
"""Device class for sensors."""
|
||||||
|
|
||||||
|
# apparent power (VA)
|
||||||
|
APPARENT_POWER = "apparent_power"
|
||||||
|
|
||||||
# Air Quality Index
|
# Air Quality Index
|
||||||
AQI = "aqi"
|
AQI = "aqi"
|
||||||
|
|
||||||
@ -138,6 +141,9 @@ class SensorDeviceClass(StrEnum):
|
|||||||
# pressure (hPa/mbar)
|
# pressure (hPa/mbar)
|
||||||
PRESSURE = "pressure"
|
PRESSURE = "pressure"
|
||||||
|
|
||||||
|
# reactive power (var)
|
||||||
|
REACTIVE_POWER = "reactive_power"
|
||||||
|
|
||||||
# signal strength (dB/dBm)
|
# signal strength (dB/dBm)
|
||||||
SIGNAL_STRENGTH = "signal_strength"
|
SIGNAL_STRENGTH = "signal_strength"
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ from . import DOMAIN, SensorDeviceClass
|
|||||||
|
|
||||||
DEVICE_CLASS_NONE = "none"
|
DEVICE_CLASS_NONE = "none"
|
||||||
|
|
||||||
|
CONF_IS_APPARENT_POWER = "is_apparent_power"
|
||||||
CONF_IS_BATTERY_LEVEL = "is_battery_level"
|
CONF_IS_BATTERY_LEVEL = "is_battery_level"
|
||||||
CONF_IS_CO = "is_carbon_monoxide"
|
CONF_IS_CO = "is_carbon_monoxide"
|
||||||
CONF_IS_CO2 = "is_carbon_dioxide"
|
CONF_IS_CO2 = "is_carbon_dioxide"
|
||||||
@ -41,6 +42,7 @@ CONF_IS_PM25 = "is_pm25"
|
|||||||
CONF_IS_POWER = "is_power"
|
CONF_IS_POWER = "is_power"
|
||||||
CONF_IS_POWER_FACTOR = "is_power_factor"
|
CONF_IS_POWER_FACTOR = "is_power_factor"
|
||||||
CONF_IS_PRESSURE = "is_pressure"
|
CONF_IS_PRESSURE = "is_pressure"
|
||||||
|
CONF_IS_REACTIVE_POWER = "is_reactive_power"
|
||||||
CONF_IS_SIGNAL_STRENGTH = "is_signal_strength"
|
CONF_IS_SIGNAL_STRENGTH = "is_signal_strength"
|
||||||
CONF_IS_SULPHUR_DIOXIDE = "is_sulphur_dioxide"
|
CONF_IS_SULPHUR_DIOXIDE = "is_sulphur_dioxide"
|
||||||
CONF_IS_TEMPERATURE = "is_temperature"
|
CONF_IS_TEMPERATURE = "is_temperature"
|
||||||
@ -49,6 +51,7 @@ CONF_IS_VOLTAGE = "is_voltage"
|
|||||||
CONF_IS_VALUE = "is_value"
|
CONF_IS_VALUE = "is_value"
|
||||||
|
|
||||||
ENTITY_CONDITIONS = {
|
ENTITY_CONDITIONS = {
|
||||||
|
SensorDeviceClass.APPARENT_POWER: [{CONF_TYPE: CONF_IS_APPARENT_POWER}],
|
||||||
SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}],
|
SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}],
|
||||||
SensorDeviceClass.CO: [{CONF_TYPE: CONF_IS_CO}],
|
SensorDeviceClass.CO: [{CONF_TYPE: CONF_IS_CO}],
|
||||||
SensorDeviceClass.CO2: [{CONF_TYPE: CONF_IS_CO2}],
|
SensorDeviceClass.CO2: [{CONF_TYPE: CONF_IS_CO2}],
|
||||||
@ -68,6 +71,7 @@ ENTITY_CONDITIONS = {
|
|||||||
SensorDeviceClass.PM10: [{CONF_TYPE: CONF_IS_PM10}],
|
SensorDeviceClass.PM10: [{CONF_TYPE: CONF_IS_PM10}],
|
||||||
SensorDeviceClass.PM25: [{CONF_TYPE: CONF_IS_PM25}],
|
SensorDeviceClass.PM25: [{CONF_TYPE: CONF_IS_PM25}],
|
||||||
SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}],
|
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.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_IS_SIGNAL_STRENGTH}],
|
||||||
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}],
|
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}],
|
||||||
SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}],
|
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_ENTITY_ID): cv.entity_id,
|
||||||
vol.Required(CONF_TYPE): vol.In(
|
vol.Required(CONF_TYPE): vol.In(
|
||||||
[
|
[
|
||||||
|
CONF_IS_APPARENT_POWER,
|
||||||
CONF_IS_BATTERY_LEVEL,
|
CONF_IS_BATTERY_LEVEL,
|
||||||
CONF_IS_CO,
|
CONF_IS_CO,
|
||||||
CONF_IS_CO2,
|
CONF_IS_CO2,
|
||||||
@ -103,6 +108,7 @@ CONDITION_SCHEMA = vol.All(
|
|||||||
CONF_IS_PM10,
|
CONF_IS_PM10,
|
||||||
CONF_IS_PM25,
|
CONF_IS_PM25,
|
||||||
CONF_IS_PRESSURE,
|
CONF_IS_PRESSURE,
|
||||||
|
CONF_IS_REACTIVE_POWER,
|
||||||
CONF_IS_SIGNAL_STRENGTH,
|
CONF_IS_SIGNAL_STRENGTH,
|
||||||
CONF_IS_SULPHUR_DIOXIDE,
|
CONF_IS_SULPHUR_DIOXIDE,
|
||||||
CONF_IS_TEMPERATURE,
|
CONF_IS_TEMPERATURE,
|
||||||
|
@ -26,6 +26,7 @@ from . import DOMAIN, SensorDeviceClass
|
|||||||
|
|
||||||
DEVICE_CLASS_NONE = "none"
|
DEVICE_CLASS_NONE = "none"
|
||||||
|
|
||||||
|
CONF_APPARENT_POWER = "apparent_power"
|
||||||
CONF_BATTERY_LEVEL = "battery_level"
|
CONF_BATTERY_LEVEL = "battery_level"
|
||||||
CONF_CO = "carbon_monoxide"
|
CONF_CO = "carbon_monoxide"
|
||||||
CONF_CO2 = "carbon_dioxide"
|
CONF_CO2 = "carbon_dioxide"
|
||||||
@ -45,6 +46,7 @@ CONF_PM25 = "pm25"
|
|||||||
CONF_POWER = "power"
|
CONF_POWER = "power"
|
||||||
CONF_POWER_FACTOR = "power_factor"
|
CONF_POWER_FACTOR = "power_factor"
|
||||||
CONF_PRESSURE = "pressure"
|
CONF_PRESSURE = "pressure"
|
||||||
|
CONF_REACTIVE_POWER = "reactive_power"
|
||||||
CONF_SIGNAL_STRENGTH = "signal_strength"
|
CONF_SIGNAL_STRENGTH = "signal_strength"
|
||||||
CONF_SULPHUR_DIOXIDE = "sulphur_dioxide"
|
CONF_SULPHUR_DIOXIDE = "sulphur_dioxide"
|
||||||
CONF_TEMPERATURE = "temperature"
|
CONF_TEMPERATURE = "temperature"
|
||||||
@ -53,6 +55,7 @@ CONF_VOLTAGE = "voltage"
|
|||||||
CONF_VALUE = "value"
|
CONF_VALUE = "value"
|
||||||
|
|
||||||
ENTITY_TRIGGERS = {
|
ENTITY_TRIGGERS = {
|
||||||
|
SensorDeviceClass.APPARENT_POWER: [{CONF_TYPE: CONF_APPARENT_POWER}],
|
||||||
SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}],
|
SensorDeviceClass.BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}],
|
||||||
SensorDeviceClass.CO: [{CONF_TYPE: CONF_CO}],
|
SensorDeviceClass.CO: [{CONF_TYPE: CONF_CO}],
|
||||||
SensorDeviceClass.CO2: [{CONF_TYPE: CONF_CO2}],
|
SensorDeviceClass.CO2: [{CONF_TYPE: CONF_CO2}],
|
||||||
@ -72,6 +75,7 @@ ENTITY_TRIGGERS = {
|
|||||||
SensorDeviceClass.POWER: [{CONF_TYPE: CONF_POWER}],
|
SensorDeviceClass.POWER: [{CONF_TYPE: CONF_POWER}],
|
||||||
SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}],
|
SensorDeviceClass.POWER_FACTOR: [{CONF_TYPE: CONF_POWER_FACTOR}],
|
||||||
SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_PRESSURE}],
|
SensorDeviceClass.PRESSURE: [{CONF_TYPE: CONF_PRESSURE}],
|
||||||
|
SensorDeviceClass.REACTIVE_POWER: [{CONF_TYPE: CONF_REACTIVE_POWER}],
|
||||||
SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}],
|
SensorDeviceClass.SIGNAL_STRENGTH: [{CONF_TYPE: CONF_SIGNAL_STRENGTH}],
|
||||||
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}],
|
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}],
|
||||||
SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}],
|
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_ENTITY_ID): cv.entity_id,
|
||||||
vol.Required(CONF_TYPE): vol.In(
|
vol.Required(CONF_TYPE): vol.In(
|
||||||
[
|
[
|
||||||
|
CONF_APPARENT_POWER,
|
||||||
CONF_BATTERY_LEVEL,
|
CONF_BATTERY_LEVEL,
|
||||||
CONF_CO,
|
CONF_CO,
|
||||||
CONF_CO2,
|
CONF_CO2,
|
||||||
@ -108,6 +113,7 @@ TRIGGER_SCHEMA = vol.All(
|
|||||||
CONF_POWER,
|
CONF_POWER,
|
||||||
CONF_POWER_FACTOR,
|
CONF_POWER_FACTOR,
|
||||||
CONF_PRESSURE,
|
CONF_PRESSURE,
|
||||||
|
CONF_REACTIVE_POWER,
|
||||||
CONF_SIGNAL_STRENGTH,
|
CONF_SIGNAL_STRENGTH,
|
||||||
CONF_SULPHUR_DIOXIDE,
|
CONF_SULPHUR_DIOXIDE,
|
||||||
CONF_TEMPERATURE,
|
CONF_TEMPERATURE,
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
"title": "Sensor",
|
"title": "Sensor",
|
||||||
"device_automation": {
|
"device_automation": {
|
||||||
"condition_type": {
|
"condition_type": {
|
||||||
|
"is_apparent_power": "Current {entity_name} apparent power",
|
||||||
"is_battery_level": "Current {entity_name} battery level",
|
"is_battery_level": "Current {entity_name} battery level",
|
||||||
"is_carbon_monoxide": "Current {entity_name} carbon monoxide concentration level",
|
"is_carbon_monoxide": "Current {entity_name} carbon monoxide concentration level",
|
||||||
"is_carbon_dioxide": "Current {entity_name} carbon dioxide 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_pm25": "Current {entity_name} PM2.5 concentration level",
|
||||||
"is_power": "Current {entity_name} power",
|
"is_power": "Current {entity_name} power",
|
||||||
"is_pressure": "Current {entity_name} pressure",
|
"is_pressure": "Current {entity_name} pressure",
|
||||||
|
"is_reactive_power": "Current {entity_name} reactive power",
|
||||||
"is_signal_strength": "Current {entity_name} signal strength",
|
"is_signal_strength": "Current {entity_name} signal strength",
|
||||||
"is_sulphur_dioxide": "Current {entity_name} sulphur dioxide concentration level",
|
"is_sulphur_dioxide": "Current {entity_name} sulphur dioxide concentration level",
|
||||||
"is_temperature": "Current {entity_name} temperature",
|
"is_temperature": "Current {entity_name} temperature",
|
||||||
@ -29,6 +31,7 @@
|
|||||||
"is_value": "Current {entity_name} value"
|
"is_value": "Current {entity_name} value"
|
||||||
},
|
},
|
||||||
"trigger_type": {
|
"trigger_type": {
|
||||||
|
"apparent_power": "{entity_name} apparent power changes",
|
||||||
"battery_level": "{entity_name} battery level changes",
|
"battery_level": "{entity_name} battery level changes",
|
||||||
"carbon_monoxide": "{entity_name} carbon monoxide concentration changes",
|
"carbon_monoxide": "{entity_name} carbon monoxide concentration changes",
|
||||||
"carbon_dioxide": "{entity_name} carbon dioxide concentration changes",
|
"carbon_dioxide": "{entity_name} carbon dioxide concentration changes",
|
||||||
@ -44,6 +47,7 @@
|
|||||||
"pm25": "{entity_name} PM2.5 concentration changes",
|
"pm25": "{entity_name} PM2.5 concentration changes",
|
||||||
"power": "{entity_name} power changes",
|
"power": "{entity_name} power changes",
|
||||||
"pressure": "{entity_name} pressure changes",
|
"pressure": "{entity_name} pressure changes",
|
||||||
|
"reactive_power": "{entity_name} reactive power changes",
|
||||||
"signal_strength": "{entity_name} signal strength changes",
|
"signal_strength": "{entity_name} signal strength changes",
|
||||||
"sulphur_dioxide": "{entity_name} sulphur dioxide concentration changes",
|
"sulphur_dioxide": "{entity_name} sulphur dioxide concentration changes",
|
||||||
"temperature": "{entity_name} temperature changes",
|
"temperature": "{entity_name} temperature changes",
|
||||||
|
@ -458,12 +458,17 @@ ATTR_TEMPERATURE: Final = "temperature"
|
|||||||
|
|
||||||
|
|
||||||
# #### UNITS OF MEASUREMENT ####
|
# #### UNITS OF MEASUREMENT ####
|
||||||
|
# Apparent power units
|
||||||
|
POWER_VOLT_AMPERE: Final = "VA"
|
||||||
|
|
||||||
# Power units
|
# Power units
|
||||||
POWER_WATT: Final = "W"
|
POWER_WATT: Final = "W"
|
||||||
POWER_KILO_WATT: Final = "kW"
|
POWER_KILO_WATT: Final = "kW"
|
||||||
POWER_VOLT_AMPERE: Final = "VA"
|
|
||||||
POWER_BTU_PER_HOUR: Final = "BTU/h"
|
POWER_BTU_PER_HOUR: Final = "BTU/h"
|
||||||
|
|
||||||
|
# Reactive power units
|
||||||
|
POWER_VOLT_AMPERE_REACTIVE: Final = "var"
|
||||||
|
|
||||||
# Energy units
|
# Energy units
|
||||||
ENERGY_WATT_HOUR: Final = "Wh"
|
ENERGY_WATT_HOUR: Final = "Wh"
|
||||||
ENERGY_KILO_WATT_HOUR: Final = "kWh"
|
ENERGY_KILO_WATT_HOUR: Final = "kWh"
|
||||||
|
@ -77,6 +77,7 @@ async def test_get_conditions(hass, device_reg, entity_reg, enable_custom_integr
|
|||||||
conditions = await async_get_device_automations(
|
conditions = await async_get_device_automations(
|
||||||
hass, DeviceAutomationType.CONDITION, device_entry.id
|
hass, DeviceAutomationType.CONDITION, device_entry.id
|
||||||
)
|
)
|
||||||
|
assert len(conditions) == 26
|
||||||
assert conditions == expected_conditions
|
assert conditions == expected_conditions
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ async def test_get_triggers(hass, device_reg, entity_reg, enable_custom_integrat
|
|||||||
triggers = await async_get_device_automations(
|
triggers = await async_get_device_automations(
|
||||||
hass, DeviceAutomationType.TRIGGER, device_entry.id
|
hass, DeviceAutomationType.TRIGGER, device_entry.id
|
||||||
)
|
)
|
||||||
assert len(triggers) == 24
|
assert len(triggers) == 26
|
||||||
assert triggers == expected_triggers
|
assert triggers == expected_triggers
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ from homeassistant.const import (
|
|||||||
CONCENTRATION_PARTS_PER_MILLION,
|
CONCENTRATION_PARTS_PER_MILLION,
|
||||||
FREQUENCY_GIGAHERTZ,
|
FREQUENCY_GIGAHERTZ,
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
|
POWER_VOLT_AMPERE,
|
||||||
|
POWER_VOLT_AMPERE_REACTIVE,
|
||||||
PRESSURE_HPA,
|
PRESSURE_HPA,
|
||||||
SIGNAL_STRENGTH_DECIBELS,
|
SIGNAL_STRENGTH_DECIBELS,
|
||||||
VOLUME_CUBIC_METERS,
|
VOLUME_CUBIC_METERS,
|
||||||
@ -23,6 +25,7 @@ from tests.common import MockEntity
|
|||||||
DEVICE_CLASSES.append("none")
|
DEVICE_CLASSES.append("none")
|
||||||
|
|
||||||
UNITS_OF_MEASUREMENT = {
|
UNITS_OF_MEASUREMENT = {
|
||||||
|
SensorDeviceClass.APPARENT_POWER: POWER_VOLT_AMPERE, # apparent power (VA)
|
||||||
SensorDeviceClass.BATTERY: PERCENTAGE, # % of battery that is left
|
SensorDeviceClass.BATTERY: PERCENTAGE, # % of battery that is left
|
||||||
SensorDeviceClass.CO: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO concentration
|
SensorDeviceClass.CO: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO concentration
|
||||||
SensorDeviceClass.CO2: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO2 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.PRESSURE: PRESSURE_HPA, # pressure (hPa/mbar)
|
||||||
SensorDeviceClass.POWER: "kW", # power (W/kW)
|
SensorDeviceClass.POWER: "kW", # power (W/kW)
|
||||||
SensorDeviceClass.CURRENT: "A", # current (A)
|
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.FREQUENCY: FREQUENCY_GIGAHERTZ, # energy (Hz/kHz/MHz/GHz)
|
||||||
SensorDeviceClass.POWER_FACTOR: PERCENTAGE, # power factor (no unit, min: -1.0, max: 1.0)
|
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.VOLATILE_ORGANIC_COMPOUNDS: CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, # µg/m³ of vocs
|
||||||
SensorDeviceClass.VOLTAGE: "V", # voltage (V)
|
SensorDeviceClass.VOLTAGE: "V", # voltage (V)
|
||||||
SensorDeviceClass.GAS: VOLUME_CUBIC_METERS, # gas (m³)
|
SensorDeviceClass.GAS: VOLUME_CUBIC_METERS, # gas (m³)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user