mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Clean up state class and device class usage in ZHA (#61049)
* Clean up sensor and device class usage in ZHA * additional cleanup * Use EntityCategory
This commit is contained in:
parent
f6ac856b8d
commit
abbde8f128
@ -2,14 +2,7 @@
|
|||||||
import functools
|
import functools
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import (
|
from homeassistant.components.binary_sensor import (
|
||||||
DEVICE_CLASS_GAS,
|
BinarySensorDeviceClass,
|
||||||
DEVICE_CLASS_MOISTURE,
|
|
||||||
DEVICE_CLASS_MOTION,
|
|
||||||
DEVICE_CLASS_MOVING,
|
|
||||||
DEVICE_CLASS_OCCUPANCY,
|
|
||||||
DEVICE_CLASS_OPENING,
|
|
||||||
DEVICE_CLASS_SMOKE,
|
|
||||||
DEVICE_CLASS_VIBRATION,
|
|
||||||
BinarySensorEntity,
|
BinarySensorEntity,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
@ -34,12 +27,12 @@ from .entity import ZhaEntity
|
|||||||
|
|
||||||
# Zigbee Cluster Library Zone Type to Home Assistant device class
|
# Zigbee Cluster Library Zone Type to Home Assistant device class
|
||||||
CLASS_MAPPING = {
|
CLASS_MAPPING = {
|
||||||
0x000D: DEVICE_CLASS_MOTION,
|
0x000D: BinarySensorDeviceClass.MOTION,
|
||||||
0x0015: DEVICE_CLASS_OPENING,
|
0x0015: BinarySensorDeviceClass.OPENING,
|
||||||
0x0028: DEVICE_CLASS_SMOKE,
|
0x0028: BinarySensorDeviceClass.SMOKE,
|
||||||
0x002A: DEVICE_CLASS_MOISTURE,
|
0x002A: BinarySensorDeviceClass.MOISTURE,
|
||||||
0x002B: DEVICE_CLASS_GAS,
|
0x002B: BinarySensorDeviceClass.GAS,
|
||||||
0x002D: DEVICE_CLASS_VIBRATION,
|
0x002D: BinarySensorDeviceClass.VIBRATION,
|
||||||
}
|
}
|
||||||
|
|
||||||
STRICT_MATCH = functools.partial(ZHA_ENTITIES.strict_match, Platform.BINARY_SENSOR)
|
STRICT_MATCH = functools.partial(ZHA_ENTITIES.strict_match, Platform.BINARY_SENSOR)
|
||||||
@ -67,13 +60,11 @@ class BinarySensor(ZhaEntity, BinarySensorEntity):
|
|||||||
"""ZHA BinarySensor."""
|
"""ZHA BinarySensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = None
|
SENSOR_ATTR = None
|
||||||
DEVICE_CLASS = None
|
|
||||||
|
|
||||||
def __init__(self, unique_id, zha_device, channels, **kwargs):
|
def __init__(self, unique_id, zha_device, channels, **kwargs):
|
||||||
"""Initialize the ZHA binary sensor."""
|
"""Initialize the ZHA binary sensor."""
|
||||||
super().__init__(unique_id, zha_device, channels, **kwargs)
|
super().__init__(unique_id, zha_device, channels, **kwargs)
|
||||||
self._channel = channels[0]
|
self._channel = channels[0]
|
||||||
self._device_class = self.DEVICE_CLASS
|
|
||||||
|
|
||||||
async def async_added_to_hass(self):
|
async def async_added_to_hass(self):
|
||||||
"""Run when about to be added to hass."""
|
"""Run when about to be added to hass."""
|
||||||
@ -95,11 +86,6 @@ class BinarySensor(ZhaEntity, BinarySensorEntity):
|
|||||||
return False
|
return False
|
||||||
return self._state
|
return self._state
|
||||||
|
|
||||||
@property
|
|
||||||
def device_class(self) -> str:
|
|
||||||
"""Return device class from component DEVICE_CLASSES."""
|
|
||||||
return self._device_class
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_set_state(self, attr_id, attr_name, value):
|
def async_set_state(self, attr_id, attr_name, value):
|
||||||
"""Set the state."""
|
"""Set the state."""
|
||||||
@ -122,7 +108,7 @@ class Accelerometer(BinarySensor):
|
|||||||
"""ZHA BinarySensor."""
|
"""ZHA BinarySensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "acceleration"
|
SENSOR_ATTR = "acceleration"
|
||||||
DEVICE_CLASS = DEVICE_CLASS_MOVING
|
_attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.MOVING
|
||||||
|
|
||||||
|
|
||||||
@STRICT_MATCH(channel_names=CHANNEL_OCCUPANCY)
|
@STRICT_MATCH(channel_names=CHANNEL_OCCUPANCY)
|
||||||
@ -130,7 +116,7 @@ class Occupancy(BinarySensor):
|
|||||||
"""ZHA BinarySensor."""
|
"""ZHA BinarySensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "occupancy"
|
SENSOR_ATTR = "occupancy"
|
||||||
DEVICE_CLASS = DEVICE_CLASS_OCCUPANCY
|
_attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.OCCUPANCY
|
||||||
|
|
||||||
|
|
||||||
@STRICT_MATCH(channel_names=CHANNEL_ON_OFF)
|
@STRICT_MATCH(channel_names=CHANNEL_ON_OFF)
|
||||||
@ -138,7 +124,7 @@ class Opening(BinarySensor):
|
|||||||
"""ZHA BinarySensor."""
|
"""ZHA BinarySensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "on_off"
|
SENSOR_ATTR = "on_off"
|
||||||
DEVICE_CLASS = DEVICE_CLASS_OPENING
|
_attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.OPENING
|
||||||
|
|
||||||
|
|
||||||
@STRICT_MATCH(channel_names=CHANNEL_BINARY_INPUT)
|
@STRICT_MATCH(channel_names=CHANNEL_BINARY_INPUT)
|
||||||
@ -164,7 +150,7 @@ class Motion(BinarySensor):
|
|||||||
"""ZHA BinarySensor."""
|
"""ZHA BinarySensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "on_off"
|
SENSOR_ATTR = "on_off"
|
||||||
DEVICE_CLASS = DEVICE_CLASS_MOTION
|
_attr_device_class: BinarySensorDeviceClass = BinarySensorDeviceClass.MOTION
|
||||||
|
|
||||||
|
|
||||||
@STRICT_MATCH(channel_names=CHANNEL_ZONE)
|
@STRICT_MATCH(channel_names=CHANNEL_ZONE)
|
||||||
|
@ -10,8 +10,7 @@ from zigpy.zcl.foundation import Status
|
|||||||
from homeassistant.components.cover import (
|
from homeassistant.components.cover import (
|
||||||
ATTR_CURRENT_POSITION,
|
ATTR_CURRENT_POSITION,
|
||||||
ATTR_POSITION,
|
ATTR_POSITION,
|
||||||
DEVICE_CLASS_DAMPER,
|
CoverDeviceClass,
|
||||||
DEVICE_CLASS_SHADE,
|
|
||||||
CoverEntity,
|
CoverEntity,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
@ -187,7 +186,7 @@ class ZhaCover(ZhaEntity, CoverEntity):
|
|||||||
class Shade(ZhaEntity, CoverEntity):
|
class Shade(ZhaEntity, CoverEntity):
|
||||||
"""ZHA Shade."""
|
"""ZHA Shade."""
|
||||||
|
|
||||||
_attr_device_class = DEVICE_CLASS_SHADE
|
_attr_device_class = CoverDeviceClass.SHADE
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -296,7 +295,7 @@ class Shade(ZhaEntity, CoverEntity):
|
|||||||
class KeenVent(Shade):
|
class KeenVent(Shade):
|
||||||
"""Keen vent cover."""
|
"""Keen vent cover."""
|
||||||
|
|
||||||
_attr_device_class = DEVICE_CLASS_DAMPER
|
_attr_device_class = CoverDeviceClass.DAMPER
|
||||||
|
|
||||||
async def async_open_cover(self, **kwargs):
|
async def async_open_cover(self, **kwargs):
|
||||||
"""Open the cover."""
|
"""Open the cover."""
|
||||||
|
@ -13,29 +13,18 @@ from homeassistant.components.climate.const import (
|
|||||||
CURRENT_HVAC_OFF,
|
CURRENT_HVAC_OFF,
|
||||||
)
|
)
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
DEVICE_CLASS_BATTERY,
|
SensorDeviceClass,
|
||||||
DEVICE_CLASS_CO,
|
|
||||||
DEVICE_CLASS_CO2,
|
|
||||||
DEVICE_CLASS_CURRENT,
|
|
||||||
DEVICE_CLASS_HUMIDITY,
|
|
||||||
DEVICE_CLASS_ILLUMINANCE,
|
|
||||||
DEVICE_CLASS_POWER,
|
|
||||||
DEVICE_CLASS_PRESSURE,
|
|
||||||
DEVICE_CLASS_TEMPERATURE,
|
|
||||||
STATE_CLASS_MEASUREMENT,
|
|
||||||
STATE_CLASS_TOTAL_INCREASING,
|
|
||||||
SensorEntity,
|
SensorEntity,
|
||||||
|
SensorStateClass,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
CONCENTRATION_PARTS_PER_BILLION,
|
CONCENTRATION_PARTS_PER_BILLION,
|
||||||
CONCENTRATION_PARTS_PER_MILLION,
|
CONCENTRATION_PARTS_PER_MILLION,
|
||||||
DEVICE_CLASS_ENERGY,
|
|
||||||
ELECTRIC_CURRENT_AMPERE,
|
ELECTRIC_CURRENT_AMPERE,
|
||||||
ELECTRIC_POTENTIAL_VOLT,
|
ELECTRIC_POTENTIAL_VOLT,
|
||||||
ENERGY_KILO_WATT_HOUR,
|
ENERGY_KILO_WATT_HOUR,
|
||||||
ENTITY_CATEGORY_DIAGNOSTIC,
|
|
||||||
LIGHT_LUX,
|
LIGHT_LUX,
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
POWER_VOLT_AMPERE,
|
POWER_VOLT_AMPERE,
|
||||||
@ -54,6 +43,7 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
|
from homeassistant.helpers.entity import EntityCategory
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.typing import StateType
|
from homeassistant.helpers.typing import StateType
|
||||||
|
|
||||||
@ -128,10 +118,8 @@ class Sensor(ZhaEntity, SensorEntity):
|
|||||||
|
|
||||||
SENSOR_ATTR: int | str | None = None
|
SENSOR_ATTR: int | str | None = None
|
||||||
_decimals: int = 1
|
_decimals: int = 1
|
||||||
_device_class: str | None = None
|
|
||||||
_divisor: int = 1
|
_divisor: int = 1
|
||||||
_multiplier: int = 1
|
_multiplier: int = 1
|
||||||
_state_class: str | None = None
|
|
||||||
_unit: str | None = None
|
_unit: str | None = None
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
@ -170,16 +158,6 @@ class Sensor(ZhaEntity, SensorEntity):
|
|||||||
self._channel, SIGNAL_ATTR_UPDATED, self.async_set_state
|
self._channel, SIGNAL_ATTR_UPDATED, self.async_set_state
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
|
||||||
def device_class(self) -> str:
|
|
||||||
"""Return device class from component DEVICE_CLASSES."""
|
|
||||||
return self._device_class
|
|
||||||
|
|
||||||
@property
|
|
||||||
def state_class(self) -> str | None:
|
|
||||||
"""Return the state class of this entity, from STATE_CLASSES, if any."""
|
|
||||||
return self._state_class
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def native_unit_of_measurement(self) -> str | None:
|
def native_unit_of_measurement(self) -> str | None:
|
||||||
"""Return the unit of measurement of this entity."""
|
"""Return the unit of measurement of this entity."""
|
||||||
@ -225,10 +203,10 @@ class Battery(Sensor):
|
|||||||
"""Battery sensor of power configuration cluster."""
|
"""Battery sensor of power configuration cluster."""
|
||||||
|
|
||||||
SENSOR_ATTR = "battery_percentage_remaining"
|
SENSOR_ATTR = "battery_percentage_remaining"
|
||||||
_device_class = DEVICE_CLASS_BATTERY
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.BATTERY
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_unit = PERCENTAGE
|
_unit = PERCENTAGE
|
||||||
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
|
_attr_entity_category = EntityCategory.DIAGNOSTIC
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_entity(
|
def create_entity(
|
||||||
@ -276,8 +254,8 @@ class ElectricalMeasurement(Sensor):
|
|||||||
"""Active power measurement."""
|
"""Active power measurement."""
|
||||||
|
|
||||||
SENSOR_ATTR = "active_power"
|
SENSOR_ATTR = "active_power"
|
||||||
_device_class = DEVICE_CLASS_POWER
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.POWER
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_unit = POWER_WATT
|
_unit = POWER_WATT
|
||||||
_div_mul_prefix = "ac_power"
|
_div_mul_prefix = "ac_power"
|
||||||
|
|
||||||
@ -322,7 +300,6 @@ class ElectricalMeasurementApparentPower(
|
|||||||
"""Apparent power measurement."""
|
"""Apparent power measurement."""
|
||||||
|
|
||||||
SENSOR_ATTR = "apparent_power"
|
SENSOR_ATTR = "apparent_power"
|
||||||
_device_class = DEVICE_CLASS_POWER
|
|
||||||
_unit = POWER_VOLT_AMPERE
|
_unit = POWER_VOLT_AMPERE
|
||||||
_div_mul_prefix = "ac_power"
|
_div_mul_prefix = "ac_power"
|
||||||
|
|
||||||
@ -337,7 +314,7 @@ class ElectricalMeasurementRMSCurrent(ElectricalMeasurement, id_suffix="rms_curr
|
|||||||
"""RMS current measurement."""
|
"""RMS current measurement."""
|
||||||
|
|
||||||
SENSOR_ATTR = "rms_current"
|
SENSOR_ATTR = "rms_current"
|
||||||
_device_class = DEVICE_CLASS_CURRENT
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.CURRENT
|
||||||
_unit = ELECTRIC_CURRENT_AMPERE
|
_unit = ELECTRIC_CURRENT_AMPERE
|
||||||
_div_mul_prefix = "ac_current"
|
_div_mul_prefix = "ac_current"
|
||||||
|
|
||||||
@ -352,7 +329,7 @@ class ElectricalMeasurementRMSVoltage(ElectricalMeasurement, id_suffix="rms_volt
|
|||||||
"""RMS Voltage measurement."""
|
"""RMS Voltage measurement."""
|
||||||
|
|
||||||
SENSOR_ATTR = "rms_voltage"
|
SENSOR_ATTR = "rms_voltage"
|
||||||
_device_class = DEVICE_CLASS_CURRENT
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.CURRENT
|
||||||
_unit = ELECTRIC_POTENTIAL_VOLT
|
_unit = ELECTRIC_POTENTIAL_VOLT
|
||||||
_div_mul_prefix = "ac_voltage"
|
_div_mul_prefix = "ac_voltage"
|
||||||
|
|
||||||
@ -368,9 +345,9 @@ class Humidity(Sensor):
|
|||||||
"""Humidity sensor."""
|
"""Humidity sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_HUMIDITY
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.HUMIDITY
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_divisor = 100
|
_divisor = 100
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
|
||||||
_unit = PERCENTAGE
|
_unit = PERCENTAGE
|
||||||
|
|
||||||
|
|
||||||
@ -379,9 +356,9 @@ class SoilMoisture(Sensor):
|
|||||||
"""Soil Moisture sensor."""
|
"""Soil Moisture sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_HUMIDITY
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.HUMIDITY
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_divisor = 100
|
_divisor = 100
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
|
||||||
_unit = PERCENTAGE
|
_unit = PERCENTAGE
|
||||||
|
|
||||||
|
|
||||||
@ -390,9 +367,9 @@ class LeafWetness(Sensor):
|
|||||||
"""Leaf Wetness sensor."""
|
"""Leaf Wetness sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_HUMIDITY
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.HUMIDITY
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_divisor = 100
|
_divisor = 100
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
|
||||||
_unit = PERCENTAGE
|
_unit = PERCENTAGE
|
||||||
|
|
||||||
|
|
||||||
@ -401,7 +378,8 @@ class Illuminance(Sensor):
|
|||||||
"""Illuminance Sensor."""
|
"""Illuminance Sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_ILLUMINANCE
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.ILLUMINANCE
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_unit = LIGHT_LUX
|
_unit = LIGHT_LUX
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -415,8 +393,8 @@ class SmartEnergyMetering(Sensor):
|
|||||||
"""Metering sensor."""
|
"""Metering sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR: int | str = "instantaneous_demand"
|
SENSOR_ATTR: int | str = "instantaneous_demand"
|
||||||
_device_class: str | None = DEVICE_CLASS_POWER
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.POWER
|
||||||
_state_class: str | None = STATE_CLASS_MEASUREMENT
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
|
|
||||||
unit_of_measure_map = {
|
unit_of_measure_map = {
|
||||||
0x00: POWER_WATT,
|
0x00: POWER_WATT,
|
||||||
@ -459,8 +437,8 @@ class SmartEnergySummation(SmartEnergyMetering, id_suffix="summation_delivered")
|
|||||||
"""Smart Energy Metering summation sensor."""
|
"""Smart Energy Metering summation sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR: int | str = "current_summ_delivered"
|
SENSOR_ATTR: int | str = "current_summ_delivered"
|
||||||
_device_class: str | None = DEVICE_CLASS_ENERGY
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.ENERGY
|
||||||
_state_class: str = STATE_CLASS_TOTAL_INCREASING
|
_attr_state_class: SensorStateClass = SensorStateClass.TOTAL_INCREASING
|
||||||
|
|
||||||
unit_of_measure_map = {
|
unit_of_measure_map = {
|
||||||
0x00: ENERGY_KILO_WATT_HOUR,
|
0x00: ENERGY_KILO_WATT_HOUR,
|
||||||
@ -492,9 +470,9 @@ class Pressure(Sensor):
|
|||||||
"""Pressure sensor."""
|
"""Pressure sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_PRESSURE
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.PRESSURE
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_decimals = 0
|
_decimals = 0
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
|
||||||
_unit = PRESSURE_HPA
|
_unit = PRESSURE_HPA
|
||||||
|
|
||||||
|
|
||||||
@ -503,9 +481,9 @@ class Temperature(Sensor):
|
|||||||
"""Temperature Sensor."""
|
"""Temperature Sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_TEMPERATURE
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.TEMPERATURE
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_divisor = 100
|
_divisor = 100
|
||||||
_state_class = STATE_CLASS_MEASUREMENT
|
|
||||||
_unit = TEMP_CELSIUS
|
_unit = TEMP_CELSIUS
|
||||||
|
|
||||||
|
|
||||||
@ -514,7 +492,8 @@ class CarbonDioxideConcentration(Sensor):
|
|||||||
"""Carbon Dioxide Concentration sensor."""
|
"""Carbon Dioxide Concentration sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_CO2
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.CO2
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_decimals = 0
|
_decimals = 0
|
||||||
_multiplier = 1e6
|
_multiplier = 1e6
|
||||||
_unit = CONCENTRATION_PARTS_PER_MILLION
|
_unit = CONCENTRATION_PARTS_PER_MILLION
|
||||||
@ -525,7 +504,8 @@ class CarbonMonoxideConcentration(Sensor):
|
|||||||
"""Carbon Monoxide Concentration sensor."""
|
"""Carbon Monoxide Concentration sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
_device_class = DEVICE_CLASS_CO
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.CO
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_decimals = 0
|
_decimals = 0
|
||||||
_multiplier = 1e6
|
_multiplier = 1e6
|
||||||
_unit = CONCENTRATION_PARTS_PER_MILLION
|
_unit = CONCENTRATION_PARTS_PER_MILLION
|
||||||
@ -537,6 +517,8 @@ class VOCLevel(Sensor):
|
|||||||
"""VOC Level sensor."""
|
"""VOC Level sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_decimals = 0
|
_decimals = 0
|
||||||
_multiplier = 1e6
|
_multiplier = 1e6
|
||||||
_unit = CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
_unit = CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
||||||
@ -547,6 +529,8 @@ class PPBVOCLevel(Sensor):
|
|||||||
"""VOC Level sensor."""
|
"""VOC Level sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
|
_attr_device_class: SensorDeviceClass = SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_decimals = 0
|
_decimals = 0
|
||||||
_multiplier = 1
|
_multiplier = 1
|
||||||
_unit = CONCENTRATION_PARTS_PER_BILLION
|
_unit = CONCENTRATION_PARTS_PER_BILLION
|
||||||
@ -557,6 +541,7 @@ class FormaldehydeConcentration(Sensor):
|
|||||||
"""Formaldehyde Concentration sensor."""
|
"""Formaldehyde Concentration sensor."""
|
||||||
|
|
||||||
SENSOR_ATTR = "measured_value"
|
SENSOR_ATTR = "measured_value"
|
||||||
|
_attr_state_class: SensorStateClass = SensorStateClass.MEASUREMENT
|
||||||
_decimals = 0
|
_decimals = 0
|
||||||
_multiplier = 1e6
|
_multiplier = 1e6
|
||||||
_unit = CONCENTRATION_PARTS_PER_MILLION
|
_unit = CONCENTRATION_PARTS_PER_MILLION
|
||||||
|
@ -8,6 +8,7 @@ import zigpy.zcl.clusters.homeautomation as homeautomation
|
|||||||
import zigpy.zcl.clusters.measurement as measurement
|
import zigpy.zcl.clusters.measurement as measurement
|
||||||
import zigpy.zcl.clusters.smartenergy as smartenergy
|
import zigpy.zcl.clusters.smartenergy as smartenergy
|
||||||
|
|
||||||
|
from homeassistant.components.sensor import SensorDeviceClass
|
||||||
from homeassistant.components.zha.core.const import ZHA_CHANNEL_READS_PER_REQ
|
from homeassistant.components.zha.core.const import ZHA_CHANNEL_READS_PER_REQ
|
||||||
import homeassistant.config as config_util
|
import homeassistant.config as config_util
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -16,7 +17,6 @@ from homeassistant.const import (
|
|||||||
CONF_UNIT_SYSTEM,
|
CONF_UNIT_SYSTEM,
|
||||||
CONF_UNIT_SYSTEM_IMPERIAL,
|
CONF_UNIT_SYSTEM_IMPERIAL,
|
||||||
CONF_UNIT_SYSTEM_METRIC,
|
CONF_UNIT_SYSTEM_METRIC,
|
||||||
DEVICE_CLASS_ENERGY,
|
|
||||||
ELECTRIC_CURRENT_AMPERE,
|
ELECTRIC_CURRENT_AMPERE,
|
||||||
ELECTRIC_POTENTIAL_VOLT,
|
ELECTRIC_POTENTIAL_VOLT,
|
||||||
ENERGY_KILO_WATT_HOUR,
|
ENERGY_KILO_WATT_HOUR,
|
||||||
@ -149,7 +149,8 @@ async def async_test_smart_energy_summation(hass, cluster, entity_id):
|
|||||||
assert hass.states.get(entity_id).attributes["status"] == "NO_ALARMS"
|
assert hass.states.get(entity_id).attributes["status"] == "NO_ALARMS"
|
||||||
assert hass.states.get(entity_id).attributes["device_type"] == "Electric Metering"
|
assert hass.states.get(entity_id).attributes["device_type"] == "Electric Metering"
|
||||||
assert (
|
assert (
|
||||||
hass.states.get(entity_id).attributes[ATTR_DEVICE_CLASS] == DEVICE_CLASS_ENERGY
|
hass.states.get(entity_id).attributes[ATTR_DEVICE_CLASS]
|
||||||
|
== SensorDeviceClass.ENERGY
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user