Add device classes for CO and CO2 measurements (#47487)

This commit is contained in:
Alexei Chetroi 2021-03-06 18:52:43 -05:00 committed by GitHub
parent 9101ed2732
commit 79b5ca9415
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 35 additions and 2 deletions

View File

@ -7,6 +7,8 @@ import voluptuous as vol
from homeassistant.const import ( from homeassistant.const import (
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
DEVICE_CLASS_CO,
DEVICE_CLASS_CO2,
DEVICE_CLASS_CURRENT, DEVICE_CLASS_CURRENT,
DEVICE_CLASS_ENERGY, DEVICE_CLASS_ENERGY,
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
@ -36,6 +38,8 @@ ENTITY_ID_FORMAT = DOMAIN + ".{}"
SCAN_INTERVAL = timedelta(seconds=30) SCAN_INTERVAL = timedelta(seconds=30)
DEVICE_CLASSES = [ DEVICE_CLASSES = [
DEVICE_CLASS_BATTERY, # % of battery that is left DEVICE_CLASS_BATTERY, # % of battery that is left
DEVICE_CLASS_CO, # ppm (parts per million) Carbon Monoxide gas concentration
DEVICE_CLASS_CO2, # ppm (parts per million) Carbon Dioxide gas concentration
DEVICE_CLASS_CURRENT, # current (A) DEVICE_CLASS_CURRENT, # current (A)
DEVICE_CLASS_ENERGY, # energy (kWh, Wh) DEVICE_CLASS_ENERGY, # energy (kWh, Wh)
DEVICE_CLASS_HUMIDITY, # % of humidity in the air DEVICE_CLASS_HUMIDITY, # % of humidity in the air

View File

@ -14,6 +14,8 @@ from homeassistant.const import (
CONF_ENTITY_ID, CONF_ENTITY_ID,
CONF_TYPE, CONF_TYPE,
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
DEVICE_CLASS_CO,
DEVICE_CLASS_CO2,
DEVICE_CLASS_CURRENT, DEVICE_CLASS_CURRENT,
DEVICE_CLASS_ENERGY, DEVICE_CLASS_ENERGY,
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
@ -41,6 +43,8 @@ from . import DOMAIN
DEVICE_CLASS_NONE = "none" DEVICE_CLASS_NONE = "none"
CONF_IS_BATTERY_LEVEL = "is_battery_level" CONF_IS_BATTERY_LEVEL = "is_battery_level"
CONF_IS_CO = "is_carbon_monoxide"
CONF_IS_CO2 = "is_carbon_dioxide"
CONF_IS_CURRENT = "is_current" CONF_IS_CURRENT = "is_current"
CONF_IS_ENERGY = "is_energy" CONF_IS_ENERGY = "is_energy"
CONF_IS_HUMIDITY = "is_humidity" CONF_IS_HUMIDITY = "is_humidity"
@ -56,6 +60,8 @@ CONF_IS_VALUE = "is_value"
ENTITY_CONDITIONS = { ENTITY_CONDITIONS = {
DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}], 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_CURRENT: [{CONF_TYPE: CONF_IS_CURRENT}],
DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}], DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}],
DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}], DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}],
@ -77,6 +83,8 @@ CONDITION_SCHEMA = vol.All(
vol.Required(CONF_TYPE): vol.In( vol.Required(CONF_TYPE): vol.In(
[ [
CONF_IS_BATTERY_LEVEL, CONF_IS_BATTERY_LEVEL,
CONF_IS_CO,
CONF_IS_CO2,
CONF_IS_CURRENT, CONF_IS_CURRENT,
CONF_IS_ENERGY, CONF_IS_ENERGY,
CONF_IS_HUMIDITY, CONF_IS_HUMIDITY,

View File

@ -17,6 +17,8 @@ from homeassistant.const import (
CONF_FOR, CONF_FOR,
CONF_TYPE, CONF_TYPE,
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
DEVICE_CLASS_CO,
DEVICE_CLASS_CO2,
DEVICE_CLASS_CURRENT, DEVICE_CLASS_CURRENT,
DEVICE_CLASS_ENERGY, DEVICE_CLASS_ENERGY,
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
@ -39,6 +41,8 @@ from . import DOMAIN
DEVICE_CLASS_NONE = "none" DEVICE_CLASS_NONE = "none"
CONF_BATTERY_LEVEL = "battery_level" CONF_BATTERY_LEVEL = "battery_level"
CONF_CO = "carbon_monoxide"
CONF_CO2 = "carbon_dioxide"
CONF_CURRENT = "current" CONF_CURRENT = "current"
CONF_ENERGY = "energy" CONF_ENERGY = "energy"
CONF_HUMIDITY = "humidity" CONF_HUMIDITY = "humidity"
@ -54,6 +58,8 @@ CONF_VALUE = "value"
ENTITY_TRIGGERS = { ENTITY_TRIGGERS = {
DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}], 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_CURRENT: [{CONF_TYPE: CONF_CURRENT}],
DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_ENERGY}], DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_ENERGY}],
DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}], DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}],
@ -76,6 +82,8 @@ TRIGGER_SCHEMA = vol.All(
vol.Required(CONF_TYPE): vol.In( vol.Required(CONF_TYPE): vol.In(
[ [
CONF_BATTERY_LEVEL, CONF_BATTERY_LEVEL,
CONF_CO,
CONF_CO2,
CONF_CURRENT, CONF_CURRENT,
CONF_ENERGY, CONF_ENERGY,
CONF_HUMIDITY, CONF_HUMIDITY,

View File

@ -3,6 +3,8 @@
"device_automation": { "device_automation": {
"condition_type": { "condition_type": {
"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_dioxide": "Current {entity_name} carbon dioxide concentration level",
"is_humidity": "Current {entity_name} humidity", "is_humidity": "Current {entity_name} humidity",
"is_illuminance": "Current {entity_name} illuminance", "is_illuminance": "Current {entity_name} illuminance",
"is_power": "Current {entity_name} power", "is_power": "Current {entity_name} power",
@ -18,6 +20,8 @@
}, },
"trigger_type": { "trigger_type": {
"battery_level": "{entity_name} battery level changes", "battery_level": "{entity_name} battery level changes",
"carbon_monoxide": "{entity_name} carbon monoxide concentration changes",
"carbon_dioxide": "{entity_name} carbon dioxide concentration changes",
"humidity": "{entity_name} humidity changes", "humidity": "{entity_name} humidity changes",
"illuminance": "{entity_name} illuminance changes", "illuminance": "{entity_name} illuminance changes",
"power": "{entity_name} power changes", "power": "{entity_name} power changes",

View File

@ -219,6 +219,8 @@ EVENT_TIME_CHANGED = "time_changed"
# #### DEVICE CLASSES #### # #### DEVICE CLASSES ####
DEVICE_CLASS_BATTERY = "battery" DEVICE_CLASS_BATTERY = "battery"
DEVICE_CLASS_CO = "carbon_monoxide"
DEVICE_CLASS_CO2 = "carbon_dioxide"
DEVICE_CLASS_HUMIDITY = "humidity" DEVICE_CLASS_HUMIDITY = "humidity"
DEVICE_CLASS_ILLUMINANCE = "illuminance" DEVICE_CLASS_ILLUMINANCE = "illuminance"
DEVICE_CLASS_SIGNAL_STRENGTH = "signal_strength" DEVICE_CLASS_SIGNAL_STRENGTH = "signal_strength"

View File

@ -77,7 +77,7 @@ async def test_get_triggers(hass, device_reg, entity_reg):
if device_class != "none" if device_class != "none"
] ]
triggers = await async_get_device_automations(hass, "trigger", device_entry.id) triggers = await async_get_device_automations(hass, "trigger", device_entry.id)
assert len(triggers) == 12 assert len(triggers) == 14
assert triggers == expected_triggers assert triggers == expected_triggers

View File

@ -4,7 +4,12 @@ Provide a mock sensor platform.
Call init before using it in your tests to ensure clean test data. Call init before using it in your tests to ensure clean test data.
""" """
import homeassistant.components.sensor as sensor import homeassistant.components.sensor as sensor
from homeassistant.const import PERCENTAGE, PRESSURE_HPA, SIGNAL_STRENGTH_DECIBELS from homeassistant.const import (
CONCENTRATION_PARTS_PER_MILLION,
PERCENTAGE,
PRESSURE_HPA,
SIGNAL_STRENGTH_DECIBELS,
)
from tests.common import MockEntity from tests.common import MockEntity
@ -13,6 +18,8 @@ DEVICE_CLASSES.append("none")
UNITS_OF_MEASUREMENT = { UNITS_OF_MEASUREMENT = {
sensor.DEVICE_CLASS_BATTERY: PERCENTAGE, # % of battery that is left sensor.DEVICE_CLASS_BATTERY: PERCENTAGE, # % of battery that is left
sensor.DEVICE_CLASS_CO: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO concentration
sensor.DEVICE_CLASS_CO2: CONCENTRATION_PARTS_PER_MILLION, # ppm of CO2 concentration
sensor.DEVICE_CLASS_HUMIDITY: PERCENTAGE, # % of humidity in the air sensor.DEVICE_CLASS_HUMIDITY: PERCENTAGE, # % of humidity in the air
sensor.DEVICE_CLASS_ILLUMINANCE: "lm", # current light level (lx/lm) sensor.DEVICE_CLASS_ILLUMINANCE: "lm", # current light level (lx/lm)
sensor.DEVICE_CLASS_SIGNAL_STRENGTH: SIGNAL_STRENGTH_DECIBELS, # signal strength (dB/dBm) sensor.DEVICE_CLASS_SIGNAL_STRENGTH: SIGNAL_STRENGTH_DECIBELS, # signal strength (dB/dBm)