mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Add device classes for electrical measurement (#36800)
* added device classes for electrical measurement (cherry picked from commit 2409fe19ed43bef568a0cca826652867d3a2d71a) * upadte power factor unit (%) * update power factor unit (%)
This commit is contained in:
parent
74c23c3e96
commit
02d572aae5
@ -7,13 +7,17 @@ import voluptuous as vol
|
||||
|
||||
from homeassistant.const import (
|
||||
DEVICE_CLASS_BATTERY,
|
||||
DEVICE_CLASS_CURRENT,
|
||||
DEVICE_CLASS_ENERGY,
|
||||
DEVICE_CLASS_HUMIDITY,
|
||||
DEVICE_CLASS_ILLUMINANCE,
|
||||
DEVICE_CLASS_POWER,
|
||||
DEVICE_CLASS_POWER_FACTOR,
|
||||
DEVICE_CLASS_PRESSURE,
|
||||
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
DEVICE_CLASS_TIMESTAMP,
|
||||
DEVICE_CLASS_VOLTAGE,
|
||||
)
|
||||
from homeassistant.helpers.config_validation import ( # noqa: F401
|
||||
PLATFORM_SCHEMA,
|
||||
@ -32,6 +36,8 @@ ENTITY_ID_FORMAT = DOMAIN + ".{}"
|
||||
SCAN_INTERVAL = timedelta(seconds=30)
|
||||
DEVICE_CLASSES = [
|
||||
DEVICE_CLASS_BATTERY, # % of battery that is left
|
||||
DEVICE_CLASS_CURRENT, # current (A)
|
||||
DEVICE_CLASS_ENERGY, # energy (kWh, Wh)
|
||||
DEVICE_CLASS_HUMIDITY, # % of humidity in the air
|
||||
DEVICE_CLASS_ILLUMINANCE, # current light level (lx/lm)
|
||||
DEVICE_CLASS_SIGNAL_STRENGTH, # signal strength (dB/dBm)
|
||||
@ -39,6 +45,8 @@ DEVICE_CLASSES = [
|
||||
DEVICE_CLASS_TIMESTAMP, # timestamp (ISO8601)
|
||||
DEVICE_CLASS_PRESSURE, # pressure (hPa/mbar)
|
||||
DEVICE_CLASS_POWER, # power (W/kW)
|
||||
DEVICE_CLASS_POWER_FACTOR, # power factor (%)
|
||||
DEVICE_CLASS_VOLTAGE, # voltage (V)
|
||||
]
|
||||
|
||||
DEVICE_CLASSES_SCHEMA = vol.All(vol.Lower, vol.In(DEVICE_CLASSES))
|
||||
|
@ -14,13 +14,17 @@ from homeassistant.const import (
|
||||
CONF_ENTITY_ID,
|
||||
CONF_TYPE,
|
||||
DEVICE_CLASS_BATTERY,
|
||||
DEVICE_CLASS_CURRENT,
|
||||
DEVICE_CLASS_ENERGY,
|
||||
DEVICE_CLASS_HUMIDITY,
|
||||
DEVICE_CLASS_ILLUMINANCE,
|
||||
DEVICE_CLASS_POWER,
|
||||
DEVICE_CLASS_POWER_FACTOR,
|
||||
DEVICE_CLASS_PRESSURE,
|
||||
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
DEVICE_CLASS_TIMESTAMP,
|
||||
DEVICE_CLASS_VOLTAGE,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers import condition, config_validation as cv
|
||||
@ -37,24 +41,32 @@ from . import DOMAIN
|
||||
DEVICE_CLASS_NONE = "none"
|
||||
|
||||
CONF_IS_BATTERY_LEVEL = "is_battery_level"
|
||||
CONF_IS_CURRENT = "is_current"
|
||||
CONF_IS_ENERGY = "is_energy"
|
||||
CONF_IS_HUMIDITY = "is_humidity"
|
||||
CONF_IS_ILLUMINANCE = "is_illuminance"
|
||||
CONF_IS_POWER = "is_power"
|
||||
CONF_IS_POWER_FACTOR = "is_power_factor"
|
||||
CONF_IS_PRESSURE = "is_pressure"
|
||||
CONF_IS_SIGNAL_STRENGTH = "is_signal_strength"
|
||||
CONF_IS_TEMPERATURE = "is_temperature"
|
||||
CONF_IS_TIMESTAMP = "is_timestamp"
|
||||
CONF_IS_VOLTAGE = "is_voltage"
|
||||
CONF_IS_VALUE = "is_value"
|
||||
|
||||
ENTITY_CONDITIONS = {
|
||||
DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_IS_BATTERY_LEVEL}],
|
||||
DEVICE_CLASS_CURRENT: [{CONF_TYPE: CONF_IS_CURRENT}],
|
||||
DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_IS_ENERGY}],
|
||||
DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_IS_HUMIDITY}],
|
||||
DEVICE_CLASS_ILLUMINANCE: [{CONF_TYPE: CONF_IS_ILLUMINANCE}],
|
||||
DEVICE_CLASS_POWER: [{CONF_TYPE: CONF_IS_POWER}],
|
||||
DEVICE_CLASS_POWER_FACTOR: [{CONF_TYPE: CONF_IS_POWER_FACTOR}],
|
||||
DEVICE_CLASS_PRESSURE: [{CONF_TYPE: CONF_IS_PRESSURE}],
|
||||
DEVICE_CLASS_SIGNAL_STRENGTH: [{CONF_TYPE: CONF_IS_SIGNAL_STRENGTH}],
|
||||
DEVICE_CLASS_TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}],
|
||||
DEVICE_CLASS_TIMESTAMP: [{CONF_TYPE: CONF_IS_TIMESTAMP}],
|
||||
DEVICE_CLASS_VOLTAGE: [{CONF_TYPE: CONF_IS_VOLTAGE}],
|
||||
DEVICE_CLASS_NONE: [{CONF_TYPE: CONF_IS_VALUE}],
|
||||
}
|
||||
|
||||
@ -65,13 +77,17 @@ CONDITION_SCHEMA = vol.All(
|
||||
vol.Required(CONF_TYPE): vol.In(
|
||||
[
|
||||
CONF_IS_BATTERY_LEVEL,
|
||||
CONF_IS_CURRENT,
|
||||
CONF_IS_ENERGY,
|
||||
CONF_IS_HUMIDITY,
|
||||
CONF_IS_ILLUMINANCE,
|
||||
CONF_IS_POWER,
|
||||
CONF_IS_POWER_FACTOR,
|
||||
CONF_IS_PRESSURE,
|
||||
CONF_IS_SIGNAL_STRENGTH,
|
||||
CONF_IS_TEMPERATURE,
|
||||
CONF_IS_TIMESTAMP,
|
||||
CONF_IS_VOLTAGE,
|
||||
CONF_IS_VALUE,
|
||||
]
|
||||
),
|
||||
|
@ -15,13 +15,17 @@ from homeassistant.const import (
|
||||
CONF_FOR,
|
||||
CONF_TYPE,
|
||||
DEVICE_CLASS_BATTERY,
|
||||
DEVICE_CLASS_CURRENT,
|
||||
DEVICE_CLASS_ENERGY,
|
||||
DEVICE_CLASS_HUMIDITY,
|
||||
DEVICE_CLASS_ILLUMINANCE,
|
||||
DEVICE_CLASS_POWER,
|
||||
DEVICE_CLASS_POWER_FACTOR,
|
||||
DEVICE_CLASS_PRESSURE,
|
||||
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
DEVICE_CLASS_TIMESTAMP,
|
||||
DEVICE_CLASS_VOLTAGE,
|
||||
)
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.entity_registry import async_entries_for_device
|
||||
@ -33,24 +37,32 @@ from . import DOMAIN
|
||||
DEVICE_CLASS_NONE = "none"
|
||||
|
||||
CONF_BATTERY_LEVEL = "battery_level"
|
||||
CONF_CURRENT = "current"
|
||||
CONF_ENERGY = "energy"
|
||||
CONF_HUMIDITY = "humidity"
|
||||
CONF_ILLUMINANCE = "illuminance"
|
||||
CONF_POWER = "power"
|
||||
CONF_POWER_FACTOR = "power_factor"
|
||||
CONF_PRESSURE = "pressure"
|
||||
CONF_SIGNAL_STRENGTH = "signal_strength"
|
||||
CONF_TEMPERATURE = "temperature"
|
||||
CONF_TIMESTAMP = "timestamp"
|
||||
CONF_VOLTAGE = "voltage"
|
||||
CONF_VALUE = "value"
|
||||
|
||||
ENTITY_TRIGGERS = {
|
||||
DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_BATTERY_LEVEL}],
|
||||
DEVICE_CLASS_CURRENT: [{CONF_TYPE: CONF_CURRENT}],
|
||||
DEVICE_CLASS_ENERGY: [{CONF_TYPE: CONF_ENERGY}],
|
||||
DEVICE_CLASS_HUMIDITY: [{CONF_TYPE: CONF_HUMIDITY}],
|
||||
DEVICE_CLASS_ILLUMINANCE: [{CONF_TYPE: CONF_ILLUMINANCE}],
|
||||
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_TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}],
|
||||
DEVICE_CLASS_TIMESTAMP: [{CONF_TYPE: CONF_TIMESTAMP}],
|
||||
DEVICE_CLASS_VOLTAGE: [{CONF_TYPE: CONF_VOLTAGE}],
|
||||
DEVICE_CLASS_NONE: [{CONF_TYPE: CONF_VALUE}],
|
||||
}
|
||||
|
||||
@ -62,13 +74,17 @@ TRIGGER_SCHEMA = vol.All(
|
||||
vol.Required(CONF_TYPE): vol.In(
|
||||
[
|
||||
CONF_BATTERY_LEVEL,
|
||||
CONF_CURRENT,
|
||||
CONF_ENERGY,
|
||||
CONF_HUMIDITY,
|
||||
CONF_ILLUMINANCE,
|
||||
CONF_POWER,
|
||||
CONF_POWER_FACTOR,
|
||||
CONF_PRESSURE,
|
||||
CONF_SIGNAL_STRENGTH,
|
||||
CONF_TEMPERATURE,
|
||||
CONF_TIMESTAMP,
|
||||
CONF_VOLTAGE,
|
||||
CONF_VALUE,
|
||||
]
|
||||
),
|
||||
|
@ -10,6 +10,10 @@
|
||||
"is_signal_strength": "Current {entity_name} signal strength",
|
||||
"is_temperature": "Current {entity_name} temperature",
|
||||
"is_timestamp": "Current {entity_name} timestamp",
|
||||
"is_current": "Current {entity_name} current",
|
||||
"is_energy": "Current {entity_name} energy",
|
||||
"is_power_factor": "Current {entity_name} power factor",
|
||||
"is_voltage": "Current {entity_name} voltage",
|
||||
"is_value": "Current {entity_name} value"
|
||||
},
|
||||
"trigger_type": {
|
||||
@ -21,6 +25,10 @@
|
||||
"signal_strength": "{entity_name} signal strength changes",
|
||||
"temperature": "{entity_name} temperature changes",
|
||||
"timestamp": "{entity_name} timestamp changes",
|
||||
"current": "{entity_name} current changes",
|
||||
"energy": "{entity_name} energy changes",
|
||||
"power_factor": "{entity_name} power factor changes",
|
||||
"voltage": "{entity_name} voltage changes",
|
||||
"value": "{entity_name} value changes"
|
||||
}
|
||||
},
|
||||
|
@ -218,6 +218,10 @@ DEVICE_CLASS_TEMPERATURE = "temperature"
|
||||
DEVICE_CLASS_TIMESTAMP = "timestamp"
|
||||
DEVICE_CLASS_PRESSURE = "pressure"
|
||||
DEVICE_CLASS_POWER = "power"
|
||||
DEVICE_CLASS_CURRENT = "current"
|
||||
DEVICE_CLASS_ENERGY = "energy"
|
||||
DEVICE_CLASS_POWER_FACTOR = "power_factor"
|
||||
DEVICE_CLASS_VOLTAGE = "voltage"
|
||||
|
||||
# #### STATES ####
|
||||
STATE_ON = "on"
|
||||
|
@ -76,7 +76,7 @@ async def test_get_triggers(hass, device_reg, entity_reg):
|
||||
if device_class != "none"
|
||||
]
|
||||
triggers = await async_get_device_automations(hass, "trigger", device_entry.id)
|
||||
assert len(triggers) == 8
|
||||
assert len(triggers) == 12
|
||||
assert triggers == expected_triggers
|
||||
|
||||
|
||||
|
@ -20,6 +20,10 @@ UNITS_OF_MEASUREMENT = {
|
||||
sensor.DEVICE_CLASS_TIMESTAMP: "hh:mm:ss", # timestamp (ISO8601)
|
||||
sensor.DEVICE_CLASS_PRESSURE: "hPa", # pressure (hPa/mbar)
|
||||
sensor.DEVICE_CLASS_POWER: "kW", # power (W/kW)
|
||||
sensor.DEVICE_CLASS_CURRENT: "A", # current (A)
|
||||
sensor.DEVICE_CLASS_ENERGY: "kWh", # energy (Wh/kWh)
|
||||
sensor.DEVICE_CLASS_POWER_FACTOR: "%", # power factor (no unit, min: -1.0, max: 1.0)
|
||||
sensor.DEVICE_CLASS_VOLTAGE: "V", # voltage (V)
|
||||
}
|
||||
|
||||
ENTITIES = {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user