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 (
|
from .const import (
|
||||||
DATA_CLIENT, DATA_LISTENER, DOMAIN, SENSORS, TOPIC_DATA_UPDATE,
|
DATA_CLIENT, DATA_LISTENER, DOMAIN, SENSORS, TOPIC_DATA_UPDATE,
|
||||||
TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_HISTORIC, TYPE_ALLERGY_INDEX,
|
TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_INDEX, TYPE_ALLERGY_OUTLOOK,
|
||||||
TYPE_ALLERGY_OUTLOOK, TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW, TYPE_ASTHMA_FORECAST,
|
||||||
TYPE_ALLERGY_YESTERDAY, TYPE_ASTHMA_FORECAST, TYPE_ASTHMA_HISTORIC,
|
|
||||||
TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
||||||
TYPE_ASTHMA_YESTERDAY, TYPE_DISEASE_FORECAST)
|
TYPE_DISEASE_FORECAST)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -38,12 +37,10 @@ DEFAULT_SCAN_INTERVAL = timedelta(minutes=30)
|
||||||
|
|
||||||
FETCHER_MAPPING = {
|
FETCHER_MAPPING = {
|
||||||
(TYPE_ALLERGY_FORECAST,): (TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_OUTLOOK),
|
(TYPE_ALLERGY_FORECAST,): (TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_OUTLOOK),
|
||||||
(TYPE_ALLERGY_HISTORIC,): (TYPE_ALLERGY_HISTORIC,),
|
(TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW): (
|
||||||
(TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW, TYPE_ALLERGY_YESTERDAY): (
|
|
||||||
TYPE_ALLERGY_INDEX,),
|
TYPE_ALLERGY_INDEX,),
|
||||||
(TYPE_ASTHMA_FORECAST,): (TYPE_ASTHMA_FORECAST,),
|
(TYPE_ASTHMA_FORECAST,): (TYPE_ASTHMA_FORECAST,),
|
||||||
(TYPE_ASTHMA_HISTORIC,): (TYPE_ASTHMA_HISTORIC,),
|
(TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW): (
|
||||||
(TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW, TYPE_ASTHMA_YESTERDAY): (
|
|
||||||
TYPE_ASTHMA_INDEX,),
|
TYPE_ASTHMA_INDEX,),
|
||||||
(TYPE_DISEASE_FORECAST,): (TYPE_DISEASE_FORECAST,),
|
(TYPE_DISEASE_FORECAST,): (TYPE_DISEASE_FORECAST,),
|
||||||
}
|
}
|
||||||
|
@ -108,16 +105,12 @@ class IQVIAData:
|
||||||
self.fetchers = Registry()
|
self.fetchers = Registry()
|
||||||
self.fetchers.register(TYPE_ALLERGY_FORECAST)(
|
self.fetchers.register(TYPE_ALLERGY_FORECAST)(
|
||||||
self._client.allergens.extended)
|
self._client.allergens.extended)
|
||||||
self.fetchers.register(TYPE_ALLERGY_HISTORIC)(
|
|
||||||
self._client.allergens.historic)
|
|
||||||
self.fetchers.register(TYPE_ALLERGY_OUTLOOK)(
|
self.fetchers.register(TYPE_ALLERGY_OUTLOOK)(
|
||||||
self._client.allergens.outlook)
|
self._client.allergens.outlook)
|
||||||
self.fetchers.register(TYPE_ALLERGY_INDEX)(
|
self.fetchers.register(TYPE_ALLERGY_INDEX)(
|
||||||
self._client.allergens.current)
|
self._client.allergens.current)
|
||||||
self.fetchers.register(TYPE_ASTHMA_FORECAST)(
|
self.fetchers.register(TYPE_ASTHMA_FORECAST)(
|
||||||
self._client.asthma.extended)
|
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_ASTHMA_INDEX)(self._client.asthma.current)
|
||||||
self.fetchers.register(TYPE_DISEASE_FORECAST)(
|
self.fetchers.register(TYPE_DISEASE_FORECAST)(
|
||||||
self._client.disease.extended)
|
self._client.disease.extended)
|
||||||
|
@ -171,12 +164,10 @@ class IQVIAEntity(Entity):
|
||||||
@property
|
@property
|
||||||
def available(self):
|
def available(self):
|
||||||
"""Return True if entity is available."""
|
"""Return True if entity is available."""
|
||||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW):
|
||||||
TYPE_ALLERGY_YESTERDAY):
|
|
||||||
return self._iqvia.data.get(TYPE_ALLERGY_INDEX) is not None
|
return self._iqvia.data.get(TYPE_ALLERGY_INDEX) is not None
|
||||||
|
|
||||||
if self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
if self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW):
|
||||||
TYPE_ASTHMA_YESTERDAY):
|
|
||||||
return self._iqvia.data.get(TYPE_ASTHMA_INDEX) is not None
|
return self._iqvia.data.get(TYPE_ASTHMA_INDEX) is not None
|
||||||
|
|
||||||
return self._iqvia.data.get(self._type) 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'
|
TOPIC_DATA_UPDATE = 'data_update'
|
||||||
|
|
||||||
TYPE_ALLERGY_FORECAST = 'allergy_average_forecasted'
|
TYPE_ALLERGY_FORECAST = 'allergy_average_forecasted'
|
||||||
TYPE_ALLERGY_HISTORIC = 'allergy_average_historical'
|
|
||||||
TYPE_ALLERGY_INDEX = 'allergy_index'
|
TYPE_ALLERGY_INDEX = 'allergy_index'
|
||||||
TYPE_ALLERGY_OUTLOOK = 'allergy_outlook'
|
TYPE_ALLERGY_OUTLOOK = 'allergy_outlook'
|
||||||
TYPE_ALLERGY_TODAY = 'allergy_index_today'
|
TYPE_ALLERGY_TODAY = 'allergy_index_today'
|
||||||
TYPE_ALLERGY_TOMORROW = 'allergy_index_tomorrow'
|
TYPE_ALLERGY_TOMORROW = 'allergy_index_tomorrow'
|
||||||
TYPE_ALLERGY_YESTERDAY = 'allergy_index_yesterday'
|
|
||||||
TYPE_ASTHMA_FORECAST = 'asthma_average_forecasted'
|
TYPE_ASTHMA_FORECAST = 'asthma_average_forecasted'
|
||||||
TYPE_ASTHMA_HISTORIC = 'asthma_average_historical'
|
|
||||||
TYPE_ASTHMA_INDEX = 'asthma_index'
|
TYPE_ASTHMA_INDEX = 'asthma_index'
|
||||||
TYPE_ASTHMA_TODAY = 'asthma_index_today'
|
TYPE_ASTHMA_TODAY = 'asthma_index_today'
|
||||||
TYPE_ASTHMA_TOMORROW = 'asthma_index_tomorrow'
|
TYPE_ASTHMA_TOMORROW = 'asthma_index_tomorrow'
|
||||||
TYPE_ASTHMA_YESTERDAY = 'asthma_index_yesterday'
|
|
||||||
TYPE_DISEASE_FORECAST = 'disease_average_forecasted'
|
TYPE_DISEASE_FORECAST = 'disease_average_forecasted'
|
||||||
|
|
||||||
SENSORS = {
|
SENSORS = {
|
||||||
TYPE_ALLERGY_FORECAST: ('Allergy Index: Forecasted Average', 'mdi:flower'),
|
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_TODAY: ('Allergy Index: Today', 'mdi:flower'),
|
||||||
TYPE_ALLERGY_TOMORROW: ('Allergy Index: Tomorrow', '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_TODAY: ('Asthma Index: Today', 'mdi:flower'),
|
||||||
TYPE_ASTHMA_TOMORROW: ('Asthma Index: Tomorrow', '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_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')
|
TYPE_DISEASE_FORECAST: ('Cold & Flu: Forecasted Average', 'mdi:snowflake')
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,10 @@ from statistics import mean
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from homeassistant.components.iqvia import (
|
from homeassistant.components.iqvia import (
|
||||||
DATA_CLIENT, DOMAIN, SENSORS, TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_HISTORIC,
|
DATA_CLIENT, DOMAIN, SENSORS, TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_OUTLOOK,
|
||||||
TYPE_ALLERGY_OUTLOOK, TYPE_ALLERGY_INDEX, TYPE_ALLERGY_TODAY,
|
TYPE_ALLERGY_INDEX, TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
||||||
TYPE_ALLERGY_TOMORROW, TYPE_ALLERGY_YESTERDAY, TYPE_ASTHMA_FORECAST,
|
TYPE_ASTHMA_FORECAST, TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY,
|
||||||
TYPE_ASTHMA_HISTORIC, TYPE_ASTHMA_INDEX, TYPE_ASTHMA_TODAY,
|
TYPE_ASTHMA_TOMORROW, TYPE_DISEASE_FORECAST, IQVIAEntity)
|
||||||
TYPE_ASTHMA_TOMORROW, TYPE_ASTHMA_YESTERDAY, TYPE_DISEASE_FORECAST,
|
|
||||||
IQVIAEntity)
|
|
||||||
from homeassistant.const import ATTR_STATE
|
from homeassistant.const import ATTR_STATE
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -59,15 +57,11 @@ async def async_setup_platform(
|
||||||
|
|
||||||
sensor_class_mapping = {
|
sensor_class_mapping = {
|
||||||
TYPE_ALLERGY_FORECAST: ForecastSensor,
|
TYPE_ALLERGY_FORECAST: ForecastSensor,
|
||||||
TYPE_ALLERGY_HISTORIC: HistoricalSensor,
|
|
||||||
TYPE_ALLERGY_TODAY: IndexSensor,
|
TYPE_ALLERGY_TODAY: IndexSensor,
|
||||||
TYPE_ALLERGY_TOMORROW: IndexSensor,
|
TYPE_ALLERGY_TOMORROW: IndexSensor,
|
||||||
TYPE_ALLERGY_YESTERDAY: IndexSensor,
|
|
||||||
TYPE_ASTHMA_FORECAST: ForecastSensor,
|
TYPE_ASTHMA_FORECAST: ForecastSensor,
|
||||||
TYPE_ASTHMA_HISTORIC: HistoricalSensor,
|
|
||||||
TYPE_ASTHMA_TODAY: IndexSensor,
|
TYPE_ASTHMA_TODAY: IndexSensor,
|
||||||
TYPE_ASTHMA_TOMORROW: IndexSensor,
|
TYPE_ASTHMA_TOMORROW: IndexSensor,
|
||||||
TYPE_ASTHMA_YESTERDAY: IndexSensor,
|
|
||||||
TYPE_DISEASE_FORECAST: ForecastSensor,
|
TYPE_DISEASE_FORECAST: ForecastSensor,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,14 +74,6 @@ async def async_setup_platform(
|
||||||
async_add_entities(sensors, True)
|
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):
|
def calculate_trend(indices):
|
||||||
"""Calculate the "moving average" of a set of indices."""
|
"""Calculate the "moving average" of a set of indices."""
|
||||||
def moving_average(data, samples):
|
def moving_average(data, samples):
|
||||||
|
@ -138,32 +124,6 @@ class ForecastSensor(IQVIAEntity):
|
||||||
self._state = average
|
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):
|
class IndexSensor(IQVIAEntity):
|
||||||
"""Define sensor related to indices."""
|
"""Define sensor related to indices."""
|
||||||
|
|
||||||
|
@ -173,11 +133,9 @@ class IndexSensor(IQVIAEntity):
|
||||||
return
|
return
|
||||||
|
|
||||||
data = {}
|
data = {}
|
||||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW):
|
||||||
TYPE_ALLERGY_YESTERDAY):
|
|
||||||
data = self._iqvia.data[TYPE_ALLERGY_INDEX].get('Location')
|
data = self._iqvia.data[TYPE_ALLERGY_INDEX].get('Location')
|
||||||
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW):
|
||||||
TYPE_ASTHMA_YESTERDAY):
|
|
||||||
data = self._iqvia.data[TYPE_ASTHMA_INDEX].get('Location')
|
data = self._iqvia.data[TYPE_ASTHMA_INDEX].get('Location')
|
||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
|
@ -197,8 +155,7 @@ class IndexSensor(IQVIAEntity):
|
||||||
ATTR_ZIP_CODE: data['ZIP']
|
ATTR_ZIP_CODE: data['ZIP']
|
||||||
})
|
})
|
||||||
|
|
||||||
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW,
|
if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW):
|
||||||
TYPE_ALLERGY_YESTERDAY):
|
|
||||||
for idx, attrs in enumerate(period['Triggers']):
|
for idx, attrs in enumerate(period['Triggers']):
|
||||||
index = idx + 1
|
index = idx + 1
|
||||||
self._attrs.update({
|
self._attrs.update({
|
||||||
|
@ -209,8 +166,7 @@ class IndexSensor(IQVIAEntity):
|
||||||
'{0}_{1}'.format(ATTR_ALLERGEN_TYPE, index):
|
'{0}_{1}'.format(ATTR_ALLERGEN_TYPE, index):
|
||||||
attrs['PlantType'],
|
attrs['PlantType'],
|
||||||
})
|
})
|
||||||
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW,
|
elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW):
|
||||||
TYPE_ASTHMA_YESTERDAY):
|
|
||||||
for idx, attrs in enumerate(period['Triggers']):
|
for idx, attrs in enumerate(period['Triggers']):
|
||||||
index = idx + 1
|
index = idx + 1
|
||||||
self._attrs.update({
|
self._attrs.update({
|
||||||
|
|
Loading…
Reference in New Issue