From 80be3b74a98a7dd29e0204f1acc22253316c1625 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Thu, 19 Dec 2019 14:10:27 +0100 Subject: [PATCH] Init entities as unavailable when offline (#29738) --- homeassistant/components/airly/__init__.py | 4 ---- homeassistant/components/airly/air_quality.py | 21 +++++++++++-------- homeassistant/components/airly/sensor.py | 15 +++++++++---- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/airly/__init__.py b/homeassistant/components/airly/__init__.py index ce165918ac2..17e1d27e571 100644 --- a/homeassistant/components/airly/__init__.py +++ b/homeassistant/components/airly/__init__.py @@ -10,7 +10,6 @@ import async_timeout from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE from homeassistant.core import Config, HomeAssistant -from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.util import Throttle @@ -48,9 +47,6 @@ async def async_setup_entry(hass, config_entry): await airly.async_update() - if not airly.data: - raise ConfigEntryNotReady() - hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] = airly hass.async_create_task( diff --git a/homeassistant/components/airly/air_quality.py b/homeassistant/components/airly/air_quality.py index e22fa7939c2..b48a360da28 100644 --- a/homeassistant/components/airly/air_quality.py +++ b/homeassistant/components/airly/air_quality.py @@ -5,7 +5,7 @@ from homeassistant.components.air_quality import ( ATTR_PM_10, AirQualityEntity, ) -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME from .const import ( ATTR_API_ADVICE, @@ -35,10 +35,13 @@ LABEL_PM_10_PERCENT = f"{ATTR_PM_10}_percent_of_limit" async def async_setup_entry(hass, config_entry, async_add_entities): """Set up Airly air_quality entity based on a config entry.""" name = config_entry.data[CONF_NAME] + latitude = config_entry.data[CONF_LATITUDE] + longitude = config_entry.data[CONF_LONGITUDE] + unique_id = f"{latitude}-{longitude}" data = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] - async_add_entities([AirlyAirQuality(data, name)], True) + async_add_entities([AirlyAirQuality(data, name, unique_id)], True) def round_state(func): @@ -56,11 +59,12 @@ def round_state(func): class AirlyAirQuality(AirQualityEntity): """Define an Airly air quality.""" - def __init__(self, airly, name): + def __init__(self, airly, name, unique_id): """Initialize.""" self.airly = airly self.data = airly.data self._name = name + self._unique_id = unique_id self._pm_2_5 = None self._pm_10 = None self._aqi = None @@ -108,12 +112,12 @@ class AirlyAirQuality(AirQualityEntity): @property def unique_id(self): """Return a unique_id for this entity.""" - return f"{self.airly.latitude}-{self.airly.longitude}" + return self._unique_id @property def available(self): """Return True if entity is available.""" - return bool(self.airly.data) + return bool(self.data) @property def device_state_attributes(self): @@ -132,7 +136,6 @@ class AirlyAirQuality(AirQualityEntity): if self.airly.data: self.data = self.airly.data - - self._pm_10 = self.data[ATTR_API_PM10] - self._pm_2_5 = self.data[ATTR_API_PM25] - self._aqi = self.data[ATTR_API_CAQI] + self._pm_10 = self.data[ATTR_API_PM10] + self._pm_2_5 = self.data[ATTR_API_PM25] + self._aqi = self.data[ATTR_API_CAQI] diff --git a/homeassistant/components/airly/sensor.py b/homeassistant/components/airly/sensor.py index bce32d64041..af0eac39cdc 100644 --- a/homeassistant/components/airly/sensor.py +++ b/homeassistant/components/airly/sensor.py @@ -2,6 +2,8 @@ from homeassistant.const import ( ATTR_ATTRIBUTION, ATTR_DEVICE_CLASS, + CONF_LATITUDE, + CONF_LONGITUDE, CONF_NAME, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_PRESSURE, @@ -60,12 +62,16 @@ SENSOR_TYPES = { async def async_setup_entry(hass, config_entry, async_add_entities): """Set up Airly sensor entities based on a config entry.""" name = config_entry.data[CONF_NAME] + latitude = config_entry.data[CONF_LATITUDE] + longitude = config_entry.data[CONF_LONGITUDE] data = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] sensors = [] for sensor in SENSOR_TYPES: - sensors.append(AirlySensor(data, name, sensor)) + unique_id = f"{latitude}-{longitude}-{sensor.lower()}" + sensors.append(AirlySensor(data, name, sensor, unique_id)) + async_add_entities(sensors, True) @@ -84,11 +90,12 @@ def round_state(func): class AirlySensor(Entity): """Define an Airly sensor.""" - def __init__(self, airly, name, kind): + def __init__(self, airly, name, kind, unique_id): """Initialize.""" self.airly = airly self.data = airly.data self._name = name + self._unique_id = unique_id self.kind = kind self._device_class = None self._state = None @@ -130,7 +137,7 @@ class AirlySensor(Entity): @property def unique_id(self): """Return a unique_id for this entity.""" - return f"{self.airly.latitude}-{self.airly.longitude}-{self.kind.lower()}" + return self._unique_id @property def unit_of_measurement(self): @@ -140,7 +147,7 @@ class AirlySensor(Entity): @property def available(self): """Return True if entity is available.""" - return bool(self.airly.data) + return bool(self.data) async def async_update(self): """Update the sensor."""