Use EntityDescription - faa_delays (#55678)

* Use EntityDescription - faa_delays

* Update binary_sensor.py
This commit is contained in:
Marc Mueller 2021-09-03 22:34:29 +02:00 committed by GitHub
parent 3c0a34dd01
commit 798f487ea4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 65 deletions

View File

@ -1,6 +1,12 @@
"""Platform for FAA Delays sensor component.""" """Platform for FAA Delays sensor component."""
from homeassistant.components.binary_sensor import BinarySensorEntity from __future__ import annotations
from homeassistant.const import ATTR_ICON, ATTR_NAME
from typing import Any
from homeassistant.components.binary_sensor import (
BinarySensorEntity,
BinarySensorEntityDescription,
)
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, FAA_BINARY_SENSORS from .const import DOMAIN, FAA_BINARY_SENSORS
@ -10,83 +16,68 @@ async def async_setup_entry(hass, entry, async_add_entities):
"""Set up a FAA sensor based on a config entry.""" """Set up a FAA sensor based on a config entry."""
coordinator = hass.data[DOMAIN][entry.entry_id] coordinator = hass.data[DOMAIN][entry.entry_id]
binary_sensors = [] entities = [
for kind, attrs in FAA_BINARY_SENSORS.items(): FAABinarySensor(coordinator, entry.entry_id, description)
name = attrs[ATTR_NAME] for description in FAA_BINARY_SENSORS
icon = attrs[ATTR_ICON] ]
binary_sensors.append( async_add_entities(entities)
FAABinarySensor(coordinator, kind, name, icon, entry.entry_id)
)
async_add_entities(binary_sensors)
class FAABinarySensor(CoordinatorEntity, BinarySensorEntity): class FAABinarySensor(CoordinatorEntity, BinarySensorEntity):
"""Define a binary sensor for FAA Delays.""" """Define a binary sensor for FAA Delays."""
def __init__(self, coordinator, sensor_type, name, icon, entry_id): def __init__(
self, coordinator, entry_id, description: BinarySensorEntityDescription
):
"""Initialize the sensor.""" """Initialize the sensor."""
super().__init__(coordinator) super().__init__(coordinator)
self.entity_description = description
self.coordinator = coordinator self.coordinator = coordinator
self._entry_id = entry_id self._entry_id = entry_id
self._icon = icon self._attrs: dict[str, Any] = {}
self._name = name _id = coordinator.data.iata
self._sensor_type = sensor_type self._attr_name = f"{_id} {description.name}"
self._id = self.coordinator.data.iata self._attr_unique_id = f"{_id}_{description.key}"
self._attrs = {}
@property
def name(self):
"""Return the name of the sensor."""
return f"{self._id} {self._name}"
@property
def icon(self):
"""Return the icon."""
return self._icon
@property @property
def is_on(self): def is_on(self):
"""Return the status of the sensor.""" """Return the status of the sensor."""
if self._sensor_type == "GROUND_DELAY": sensor_type = self.entity_description.key
if sensor_type == "GROUND_DELAY":
return self.coordinator.data.ground_delay.status return self.coordinator.data.ground_delay.status
if self._sensor_type == "GROUND_STOP": if sensor_type == "GROUND_STOP":
return self.coordinator.data.ground_stop.status return self.coordinator.data.ground_stop.status
if self._sensor_type == "DEPART_DELAY": if sensor_type == "DEPART_DELAY":
return self.coordinator.data.depart_delay.status return self.coordinator.data.depart_delay.status
if self._sensor_type == "ARRIVE_DELAY": if sensor_type == "ARRIVE_DELAY":
return self.coordinator.data.arrive_delay.status return self.coordinator.data.arrive_delay.status
if self._sensor_type == "CLOSURE": if sensor_type == "CLOSURE":
return self.coordinator.data.closure.status return self.coordinator.data.closure.status
return None return None
@property
def unique_id(self):
"""Return a unique, Home Assistant friendly identifier for this entity."""
return f"{self._id}_{self._sensor_type}"
@property @property
def extra_state_attributes(self): def extra_state_attributes(self):
"""Return attributes for sensor.""" """Return attributes for sensor."""
if self._sensor_type == "GROUND_DELAY": sensor_type = self.entity_description.key
if sensor_type == "GROUND_DELAY":
self._attrs["average"] = self.coordinator.data.ground_delay.average self._attrs["average"] = self.coordinator.data.ground_delay.average
self._attrs["reason"] = self.coordinator.data.ground_delay.reason self._attrs["reason"] = self.coordinator.data.ground_delay.reason
elif self._sensor_type == "GROUND_STOP": elif sensor_type == "GROUND_STOP":
self._attrs["endtime"] = self.coordinator.data.ground_stop.endtime self._attrs["endtime"] = self.coordinator.data.ground_stop.endtime
self._attrs["reason"] = self.coordinator.data.ground_stop.reason self._attrs["reason"] = self.coordinator.data.ground_stop.reason
elif self._sensor_type == "DEPART_DELAY": elif sensor_type == "DEPART_DELAY":
self._attrs["minimum"] = self.coordinator.data.depart_delay.minimum self._attrs["minimum"] = self.coordinator.data.depart_delay.minimum
self._attrs["maximum"] = self.coordinator.data.depart_delay.maximum self._attrs["maximum"] = self.coordinator.data.depart_delay.maximum
self._attrs["trend"] = self.coordinator.data.depart_delay.trend self._attrs["trend"] = self.coordinator.data.depart_delay.trend
self._attrs["reason"] = self.coordinator.data.depart_delay.reason self._attrs["reason"] = self.coordinator.data.depart_delay.reason
elif self._sensor_type == "ARRIVE_DELAY": elif sensor_type == "ARRIVE_DELAY":
self._attrs["minimum"] = self.coordinator.data.arrive_delay.minimum self._attrs["minimum"] = self.coordinator.data.arrive_delay.minimum
self._attrs["maximum"] = self.coordinator.data.arrive_delay.maximum self._attrs["maximum"] = self.coordinator.data.arrive_delay.maximum
self._attrs["trend"] = self.coordinator.data.arrive_delay.trend self._attrs["trend"] = self.coordinator.data.arrive_delay.trend
self._attrs["reason"] = self.coordinator.data.arrive_delay.reason self._attrs["reason"] = self.coordinator.data.arrive_delay.reason
elif self._sensor_type == "CLOSURE": elif sensor_type == "CLOSURE":
self._attrs["begin"] = self.coordinator.data.closure.begin self._attrs["begin"] = self.coordinator.data.closure.begin
self._attrs["end"] = self.coordinator.data.closure.end self._attrs["end"] = self.coordinator.data.closure.end
self._attrs["reason"] = self.coordinator.data.closure.reason self._attrs["reason"] = self.coordinator.data.closure.reason

View File

@ -1,28 +1,34 @@
"""Constants for the FAA Delays integration.""" """Constants for the FAA Delays integration."""
from __future__ import annotations
from homeassistant.const import ATTR_ICON, ATTR_NAME from homeassistant.components.binary_sensor import BinarySensorEntityDescription
DOMAIN = "faa_delays" DOMAIN = "faa_delays"
FAA_BINARY_SENSORS = { FAA_BINARY_SENSORS: tuple[BinarySensorEntityDescription, ...] = (
"GROUND_DELAY": { BinarySensorEntityDescription(
ATTR_NAME: "Ground Delay", key="GROUND_DELAY",
ATTR_ICON: "mdi:airport", name="Ground Delay",
}, icon="mdi:airport",
"GROUND_STOP": { ),
ATTR_NAME: "Ground Stop", BinarySensorEntityDescription(
ATTR_ICON: "mdi:airport", key="GROUND_STOP",
}, name="Ground Stop",
"DEPART_DELAY": { icon="mdi:airport",
ATTR_NAME: "Departure Delay", ),
ATTR_ICON: "mdi:airplane-takeoff", BinarySensorEntityDescription(
}, key="DEPART_DELAY",
"ARRIVE_DELAY": { name="Departure Delay",
ATTR_NAME: "Arrival Delay", icon="mdi:airplane-takeoff",
ATTR_ICON: "mdi:airplane-landing", ),
}, BinarySensorEntityDescription(
"CLOSURE": { key="ARRIVE_DELAY",
ATTR_NAME: "Closure", name="Arrival Delay",
ATTR_ICON: "mdi:airplane:off", icon="mdi:airplane-landing",
}, ),
} BinarySensorEntityDescription(
key="CLOSURE",
name="Closure",
icon="mdi:airplane:off",
),
)