Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 6 additions & 42 deletions homeassistant/components/waqi/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

from __future__ import annotations

from collections.abc import Callable, Mapping
from collections.abc import Callable
from dataclasses import dataclass
import logging
from typing import Any

from aiowaqi import WAQIAirQuality
from aiowaqi.models import Pollutant
Expand All @@ -17,13 +16,7 @@
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_TEMPERATURE,
ATTR_TIME,
PERCENTAGE,
UnitOfPressure,
UnitOfTemperature,
)
from homeassistant.const import PERCENTAGE, UnitOfPressure, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
Expand All @@ -49,7 +42,7 @@
class WAQISensorEntityDescription(SensorEntityDescription):
"""Describes WAQI sensor entity."""

available_fn: Callable[[WAQIAirQuality], bool]
available_fn: Callable[[WAQIAirQuality], bool] = lambda _: True
value_fn: Callable[[WAQIAirQuality], StateType]


Expand All @@ -59,7 +52,6 @@ class WAQISensorEntityDescription(SensorEntityDescription):
device_class=SensorDeviceClass.AQI,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda aq: aq.air_quality_index,
available_fn=lambda _: True,
),
WAQISensorEntityDescription(
key="humidity",
Expand Down Expand Up @@ -141,7 +133,6 @@ class WAQISensorEntityDescription(SensorEntityDescription):
device_class=SensorDeviceClass.ENUM,
options=[pollutant.value for pollutant in Pollutant],
value_fn=lambda aq: aq.dominant_pollutant,
available_fn=lambda _: True,
),
]

Expand All @@ -152,11 +143,9 @@ async def async_setup_entry(
"""Set up the WAQI sensor."""
coordinator: WAQIDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
WaqiSensor(coordinator, sensor)
for sensor in SENSORS
if sensor.available_fn(coordinator.data)
]
WaqiSensor(coordinator, sensor)
for sensor in SENSORS
if sensor.available_fn(coordinator.data)
)


Expand Down Expand Up @@ -188,28 +177,3 @@ def __init__(
def native_value(self) -> StateType:
"""Return the state of the device."""
return self.entity_description.value_fn(self.coordinator.data)

@property
def extra_state_attributes(self) -> Mapping[str, Any] | None:
"""Return old state attributes if the entity is AQI entity."""
# These are deprecated and will be removed in 2024.5
if self.entity_description.key != "air_quality":
return None
attrs: dict[str, Any] = {}
attrs[ATTR_TIME] = self.coordinator.data.measured_at
attrs[ATTR_DOMINENTPOL] = self.coordinator.data.dominant_pollutant

iaqi = self.coordinator.data.extended_air_quality

attribute = {
ATTR_PM2_5: iaqi.pm25,
ATTR_PM10: iaqi.pm10,
ATTR_HUMIDITY: iaqi.humidity,
ATTR_PRESSURE: iaqi.pressure,
ATTR_TEMPERATURE: iaqi.temperature,
ATTR_OZONE: iaqi.ozone,
ATTR_NITROGEN_DIOXIDE: iaqi.nitrogen_dioxide,
ATTR_SULFUR_DIOXIDE: iaqi.sulfur_dioxide,
}
res_attributes = {k: v for k, v in attribute.items() if v is not None}
return {**attrs, **res_attributes}
10 changes: 0 additions & 10 deletions tests/components/waqi/snapshots/test_sensor.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,8 @@
'attributes': ReadOnlyDict({
'attribution': 'RIVM - Rijksinstituut voor Volksgezondheid en Milieum, Landelijk Meetnet Luchtkwaliteit and World Air Quality Index Project',
'device_class': 'aqi',
'dominentpol': <Pollutant.OZONE: 'o3'>,
'friendly_name': 'de Jongweg, Utrecht Air quality index',
'humidity': 80,
'nitrogen_dioxide': 2.3,
'ozone': 29.4,
'pm_10': 12,
'pm_2_5': 17,
'pressure': 1008.8,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'sulfur_dioxide': 2.3,
'temperature': 16,
'time': datetime.datetime(2023, 8, 7, 17, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200))),
}),
'context': <ANY>,
'entity_id': 'sensor.de_jongweg_utrecht_air_quality_index',
Expand Down