Remove historical allergen and asthma sensors from IQVIA (#23258)
* Remove historical sensors from IQVIA * Removed old imports * Removed "Yesterday" sensorspull/23463/head
parent
c2e7445271
commit
bf050adcf3
|
@ -20,11 +20,10 @@ from homeassistant.util.decorator import Registry
|
|||
|
||||
from .const import (
|
||||
DATA_CLIENT, DATA_LISTENER, DOMAIN, SENSORS, TOPIC_DATA_UPDATE,
|
||||
TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_HISTORIC, TYPE_ALLERGY_INDEX,
|
||||
TYPE_ALLERGY_OUTLOOK, TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
||||
TYPE_ALLERGY_YESTERDAY, TYPE_ASTHMA_FORECAST, TYPE_ASTHMA_HISTORIC,
|
||||
TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_INDEX, TYPE_ALLERGY_OUTLOOK,
|
||||
TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW, TYPE_ASTHMA_FORECAST,
|
||||
TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
||||
TYPE_ASTHMA_YESTERDAY, TYPE_DISEASE_FORECAST)
|
||||
TYPE_DISEASE_FORECAST)
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
@ -38,12 +37,10 @@ DEFAULT_SCAN_INTERVAL = timedelta(minutes=30)
|
|||
|
||||
FETCHER_MAPPING = {
|
||||
(TYPE_ALLERGY_FORECAST,): (TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_OUTLOOK),
|
||||
(TYPE_ALLERGY_HISTORIC,): (TYPE_ALLERGY_HISTORIC,),
|
||||
(TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW, TYPE_ALLERGY_YESTERDAY): (
|
||||
(TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW): (
|
||||
TYPE_ALLERGY_INDEX,),
|
||||
(TYPE_ASTHMA_FORECAST,): (TYPE_ASTHMA_FORECAST,),
|
||||
(TYPE_ASTHMA_HISTORIC,): (TYPE_ASTHMA_HISTORIC,),
|
||||
(TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW, TYPE_ASTHMA_YESTERDAY): (
|
||||
(TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW): (
|
||||
TYPE_ASTHMA_INDEX,),
|
||||
(TYPE_DISEASE_FORECAST,): (TYPE_DISEASE_FORECAST,),
|
||||
}
|
||||
|
@ -108,16 +105,12 @@ class IQVIAData:
|
|||
self.fetchers = Registry()
|
||||
self.fetchers.register(TYPE_ALLERGY_FORECAST)(
|
||||
self._client.allergens.extended)
|
||||
self.fetchers.register(TYPE_ALLERGY_HISTORIC)(
|
||||
self._client.allergens.historic)
|
||||
self.fetchers.register(TYPE_ALLERGY_OUTLOOK)(
|
||||
self._client.allergens.outlook)
|
||||
self.fetchers.register(TYPE_ALLERGY_INDEX)(
|
||||
self._client.allergens.current)
|
||||
self.fetchers.register(TYPE_ASTHMA_FORECAST)(
|
||||
self._client.asthma.extended)
|
||||
self.fetchers.register(TYPE_ASTHMA_HISTORIC)(
|
||||
self._client.asthma.historic)
|
||||
self.fetchers.register(TYPE_ASTHMA_INDEX)(self._client.asthma.current)
|
||||
self.fetchers.register(TYPE_DISEASE_FORECAST)(
|
||||
self._client.disease.extended)
|
||||
|
@ -171,12 +164,10 @@ class IQVIAEntity(Entity):
|
|||
@property
|
||||
def available(self):
|
||||
"""Return True if entity is available."""
|
||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
||||
TYPE_ALLERGY_YESTERDAY):
|
||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW):
|
||||
return self._iqvia.data.get(TYPE_ALLERGY_INDEX) is not None
|
||||
|
||||
if self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
||||
TYPE_ASTHMA_YESTERDAY):
|
||||
if self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW):
|
||||
return self._iqvia.data.get(TYPE_ASTHMA_INDEX) is not None
|
||||
|
||||
return self._iqvia.data.get(self._type) is not None
|
||||
|
|
|
@ -7,30 +7,22 @@ DATA_LISTENER = 'listener'
|
|||
TOPIC_DATA_UPDATE = 'data_update'
|
||||
|
||||
TYPE_ALLERGY_FORECAST = 'allergy_average_forecasted'
|
||||
TYPE_ALLERGY_HISTORIC = 'allergy_average_historical'
|
||||
TYPE_ALLERGY_INDEX = 'allergy_index'
|
||||
TYPE_ALLERGY_OUTLOOK = 'allergy_outlook'
|
||||
TYPE_ALLERGY_TODAY = 'allergy_index_today'
|
||||
TYPE_ALLERGY_TOMORROW = 'allergy_index_tomorrow'
|
||||
TYPE_ALLERGY_YESTERDAY = 'allergy_index_yesterday'
|
||||
TYPE_ASTHMA_FORECAST = 'asthma_average_forecasted'
|
||||
TYPE_ASTHMA_HISTORIC = 'asthma_average_historical'
|
||||
TYPE_ASTHMA_INDEX = 'asthma_index'
|
||||
TYPE_ASTHMA_TODAY = 'asthma_index_today'
|
||||
TYPE_ASTHMA_TOMORROW = 'asthma_index_tomorrow'
|
||||
TYPE_ASTHMA_YESTERDAY = 'asthma_index_yesterday'
|
||||
TYPE_DISEASE_FORECAST = 'disease_average_forecasted'
|
||||
|
||||
SENSORS = {
|
||||
TYPE_ALLERGY_FORECAST: ('Allergy Index: Forecasted Average', 'mdi:flower'),
|
||||
TYPE_ALLERGY_HISTORIC: ('Allergy Index: Historical Average', 'mdi:flower'),
|
||||
TYPE_ALLERGY_TODAY: ('Allergy Index: Today', 'mdi:flower'),
|
||||
TYPE_ALLERGY_TOMORROW: ('Allergy Index: Tomorrow', 'mdi:flower'),
|
||||
TYPE_ALLERGY_YESTERDAY: ('Allergy Index: Yesterday', 'mdi:flower'),
|
||||
TYPE_ASTHMA_TODAY: ('Asthma Index: Today', 'mdi:flower'),
|
||||
TYPE_ASTHMA_TOMORROW: ('Asthma Index: Tomorrow', 'mdi:flower'),
|
||||
TYPE_ASTHMA_YESTERDAY: ('Asthma Index: Yesterday', 'mdi:flower'),
|
||||
TYPE_ASTHMA_FORECAST: ('Asthma Index: Forecasted Average', 'mdi:flower'),
|
||||
TYPE_ASTHMA_HISTORIC: ('Asthma Index: Historical Average', 'mdi:flower'),
|
||||
TYPE_DISEASE_FORECAST: ('Cold & Flu: Forecasted Average', 'mdi:snowflake')
|
||||
}
|
||||
|
|
|
@ -5,12 +5,10 @@ from statistics import mean
|
|||
import numpy as np
|
||||
|
||||
from homeassistant.components.iqvia import (
|
||||
DATA_CLIENT, DOMAIN, SENSORS, TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_HISTORIC,
|
||||
TYPE_ALLERGY_OUTLOOK, TYPE_ALLERGY_INDEX, TYPE_ALLERGY_TODAY,
|
||||
TYPE_ALLERGY_TOMORROW, TYPE_ALLERGY_YESTERDAY, TYPE_ASTHMA_FORECAST,
|
||||
TYPE_ASTHMA_HISTORIC, TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY,
|
||||
TYPE_ASTHMA_TOMORROW, TYPE_ASTHMA_YESTERDAY, TYPE_DISEASE_FORECAST,
|
||||
IQVIAEntity)
|
||||
DATA_CLIENT, DOMAIN, SENSORS, TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_OUTLOOK,
|
||||
TYPE_ALLERGY_INDEX, TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
||||
TYPE_ASTHMA_FORECAST, TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY,
|
||||
TYPE_ASTHMA_TOMORROW, TYPE_DISEASE_FORECAST, IQVIAEntity)
|
||||
from homeassistant.const import ATTR_STATE
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
@ -59,15 +57,11 @@ async def async_setup_platform(
|
|||
|
||||
sensor_class_mapping = {
|
||||
TYPE_ALLERGY_FORECAST: ForecastSensor,
|
||||
TYPE_ALLERGY_HISTORIC: HistoricalSensor,
|
||||
TYPE_ALLERGY_TODAY: IndexSensor,
|
||||
TYPE_ALLERGY_TOMORROW: IndexSensor,
|
||||
TYPE_ALLERGY_YESTERDAY: IndexSensor,
|
||||
TYPE_ASTHMA_FORECAST: ForecastSensor,
|
||||
TYPE_ASTHMA_HISTORIC: HistoricalSensor,
|
||||
TYPE_ASTHMA_TODAY: IndexSensor,
|
||||
TYPE_ASTHMA_TOMORROW: IndexSensor,
|
||||
TYPE_ASTHMA_YESTERDAY: IndexSensor,
|
||||
TYPE_DISEASE_FORECAST: ForecastSensor,
|
||||
}
|
||||
|
||||
|
@ -80,14 +74,6 @@ async def async_setup_platform(
|
|||
async_add_entities(sensors, True)
|
||||
|
||||
|
||||
def calculate_average_rating(indices):
|
||||
"""Calculate the human-friendly historical allergy average."""
|
||||
ratings = list(
|
||||
r['label'] for n in indices for r in RATING_MAPPING
|
||||
if r['minimum'] <= n <= r['maximum'])
|
||||
return max(set(ratings), key=ratings.count)
|
||||
|
||||
|
||||
def calculate_trend(indices):
|
||||
"""Calculate the "moving average" of a set of indices."""
|
||||
def moving_average(data, samples):
|
||||
|
@ -138,32 +124,6 @@ class ForecastSensor(IQVIAEntity):
|
|||
self._state = average
|
||||
|
||||
|
||||
class HistoricalSensor(IQVIAEntity):
|
||||
"""Define sensor related to historical data."""
|
||||
|
||||
async def async_update(self):
|
||||
"""Update the sensor."""
|
||||
if not self._iqvia.data:
|
||||
return
|
||||
|
||||
data = self._iqvia.data[self._type].get('Location')
|
||||
if not data:
|
||||
return
|
||||
|
||||
indices = [p['Index'] for p in data['periods']]
|
||||
average = round(mean(indices), 1)
|
||||
|
||||
self._attrs.update({
|
||||
ATTR_CITY: data['City'].title(),
|
||||
ATTR_RATING: calculate_average_rating(indices),
|
||||
ATTR_STATE: data['State'],
|
||||
ATTR_TREND: calculate_trend(indices),
|
||||
ATTR_ZIP_CODE: data['ZIP']
|
||||
})
|
||||
|
||||
self._state = average
|
||||
|
||||
|
||||
class IndexSensor(IQVIAEntity):
|
||||
"""Define sensor related to indices."""
|
||||
|
||||
|
@ -173,11 +133,9 @@ class IndexSensor(IQVIAEntity):
|
|||
return
|
||||
|
||||
data = {}
|
||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
||||
TYPE_ALLERGY_YESTERDAY):
|
||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW):
|
||||
data = self._iqvia.data[TYPE_ALLERGY_INDEX].get('Location')
|
||||
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
||||
TYPE_ASTHMA_YESTERDAY):
|
||||
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW):
|
||||
data = self._iqvia.data[TYPE_ASTHMA_INDEX].get('Location')
|
||||
|
||||
if not data:
|
||||
|
@ -197,8 +155,7 @@ class IndexSensor(IQVIAEntity):
|
|||
ATTR_ZIP_CODE: data['ZIP']
|
||||
})
|
||||
|
||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
||||
TYPE_ALLERGY_YESTERDAY):
|
||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW):
|
||||
for idx, attrs in enumerate(period['Triggers']):
|
||||
index = idx + 1
|
||||
self._attrs.update({
|
||||
|
@ -209,8 +166,7 @@ class IndexSensor(IQVIAEntity):
|
|||
'{0}_{1}'.format(ATTR_ALLERGEN_TYPE, index):
|
||||
attrs['PlantType'],
|
||||
})
|
||||
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
||||
TYPE_ASTHMA_YESTERDAY):
|
||||
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW):
|
||||
for idx, attrs in enumerate(period['Triggers']):
|
||||
index = idx + 1
|
||||
self._attrs.update({
|
||||
|
|
Loading…
Reference in New Issue