From f5cd3211859ad473ab4ee571475169fc2f6969ad Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Fri, 3 Sep 2021 22:36:24 +0200 Subject: [PATCH] Use EntityDescription - airnow (#55684) --- homeassistant/components/airnow/sensor.py | 79 ++++++++++++----------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/homeassistant/components/airnow/sensor.py b/homeassistant/components/airnow/sensor.py index a0f8d7e701b..ed879d32d4a 100644 --- a/homeassistant/components/airnow/sensor.py +++ b/homeassistant/components/airnow/sensor.py @@ -1,14 +1,15 @@ """Support for the AirNow sensor service.""" -from homeassistant.components.sensor import SensorEntity +from __future__ import annotations + +from homeassistant.components.sensor import SensorEntity, SensorEntityDescription from homeassistant.const import ( ATTR_ATTRIBUTION, - ATTR_DEVICE_CLASS, - ATTR_ICON, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, CONCENTRATION_PARTS_PER_MILLION, ) from homeassistant.helpers.update_coordinator import CoordinatorEntity +from . import AirNowDataUpdateCoordinator from .const import ( ATTR_API_AQI, ATTR_API_AQI_DESCRIPTION, @@ -22,69 +23,69 @@ from .const import ( ATTRIBUTION = "Data provided by AirNow" -ATTR_LABEL = "label" -ATTR_UNIT = "unit" - PARALLEL_UPDATES = 1 -SENSOR_TYPES = { - ATTR_API_AQI: { - ATTR_DEVICE_CLASS: None, - ATTR_ICON: "mdi:blur", - ATTR_LABEL: ATTR_API_AQI, - ATTR_UNIT: "aqi", - }, - ATTR_API_PM25: { - ATTR_DEVICE_CLASS: None, - ATTR_ICON: "mdi:blur", - ATTR_LABEL: ATTR_API_PM25, - ATTR_UNIT: CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - }, - ATTR_API_O3: { - ATTR_DEVICE_CLASS: None, - ATTR_ICON: "mdi:blur", - ATTR_LABEL: ATTR_API_O3, - ATTR_UNIT: CONCENTRATION_PARTS_PER_MILLION, - }, -} +SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( + SensorEntityDescription( + key=ATTR_API_AQI, + icon="mdi:blur", + name=ATTR_API_AQI, + native_unit_of_measurement="aqi", + ), + SensorEntityDescription( + key=ATTR_API_PM25, + icon="mdi:blur", + name=ATTR_API_PM25, + native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + ), + SensorEntityDescription( + key=ATTR_API_O3, + icon="mdi:blur", + name=ATTR_API_O3, + native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION, + ), +) async def async_setup_entry(hass, config_entry, async_add_entities): """Set up AirNow sensor entities based on a config entry.""" coordinator = hass.data[DOMAIN][config_entry.entry_id] - sensors = [] - for sensor in SENSOR_TYPES: - sensors.append(AirNowSensor(coordinator, sensor)) + entities = [AirNowSensor(coordinator, description) for description in SENSOR_TYPES] - async_add_entities(sensors, False) + async_add_entities(entities, False) class AirNowSensor(CoordinatorEntity, SensorEntity): """Define an AirNow sensor.""" - def __init__(self, coordinator, kind): + coordinator: AirNowDataUpdateCoordinator + + def __init__( + self, + coordinator: AirNowDataUpdateCoordinator, + description: SensorEntityDescription, + ) -> None: """Initialize.""" super().__init__(coordinator) - self.kind = kind + self.entity_description = description self._state = None self._attrs = {ATTR_ATTRIBUTION: ATTRIBUTION} - self._attr_name = f"AirNow {SENSOR_TYPES[self.kind][ATTR_LABEL]}" - self._attr_icon = SENSOR_TYPES[self.kind][ATTR_ICON] - self._attr_device_class = SENSOR_TYPES[self.kind][ATTR_DEVICE_CLASS] - self._attr_native_unit_of_measurement = SENSOR_TYPES[self.kind][ATTR_UNIT] - self._attr_unique_id = f"{self.coordinator.latitude}-{self.coordinator.longitude}-{self.kind.lower()}" + self._attr_name = f"AirNow {description.name}" + self._attr_unique_id = ( + f"{coordinator.latitude}-{coordinator.longitude}-{description.key.lower()}" + ) @property def native_value(self): """Return the state.""" - self._state = self.coordinator.data[self.kind] + self._state = self.coordinator.data[self.entity_description.key] return self._state @property def extra_state_attributes(self): """Return the state attributes.""" - if self.kind == ATTR_API_AQI: + if self.entity_description.key == ATTR_API_AQI: self._attrs[SENSOR_AQI_ATTR_DESCR] = self.coordinator.data[ ATTR_API_AQI_DESCRIPTION ]