Extend Matter sensor discovery schemas for Air Purifier / Air Quality devices (#118483)
Co-authored-by: Franck Nijhof <git@frenck.dev>
This commit is contained in:
parent
56e4fa86b0
commit
a95c074ab8
3 changed files with 170 additions and 0 deletions
|
@ -37,6 +37,17 @@ from .entity import MatterEntity, MatterEntityDescription
|
|||
from .helpers import get_matter
|
||||
from .models import MatterDiscoverySchema
|
||||
|
||||
AIR_QUALITY_MAP = {
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kExtremelyPoor: "extremely_poor",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kVeryPoor: "very_poor",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kPoor: "poor",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kFair: "fair",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kGood: "good",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kModerate: "moderate",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kUnknown: "unknown",
|
||||
clusters.AirQuality.Enums.AirQualityEnum.kUnknownEnumValue: "unknown",
|
||||
}
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
|
@ -271,4 +282,86 @@ DISCOVERY_SCHEMAS = [
|
|||
clusters.Pm10ConcentrationMeasurement.Attributes.MeasuredValue,
|
||||
),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
entity_description=MatterSensorEntityDescription(
|
||||
key="AirQuality",
|
||||
translation_key="air_quality",
|
||||
device_class=SensorDeviceClass.ENUM,
|
||||
state_class=None,
|
||||
# convert to set first to remove the duplicate unknown value
|
||||
options=list(set(AIR_QUALITY_MAP.values())),
|
||||
measurement_to_ha=lambda x: AIR_QUALITY_MAP[x],
|
||||
icon="mdi:air-filter",
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(clusters.AirQuality.Attributes.AirQuality,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
entity_description=MatterSensorEntityDescription(
|
||||
key="CarbonMonoxideSensor",
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
|
||||
device_class=SensorDeviceClass.CO,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(
|
||||
clusters.CarbonMonoxideConcentrationMeasurement.Attributes.MeasuredValue,
|
||||
),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
entity_description=MatterSensorEntityDescription(
|
||||
key="NitrogenDioxideSensor",
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
|
||||
device_class=SensorDeviceClass.NITROGEN_DIOXIDE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(
|
||||
clusters.NitrogenDioxideConcentrationMeasurement.Attributes.MeasuredValue,
|
||||
),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
entity_description=MatterSensorEntityDescription(
|
||||
key="OzoneConcentrationSensor",
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
|
||||
device_class=SensorDeviceClass.OZONE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(
|
||||
clusters.OzoneConcentrationMeasurement.Attributes.MeasuredValue,
|
||||
),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
entity_description=MatterSensorEntityDescription(
|
||||
key="HepaFilterCondition",
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
device_class=None,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
translation_key="hepa_filter_condition",
|
||||
icon="mdi:filter-check",
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(clusters.HepaFilterMonitoring.Attributes.Condition,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
entity_description=MatterSensorEntityDescription(
|
||||
key="ActivatedCarbonFilterCondition",
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
device_class=None,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
translation_key="activated_carbon_filter_condition",
|
||||
icon="mdi:filter-check",
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(
|
||||
clusters.ActivatedCarbonFilterMonitoring.Attributes.Condition,
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -79,8 +79,26 @@
|
|||
}
|
||||
},
|
||||
"sensor": {
|
||||
"activated_carbon_filter_condition": {
|
||||
"name": "Activated carbon filter condition"
|
||||
},
|
||||
"air_quality": {
|
||||
"name": "Air quality",
|
||||
"state": {
|
||||
"extremely_poor": "Extremely poor",
|
||||
"very_poor": "Very poor",
|
||||
"poor": "Poor",
|
||||
"fair": "Fair",
|
||||
"good": "Good",
|
||||
"moderate": "Moderate",
|
||||
"unknown": "Unknown"
|
||||
}
|
||||
},
|
||||
"flow": {
|
||||
"name": "Flow"
|
||||
},
|
||||
"hepa_filter_condition": {
|
||||
"name": "Hepa filter condition"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -391,3 +391,62 @@ async def test_air_purifier_sensor(
|
|||
assert state.attributes["unit_of_measurement"] == "ppm"
|
||||
assert state.attributes["device_class"] == "volatile_organic_compounds_parts"
|
||||
assert state.attributes["friendly_name"] == "Air Purifier VOCs"
|
||||
|
||||
# Air Quality
|
||||
state = hass.states.get("sensor.air_purifier_air_quality")
|
||||
assert state
|
||||
assert state.state == "good"
|
||||
expected_options = [
|
||||
"extremely_poor",
|
||||
"very_poor",
|
||||
"poor",
|
||||
"fair",
|
||||
"good",
|
||||
"moderate",
|
||||
"unknown",
|
||||
]
|
||||
assert set(state.attributes["options"]) == set(expected_options)
|
||||
assert state.attributes["device_class"] == "enum"
|
||||
assert state.attributes["friendly_name"] == "Air Purifier Air quality"
|
||||
|
||||
# Carbon MonoOxide
|
||||
state = hass.states.get("sensor.air_purifier_carbon_monoxide")
|
||||
assert state
|
||||
assert state.state == "2.0"
|
||||
assert state.attributes["state_class"] == "measurement"
|
||||
assert state.attributes["unit_of_measurement"] == "ppm"
|
||||
assert state.attributes["device_class"] == "carbon_monoxide"
|
||||
assert state.attributes["friendly_name"] == "Air Purifier Carbon monoxide"
|
||||
|
||||
# Nitrogen Dioxide
|
||||
state = hass.states.get("sensor.air_purifier_nitrogen_dioxide")
|
||||
assert state
|
||||
assert state.state == "2.0"
|
||||
assert state.attributes["state_class"] == "measurement"
|
||||
assert state.attributes["unit_of_measurement"] == "ppm"
|
||||
assert state.attributes["device_class"] == "nitrogen_dioxide"
|
||||
assert state.attributes["friendly_name"] == "Air Purifier Nitrogen dioxide"
|
||||
|
||||
# Ozone Concentration
|
||||
state = hass.states.get("sensor.air_purifier_ozone")
|
||||
assert state
|
||||
assert state.state == "2.0"
|
||||
assert state.attributes["state_class"] == "measurement"
|
||||
assert state.attributes["unit_of_measurement"] == "ppm"
|
||||
assert state.attributes["device_class"] == "ozone"
|
||||
assert state.attributes["friendly_name"] == "Air Purifier Ozone"
|
||||
|
||||
# Hepa Filter Condition
|
||||
state = hass.states.get("sensor.air_purifier_hepa_filter_condition")
|
||||
assert state
|
||||
assert state.state == "100"
|
||||
assert state.attributes["state_class"] == "measurement"
|
||||
assert state.attributes["unit_of_measurement"] == "%"
|
||||
assert state.attributes["friendly_name"] == "Air Purifier Hepa filter condition"
|
||||
|
||||
# Activated Carbon Filter Condition
|
||||
state = hass.states.get("sensor.air_purifier_activated_carbon_filter_condition")
|
||||
assert state
|
||||
assert state.state == "100"
|
||||
assert state.attributes["state_class"] == "measurement"
|
||||
assert state.attributes["unit_of_measurement"] == "%"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue