Add state class to Nettigo Air Monitor sensors (#50959)
This commit is contained in:
parent
d5a9419fb7
commit
41a940f644
4 changed files with 38 additions and 3 deletions
|
@ -4,6 +4,7 @@ from __future__ import annotations
|
|||
from datetime import timedelta
|
||||
from typing import Final
|
||||
|
||||
from homeassistant.components.sensor import ATTR_STATE_CLASS, STATE_CLASS_MEASUREMENT
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_ICON,
|
||||
|
@ -59,6 +60,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_BME280_PRESSURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} BME280 Pressure",
|
||||
|
@ -66,6 +68,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_BME280_TEMPERATURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} BME280 Temperature",
|
||||
|
@ -73,6 +76,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_BMP280_PRESSURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} BMP280 Pressure",
|
||||
|
@ -80,6 +84,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_BMP280_TEMPERATURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} BMP280 Temperature",
|
||||
|
@ -87,6 +92,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_HECA_HUMIDITY: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} HECA Humidity",
|
||||
|
@ -94,6 +100,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_HECA_TEMPERATURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} HECA Temperature",
|
||||
|
@ -101,6 +108,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_SHT3X_HUMIDITY: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} SHT3X Humidity",
|
||||
|
@ -108,6 +116,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_SHT3X_TEMPERATURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} SHT3X Temperature",
|
||||
|
@ -115,6 +124,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_SPS30_P0: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} SPS30 Particulate Matter 1.0",
|
||||
|
@ -122,6 +132,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: None,
|
||||
ATTR_ICON: "mdi:blur",
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_SPS30_P4: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} SPS30 Particulate Matter 4.0",
|
||||
|
@ -129,6 +140,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: None,
|
||||
ATTR_ICON: "mdi:blur",
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_DHT22_HUMIDITY: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} DHT22 Humidity",
|
||||
|
@ -136,6 +148,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_DHT22_TEMPERATURE: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} DHT22 Temperature",
|
||||
|
@ -143,6 +156,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_SIGNAL_STRENGTH: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} Signal Strength",
|
||||
|
@ -150,6 +164,7 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: False,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
ATTR_UPTIME: {
|
||||
ATTR_LABEL: f"{DEFAULT_NAME} Uptime",
|
||||
|
@ -157,5 +172,6 @@ SENSORS: Final[dict[str, SensorDescription]] = {
|
|||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TIMESTAMP,
|
||||
ATTR_ICON: None,
|
||||
ATTR_ENABLED: False,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -12,3 +12,4 @@ class SensorDescription(TypedDict):
|
|||
device_class: str | None
|
||||
icon: str | None
|
||||
enabled: bool
|
||||
state_class: str | None
|
||||
|
|
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||
from datetime import timedelta
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.sensor import SensorEntity
|
||||
from homeassistant.components.sensor import ATTR_STATE_CLASS, SensorEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_ICON
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
@ -45,7 +45,8 @@ class NAMSensor(CoordinatorEntity, SensorEntity):
|
|||
"""Initialize."""
|
||||
super().__init__(coordinator)
|
||||
self.sensor_type = sensor_type
|
||||
self._description = SENSORS[self.sensor_type]
|
||||
self._description = SENSORS[sensor_type]
|
||||
self._attr_state_class = SENSORS[sensor_type][ATTR_STATE_CLASS]
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
|
|
|
@ -5,7 +5,11 @@ from unittest.mock import patch
|
|||
from nettigo_air_monitor import ApiError
|
||||
|
||||
from homeassistant.components.nam.const import DOMAIN
|
||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||
from homeassistant.components.sensor import (
|
||||
ATTR_STATE_CLASS,
|
||||
DOMAIN as SENSOR_DOMAIN,
|
||||
STATE_CLASS_MEASUREMENT,
|
||||
)
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_ENTITY_ID,
|
||||
|
@ -57,6 +61,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "45.7"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_HUMIDITY
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_bme280_humidity")
|
||||
|
@ -67,6 +72,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "7.6"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TEMPERATURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == TEMP_CELSIUS
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_bme280_temperature")
|
||||
|
@ -77,6 +83,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "1011"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_PRESSURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PRESSURE_HPA
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_bme280_pressure")
|
||||
|
@ -87,6 +94,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "5.6"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TEMPERATURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == TEMP_CELSIUS
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_bmp280_temperature")
|
||||
|
@ -97,6 +105,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "1022"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_PRESSURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PRESSURE_HPA
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_bmp280_pressure")
|
||||
|
@ -107,6 +116,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "34.7"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_HUMIDITY
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_sht3x_humidity")
|
||||
|
@ -117,6 +127,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "6.3"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TEMPERATURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == TEMP_CELSIUS
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_sht3x_temperature")
|
||||
|
@ -127,6 +138,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "46.2"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_HUMIDITY
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_dht22_humidity")
|
||||
|
@ -137,6 +149,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "6.3"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TEMPERATURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == TEMP_CELSIUS
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_dht22_temperature")
|
||||
|
@ -147,6 +160,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "50.0"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_HUMIDITY
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_heca_humidity")
|
||||
|
@ -157,6 +171,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "8.0"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TEMPERATURE
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == TEMP_CELSIUS
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_heca_temperature")
|
||||
|
@ -167,6 +182,7 @@ async def test_sensor(hass):
|
|||
assert state
|
||||
assert state.state == "-72"
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_SIGNAL_STRENGTH
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
assert (
|
||||
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
|
||||
== SIGNAL_STRENGTH_DECIBELS_MILLIWATT
|
||||
|
@ -183,6 +199,7 @@ async def test_sensor(hass):
|
|||
== (utcnow() - timedelta(seconds=456987)).replace(microsecond=0).isoformat()
|
||||
)
|
||||
assert state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TIMESTAMP
|
||||
assert state.attributes.get(ATTR_STATE_CLASS) is None
|
||||
|
||||
entry = registry.async_get("sensor.nettigo_air_monitor_uptime")
|
||||
assert entry
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue