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:
Maciej Bieniek 2022-08-28 21:54:00 +02:00 committed by GitHub
parent 1210897f83
commit bf510fcb4c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 80 additions and 0 deletions

View file

@ -4,6 +4,7 @@ from __future__ import annotations
from datetime import timedelta
from typing import Final
SUFFIX_CAQI: Final = "_caqi"
SUFFIX_P0: Final = "_p0"
SUFFIX_P1: Final = "_p1"
SUFFIX_P2: Final = "_p2"
@ -22,12 +23,16 @@ ATTR_HECA_HUMIDITY: Final = "heca_humidity"
ATTR_HECA_TEMPERATURE: Final = "heca_temperature"
ATTR_MHZ14A_CARBON_DIOXIDE: Final = "mhz14a_carbon_dioxide"
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_P2: Final = f"{ATTR_SDS011}{SUFFIX_P2}"
ATTR_SHT3X_HUMIDITY: Final = "sht3x_humidity"
ATTR_SHT3X_TEMPERATURE: Final = "sht3x_temperature"
ATTR_SIGNAL_STRENGTH: Final = "signal"
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_P1: Final = f"{ATTR_SPS30}{SUFFIX_P1}"
ATTR_SPS30_P2: Final = f"{ATTR_SPS30}{SUFFIX_P2}"

View file

@ -43,11 +43,15 @@ from .const import (
ATTR_HECA_HUMIDITY,
ATTR_HECA_TEMPERATURE,
ATTR_MHZ14A_CARBON_DIOXIDE,
ATTR_SDS011_CAQI,
ATTR_SDS011_CAQI_LEVEL,
ATTR_SDS011_P1,
ATTR_SDS011_P2,
ATTR_SHT3X_HUMIDITY,
ATTR_SHT3X_TEMPERATURE,
ATTR_SIGNAL_STRENGTH,
ATTR_SPS30_CAQI,
ATTR_SPS30_CAQI_LEVEL,
ATTR_SPS30_P0,
ATTR_SPS30_P1,
ATTR_SPS30_P2,
@ -132,6 +136,17 @@ SENSORS: tuple[SensorEntityDescription, ...] = (
device_class=SensorDeviceClass.CO2,
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(
key=ATTR_SDS011_P1,
name="SDS011 particulate matter 10",
@ -160,6 +175,17 @@ SENSORS: tuple[SensorEntityDescription, ...] = (
device_class=SensorDeviceClass.TEMPERATURE,
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(
key=ATTR_SPS30_P0,
name="SPS30 particulate matter 1.0",

View file

@ -0,0 +1,11 @@
{
"state": {
"nam__caqi_level": {
"very low": "Very low",
"low": "Low",
"medium": "Medium",
"high": "High",
"very high": "Very high"
}
}
}

View file

@ -239,6 +239,25 @@ async def test_sensor(hass):
== 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(
"sensor.nettigo_air_monitor_sds011_particulate_matter_10"
)
@ -271,6 +290,25 @@ async def test_sensor(hass):
== 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(
"sensor.nettigo_air_monitor_sps30_particulate_matter_1_0"
)