Add CAQI sensors to Nettigo Air Monitor integration (#76709)
* Add CAQI sensors * Add state translation * Add icon * Update tests * Remove unit * Update test * Do not use device_class * Update tests * Remove unit and device_class
This commit is contained in:
parent
1210897f83
commit
bf510fcb4c
4 changed files with 80 additions and 0 deletions
|
@ -4,6 +4,7 @@ from __future__ import annotations
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from typing import Final
|
from typing import Final
|
||||||
|
|
||||||
|
SUFFIX_CAQI: Final = "_caqi"
|
||||||
SUFFIX_P0: Final = "_p0"
|
SUFFIX_P0: Final = "_p0"
|
||||||
SUFFIX_P1: Final = "_p1"
|
SUFFIX_P1: Final = "_p1"
|
||||||
SUFFIX_P2: Final = "_p2"
|
SUFFIX_P2: Final = "_p2"
|
||||||
|
@ -22,12 +23,16 @@ ATTR_HECA_HUMIDITY: Final = "heca_humidity"
|
||||||
ATTR_HECA_TEMPERATURE: Final = "heca_temperature"
|
ATTR_HECA_TEMPERATURE: Final = "heca_temperature"
|
||||||
ATTR_MHZ14A_CARBON_DIOXIDE: Final = "mhz14a_carbon_dioxide"
|
ATTR_MHZ14A_CARBON_DIOXIDE: Final = "mhz14a_carbon_dioxide"
|
||||||
ATTR_SDS011: Final = "sds011"
|
ATTR_SDS011: Final = "sds011"
|
||||||
|
ATTR_SDS011_CAQI: Final = f"{ATTR_SDS011}{SUFFIX_CAQI}"
|
||||||
|
ATTR_SDS011_CAQI_LEVEL: Final = f"{ATTR_SDS011}{SUFFIX_CAQI}_level"
|
||||||
ATTR_SDS011_P1: Final = f"{ATTR_SDS011}{SUFFIX_P1}"
|
ATTR_SDS011_P1: Final = f"{ATTR_SDS011}{SUFFIX_P1}"
|
||||||
ATTR_SDS011_P2: Final = f"{ATTR_SDS011}{SUFFIX_P2}"
|
ATTR_SDS011_P2: Final = f"{ATTR_SDS011}{SUFFIX_P2}"
|
||||||
ATTR_SHT3X_HUMIDITY: Final = "sht3x_humidity"
|
ATTR_SHT3X_HUMIDITY: Final = "sht3x_humidity"
|
||||||
ATTR_SHT3X_TEMPERATURE: Final = "sht3x_temperature"
|
ATTR_SHT3X_TEMPERATURE: Final = "sht3x_temperature"
|
||||||
ATTR_SIGNAL_STRENGTH: Final = "signal"
|
ATTR_SIGNAL_STRENGTH: Final = "signal"
|
||||||
ATTR_SPS30: Final = "sps30"
|
ATTR_SPS30: Final = "sps30"
|
||||||
|
ATTR_SPS30_CAQI: Final = f"{ATTR_SPS30}{SUFFIX_CAQI}"
|
||||||
|
ATTR_SPS30_CAQI_LEVEL: Final = f"{ATTR_SPS30}{SUFFIX_CAQI}_level"
|
||||||
ATTR_SPS30_P0: Final = f"{ATTR_SPS30}{SUFFIX_P0}"
|
ATTR_SPS30_P0: Final = f"{ATTR_SPS30}{SUFFIX_P0}"
|
||||||
ATTR_SPS30_P1: Final = f"{ATTR_SPS30}{SUFFIX_P1}"
|
ATTR_SPS30_P1: Final = f"{ATTR_SPS30}{SUFFIX_P1}"
|
||||||
ATTR_SPS30_P2: Final = f"{ATTR_SPS30}{SUFFIX_P2}"
|
ATTR_SPS30_P2: Final = f"{ATTR_SPS30}{SUFFIX_P2}"
|
||||||
|
|
|
@ -43,11 +43,15 @@ from .const import (
|
||||||
ATTR_HECA_HUMIDITY,
|
ATTR_HECA_HUMIDITY,
|
||||||
ATTR_HECA_TEMPERATURE,
|
ATTR_HECA_TEMPERATURE,
|
||||||
ATTR_MHZ14A_CARBON_DIOXIDE,
|
ATTR_MHZ14A_CARBON_DIOXIDE,
|
||||||
|
ATTR_SDS011_CAQI,
|
||||||
|
ATTR_SDS011_CAQI_LEVEL,
|
||||||
ATTR_SDS011_P1,
|
ATTR_SDS011_P1,
|
||||||
ATTR_SDS011_P2,
|
ATTR_SDS011_P2,
|
||||||
ATTR_SHT3X_HUMIDITY,
|
ATTR_SHT3X_HUMIDITY,
|
||||||
ATTR_SHT3X_TEMPERATURE,
|
ATTR_SHT3X_TEMPERATURE,
|
||||||
ATTR_SIGNAL_STRENGTH,
|
ATTR_SIGNAL_STRENGTH,
|
||||||
|
ATTR_SPS30_CAQI,
|
||||||
|
ATTR_SPS30_CAQI_LEVEL,
|
||||||
ATTR_SPS30_P0,
|
ATTR_SPS30_P0,
|
||||||
ATTR_SPS30_P1,
|
ATTR_SPS30_P1,
|
||||||
ATTR_SPS30_P2,
|
ATTR_SPS30_P2,
|
||||||
|
@ -132,6 +136,17 @@ SENSORS: tuple[SensorEntityDescription, ...] = (
|
||||||
device_class=SensorDeviceClass.CO2,
|
device_class=SensorDeviceClass.CO2,
|
||||||
state_class=SensorStateClass.MEASUREMENT,
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
),
|
),
|
||||||
|
SensorEntityDescription(
|
||||||
|
key=ATTR_SDS011_CAQI,
|
||||||
|
name="SDS011 CAQI",
|
||||||
|
icon="mdi:air-filter",
|
||||||
|
),
|
||||||
|
SensorEntityDescription(
|
||||||
|
key=ATTR_SDS011_CAQI_LEVEL,
|
||||||
|
name="SDS011 CAQI level",
|
||||||
|
icon="mdi:air-filter",
|
||||||
|
device_class="nam__caqi_level",
|
||||||
|
),
|
||||||
SensorEntityDescription(
|
SensorEntityDescription(
|
||||||
key=ATTR_SDS011_P1,
|
key=ATTR_SDS011_P1,
|
||||||
name="SDS011 particulate matter 10",
|
name="SDS011 particulate matter 10",
|
||||||
|
@ -160,6 +175,17 @@ SENSORS: tuple[SensorEntityDescription, ...] = (
|
||||||
device_class=SensorDeviceClass.TEMPERATURE,
|
device_class=SensorDeviceClass.TEMPERATURE,
|
||||||
state_class=SensorStateClass.MEASUREMENT,
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
),
|
),
|
||||||
|
SensorEntityDescription(
|
||||||
|
key=ATTR_SPS30_CAQI,
|
||||||
|
name="SPS30 CAQI",
|
||||||
|
icon="mdi:air-filter",
|
||||||
|
),
|
||||||
|
SensorEntityDescription(
|
||||||
|
key=ATTR_SPS30_CAQI_LEVEL,
|
||||||
|
name="SPS30 CAQI level",
|
||||||
|
icon="mdi:air-filter",
|
||||||
|
device_class="nam__caqi_level",
|
||||||
|
),
|
||||||
SensorEntityDescription(
|
SensorEntityDescription(
|
||||||
key=ATTR_SPS30_P0,
|
key=ATTR_SPS30_P0,
|
||||||
name="SPS30 particulate matter 1.0",
|
name="SPS30 particulate matter 1.0",
|
||||||
|
|
11
homeassistant/components/nam/strings.sensor.json
Normal file
11
homeassistant/components/nam/strings.sensor.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"state": {
|
||||||
|
"nam__caqi_level": {
|
||||||
|
"very low": "Very low",
|
||||||
|
"low": "Low",
|
||||||
|
"medium": "Medium",
|
||||||
|
"high": "High",
|
||||||
|
"very high": "Very high"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -239,6 +239,25 @@ async def test_sensor(hass):
|
||||||
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
||||||
)
|
)
|
||||||
|
|
||||||
|
entry = registry.async_get("sensor.nettigo_air_monitor_sds011_caqi")
|
||||||
|
assert entry
|
||||||
|
assert entry.unique_id == "aa:bb:cc:dd:ee:ff-sds011_caqi"
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.nettigo_air_monitor_sds011_caqi")
|
||||||
|
assert state
|
||||||
|
assert state.state == "19"
|
||||||
|
assert state.attributes.get(ATTR_ICON) == "mdi:air-filter"
|
||||||
|
|
||||||
|
entry = registry.async_get("sensor.nettigo_air_monitor_sds011_caqi_level")
|
||||||
|
assert entry
|
||||||
|
assert entry.unique_id == "aa:bb:cc:dd:ee:ff-sds011_caqi_level"
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.nettigo_air_monitor_sds011_caqi_level")
|
||||||
|
assert state
|
||||||
|
assert state.state == "very low"
|
||||||
|
assert state.attributes.get(ATTR_DEVICE_CLASS) == "nam__caqi_level"
|
||||||
|
assert state.attributes.get(ATTR_ICON) == "mdi:air-filter"
|
||||||
|
|
||||||
entry = registry.async_get(
|
entry = registry.async_get(
|
||||||
"sensor.nettigo_air_monitor_sds011_particulate_matter_10"
|
"sensor.nettigo_air_monitor_sds011_particulate_matter_10"
|
||||||
)
|
)
|
||||||
|
@ -271,6 +290,25 @@ async def test_sensor(hass):
|
||||||
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
||||||
)
|
)
|
||||||
|
|
||||||
|
entry = registry.async_get("sensor.nettigo_air_monitor_sps30_caqi")
|
||||||
|
assert entry
|
||||||
|
assert entry.unique_id == "aa:bb:cc:dd:ee:ff-sps30_caqi"
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.nettigo_air_monitor_sps30_caqi")
|
||||||
|
assert state
|
||||||
|
assert state.state == "54"
|
||||||
|
assert state.attributes.get(ATTR_ICON) == "mdi:air-filter"
|
||||||
|
|
||||||
|
entry = registry.async_get("sensor.nettigo_air_monitor_sps30_caqi_level")
|
||||||
|
assert entry
|
||||||
|
assert entry.unique_id == "aa:bb:cc:dd:ee:ff-sps30_caqi_level"
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.nettigo_air_monitor_sps30_caqi_level")
|
||||||
|
assert state
|
||||||
|
assert state.state == "medium"
|
||||||
|
assert state.attributes.get(ATTR_DEVICE_CLASS) == "nam__caqi_level"
|
||||||
|
assert state.attributes.get(ATTR_ICON) == "mdi:air-filter"
|
||||||
|
|
||||||
entry = registry.async_get(
|
entry = registry.async_get(
|
||||||
"sensor.nettigo_air_monitor_sps30_particulate_matter_1_0"
|
"sensor.nettigo_air_monitor_sps30_particulate_matter_1_0"
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue