From 760138ac529a5755e077c23546f7c2d95fd3c23b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Jun 2017 21:28:13 +0200 Subject: [PATCH] Do not call update() in constructor (#7917) --- .../components/sensor/dte_energy_bridge.py | 2 +- .../components/sensor/dublin_bus_transport.py | 20 +++----- homeassistant/components/sensor/dweet.py | 6 +-- homeassistant/components/sensor/ebox.py | 49 +++++++------------ homeassistant/components/sensor/ecobee.py | 10 ++-- homeassistant/components/sensor/hddtemp.py | 21 ++++---- .../components/sensor/mold_indicator.py | 4 +- homeassistant/components/sensor/pi_hole.py | 8 ++- homeassistant/components/sensor/waqi.py | 22 ++++----- .../components/sensor/yahoo_finance.py | 9 ++-- 10 files changed, 60 insertions(+), 91 deletions(-) diff --git a/homeassistant/components/sensor/dte_energy_bridge.py b/homeassistant/components/sensor/dte_energy_bridge.py index ea2739c3096..ee80c4f76fe 100644 --- a/homeassistant/components/sensor/dte_energy_bridge.py +++ b/homeassistant/components/sensor/dte_energy_bridge.py @@ -32,7 +32,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): name = config.get(CONF_NAME) ip_address = config.get(CONF_IP_ADDRESS) - add_devices([DteEnergyBridgeSensor(ip_address, name)]) + add_devices([DteEnergyBridgeSensor(ip_address, name)], True) class DteEnergyBridgeSensor(Entity): diff --git a/homeassistant/components/sensor/dublin_bus_transport.py b/homeassistant/components/sensor/dublin_bus_transport.py index 337f8188847..f1dda41c05f 100644 --- a/homeassistant/components/sensor/dublin_bus_transport.py +++ b/homeassistant/components/sensor/dublin_bus_transport.py @@ -13,12 +13,11 @@ from datetime import timedelta, datetime import requests import voluptuous as vol +import homeassistant.helpers.config_validation as cv +import homeassistant.util.dt as dt_util from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import CONF_NAME, ATTR_ATTRIBUTION -import homeassistant.util.dt as dt_util from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle -import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) _RESOURCE = 'https://data.dublinked.ie/cgi-bin/rtpi/realtimebusinformation' @@ -36,7 +35,7 @@ CONF_ROUTE = 'route' DEFAULT_NAME = 'Next Bus' ICON = 'mdi:bus' -MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60) +SCAN_INTERVAL = timedelta(minutes=1) TIME_STR_FORMAT = '%H:%M' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ @@ -64,7 +63,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): route = config.get(CONF_ROUTE) data = PublicTransportData(stop, route) - add_devices([DublinPublicTransportSensor(data, stop, route, name)]) + add_devices([DublinPublicTransportSensor(data, stop, route, name)], True) class DublinPublicTransportSensor(Entity): @@ -76,7 +75,7 @@ class DublinPublicTransportSensor(Entity): self._name = name self._stop = stop self._route = route - self.update() + self._times = self._state = None @property def name(self): @@ -137,7 +136,6 @@ class PublicTransportData(object): ATTR_ROUTE: self.route, ATTR_DUE_IN: 'n/a'}] - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the latest data from opendata.ch.""" params = {} @@ -149,10 +147,7 @@ class PublicTransportData(object): params['maxresults'] = 2 params['format'] = 'json' - response = requests.get( - _RESOURCE, - params, - timeout=10) + response = requests.get(_RESOURCE, params, timeout=10) if response.status_code != 200: self.info = [{ATTR_DUE_AT: 'n/a', @@ -175,8 +170,7 @@ class PublicTransportData(object): if due_at is not None and route is not None: bus_data = {ATTR_DUE_AT: due_at, ATTR_ROUTE: route, - ATTR_DUE_IN: - due_in_minutes(due_at)} + ATTR_DUE_IN: due_in_minutes(due_at)} self.info.append(bus_data) if not self.info: diff --git a/homeassistant/components/sensor/dweet.py b/homeassistant/components/sensor/dweet.py index c049368153c..157f366c0c4 100644 --- a/homeassistant/components/sensor/dweet.py +++ b/homeassistant/components/sensor/dweet.py @@ -10,12 +10,11 @@ from datetime import timedelta import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN, CONF_UNIT_OF_MEASUREMENT) -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle REQUIREMENTS = ['dweepy==0.3.0'] @@ -25,7 +24,7 @@ CONF_DEVICE = 'device' DEFAULT_NAME = 'Dweet.io Sensor' -MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60) +SCAN_INTERVAL = timedelta(minutes=1) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DEVICE): cv.string, @@ -109,7 +108,6 @@ class DweetData(object): self._device = device self.data = None - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the latest data from Dweet.io.""" import dweepy diff --git a/homeassistant/components/sensor/ebox.py b/homeassistant/components/sensor/ebox.py index 3cfa5ef9ff4..27d4bdd2f5a 100644 --- a/homeassistant/components/sensor/ebox.py +++ b/homeassistant/components/sensor/ebox.py @@ -12,13 +12,12 @@ from datetime import timedelta import requests import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_USERNAME, CONF_PASSWORD, CONF_NAME, CONF_MONITORED_VARIABLES) from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle -import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['pyebox==0.1.0'] @@ -32,35 +31,25 @@ PERCENT = '%' # type: str DEFAULT_NAME = 'EBox' REQUESTS_TIMEOUT = 15 -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5) +SCAN_INTERVAL = timedelta(minutes=5) SENSOR_TYPES = { - 'usage': ['Usage', - PERCENT, 'mdi:percent'], - 'balance': ['Balance', - PRICE, 'mdi:square-inc-cash'], - 'limit': ['Data limit', - GIGABITS, 'mdi:download'], - 'days_left': ['Days left', - DAYS, 'mdi:calendar-today'], - 'before_offpeak_download': ['Download before offpeak', - GIGABITS, 'mdi:download'], - 'before_offpeak_upload': ['Upload before offpeak', - GIGABITS, 'mdi:upload'], - 'before_offpeak_total': ['Total before offpeak', - GIGABITS, 'mdi:download'], - 'offpeak_download': ['Offpeak download', - GIGABITS, 'mdi:download'], - 'offpeak_upload': ['Offpeak Upload', - GIGABITS, 'mdi:upload'], - 'offpeak_total': ['Offpeak Total', - GIGABITS, 'mdi:download'], - 'download': ['Download', - GIGABITS, 'mdi:download'], - 'upload': ['Upload', - GIGABITS, 'mdi:upload'], - 'total': ['Total', - GIGABITS, 'mdi:download'], + 'usage': ['Usage', PERCENT, 'mdi:percent'], + 'balance': ['Balance', PRICE, 'mdi:square-inc-cash'], + 'limit': ['Data limit', GIGABITS, 'mdi:download'], + 'days_left': ['Days left', DAYS, 'mdi:calendar-today'], + 'before_offpeak_download': + ['Download before offpeak', GIGABITS, 'mdi:download'], + 'before_offpeak_upload': + ['Upload before offpeak', GIGABITS, 'mdi:upload'], + 'before_offpeak_total': + ['Total before offpeak', GIGABITS, 'mdi:download'], + 'offpeak_download': ['Offpeak download', GIGABITS, 'mdi:download'], + 'offpeak_upload': ['Offpeak Upload', GIGABITS, 'mdi:upload'], + 'offpeak_total': ['Offpeak Total', GIGABITS, 'mdi:download'], + 'download': ['Download', GIGABITS, 'mdi:download'], + 'upload': ['Upload', GIGABITS, 'mdi:upload'], + 'total': ['Total', GIGABITS, 'mdi:download'], } PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ @@ -142,7 +131,6 @@ class EBoxData(object): self.client = EboxClient(username, password, REQUESTS_TIMEOUT) self.data = {} - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the latest data from Ebox.""" from pyebox.client import PyEboxError @@ -151,5 +139,4 @@ class EBoxData(object): except PyEboxError as exp: _LOGGER.error("Error on receive last EBox data: %s", exp) return - # Update data self.data = self.client.get_data() diff --git a/homeassistant/components/sensor/ecobee.py b/homeassistant/components/sensor/ecobee.py index 25a363680c4..a0c6f7a92e4 100644 --- a/homeassistant/components/sensor/ecobee.py +++ b/homeassistant/components/sensor/ecobee.py @@ -9,13 +9,14 @@ from homeassistant.const import TEMP_FAHRENHEIT from homeassistant.helpers.entity import Entity DEPENDENCIES = ['ecobee'] + +ECOBEE_CONFIG_FILE = 'ecobee.conf' + SENSOR_TYPES = { 'temperature': ['Temperature', TEMP_FAHRENHEIT], 'humidity': ['Humidity', '%'] } -ECOBEE_CONFIG_FILE = 'ecobee.conf' - def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Ecobee sensors.""" @@ -31,7 +32,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): dev.append(EcobeeSensor(sensor['name'], item['type'], index)) - add_devices(dev) + add_devices(dev, True) class EcobeeSensor(Entity): @@ -39,13 +40,12 @@ class EcobeeSensor(Entity): def __init__(self, sensor_name, sensor_type, sensor_index): """Initialize the sensor.""" - self._name = sensor_name + ' ' + SENSOR_TYPES[sensor_type][0] + self._name = '{} {}'.format(sensor_name, SENSOR_TYPES[sensor_type][0]) self.sensor_name = sensor_name self.type = sensor_type self.index = sensor_index self._state = None self._unit_of_measurement = SENSOR_TYPES[sensor_type][1] - self.update() @property def name(self): diff --git a/homeassistant/components/sensor/hddtemp.py b/homeassistant/components/sensor/hddtemp.py index b7ba91ba94a..87647f4d16c 100644 --- a/homeassistant/components/sensor/hddtemp.py +++ b/homeassistant/components/sensor/hddtemp.py @@ -10,13 +10,12 @@ from telnetlib import Telnet import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_NAME, CONF_HOST, CONF_PORT, TEMP_CELSIUS, TEMP_FAHRENHEIT, STATE_UNKNOWN) -import homeassistant.helpers.config_validation as cv -from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) @@ -28,7 +27,7 @@ DEFAULT_PORT = 7634 DEFAULT_NAME = 'HD Temperature' DEFAULT_TIMEOUT = 5 -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=1) +SCAN_INTERVAL = timedelta(minutes=1) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string, @@ -50,7 +49,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): _LOGGER.error("Unable to fetch the data from %s:%s", host, port) return False - add_devices([HddTempSensor(name, hddtemp)]) + add_devices([HddTempSensor(name, hddtemp)], True) class HddTempSensor(Entity): @@ -62,7 +61,6 @@ class HddTempSensor(Entity): self._name = name self._state = False self._details = None - self.update() @property def name(self): @@ -77,7 +75,7 @@ class HddTempSensor(Entity): @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" - if self.details[4] == 'C': + if self._details[4] == 'C': return TEMP_CELSIUS else: return TEMP_FAHRENHEIT @@ -86,8 +84,8 @@ class HddTempSensor(Entity): def device_state_attributes(self): """Return the state attributes of the sensor.""" return { - ATTR_DEVICE: self.details[1], - ATTR_MODEL: self.details[2], + ATTR_DEVICE: self._details[1], + ATTR_MODEL: self._details[2], } def update(self): @@ -95,8 +93,8 @@ class HddTempSensor(Entity): self.hddtemp.update() if self.hddtemp.data is not None: - self.details = self.hddtemp.data.split('|') - self._state = self.details[3] + self._details = self.hddtemp.data.split('|') + self._state = self._details[3] else: self._state = STATE_UNKNOWN @@ -110,9 +108,8 @@ class HddTempData(object): self.port = port self.data = None - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): - """Get the latest data from hhtemp running as daemon.""" + """Get the latest data from HDDTemp running as daemon.""" try: connection = Telnet( host=self.host, port=self.port, timeout=DEFAULT_TIMEOUT) diff --git a/homeassistant/components/sensor/mold_indicator.py b/homeassistant/components/sensor/mold_indicator.py index b668b68005c..4b1b740093e 100644 --- a/homeassistant/components/sensor/mold_indicator.py +++ b/homeassistant/components/sensor/mold_indicator.py @@ -52,7 +52,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): add_devices([MoldIndicator( hass, name, indoor_temp_sensor, outdoor_temp_sensor, - indoor_humidity_sensor, calib_factor)]) + indoor_humidity_sensor, calib_factor)], True) class MoldIndicator(Entity): @@ -94,8 +94,6 @@ class MoldIndicator(Entity): if indoor_hum: self._indoor_hum = MoldIndicator._update_hum_sensor(indoor_hum) - self.update() - @staticmethod def _update_temp_sensor(state): """Parse temperature sensor value.""" diff --git a/homeassistant/components/sensor/pi_hole.py b/homeassistant/components/sensor/pi_hole.py index 1d63aacff11..c75d2387413 100644 --- a/homeassistant/components/sensor/pi_hole.py +++ b/homeassistant/components/sensor/pi_hole.py @@ -10,12 +10,11 @@ from datetime import timedelta import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_NAME, CONF_HOST, CONF_SSL, CONF_VERIFY_SSL, CONF_MONITORED_CONDITIONS) -import homeassistant.helpers.config_validation as cv -from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) _ENDPOINT = '/admin/api.php' @@ -30,7 +29,7 @@ DEFAULT_NAME = 'Pi-Hole' DEFAULT_SSL = False DEFAULT_VERIFY_SSL = True -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5) +SCAN_INTERVAL = timedelta(minutes=5) MONITORED_CONDITIONS = { 'dns_queries_today': ['DNS Queries Today', @@ -67,7 +66,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): sensors = [PiHoleSensor(hass, api, name, condition) for condition in config[CONF_MONITORED_CONDITIONS]] - add_devices(sensors) + add_devices(sensors, True) class PiHoleSensor(Entity): @@ -134,7 +133,6 @@ class PiHoleAPI(object): self.update() - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the latest data from the Pi-Hole.""" try: diff --git a/homeassistant/components/sensor/waqi.py b/homeassistant/components/sensor/waqi.py index 3b8e541143d..6d556c8232c 100644 --- a/homeassistant/components/sensor/waqi.py +++ b/homeassistant/components/sensor/waqi.py @@ -9,12 +9,11 @@ from datetime import timedelta import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.const import ( - ATTR_ATTRIBUTION, ATTR_TIME, ATTR_TEMPERATURE, STATE_UNKNOWN) -from homeassistant.helpers import config_validation as cv + ATTR_ATTRIBUTION, ATTR_TIME, ATTR_TEMPERATURE, STATE_UNKNOWN, CONF_TOKEN) from homeassistant.helpers.config_validation import PLATFORM_SCHEMA from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle REQUIREMENTS = ['pwaqi==3.0'] @@ -32,7 +31,6 @@ ATTRIBUTION = 'Data provided by the World Air Quality Index project' CONF_LOCATIONS = 'locations' CONF_STATIONS = 'stations' -CONF_API_TOKEN = 'token' MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=10) @@ -42,7 +40,7 @@ SENSOR_TYPES = { PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_STATIONS): cv.ensure_list, - vol.Required(CONF_API_TOKEN): cv.string, + vol.Required(CONF_TOKEN): cv.string, vol.Required(CONF_LOCATIONS): cv.ensure_list, }) @@ -51,10 +49,12 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the requested World Air Quality Index locations.""" import pwaqi - dev = [] - token = config.get(CONF_API_TOKEN) + token = config.get(CONF_TOKEN) station_filter = config.get(CONF_STATIONS) - for location_name in config.get(CONF_LOCATIONS): + locations = config.get(CONF_LOCATIONS) + + dev = [] + for location_name in locations: station_ids = pwaqi.findStationCodesByCity(location_name, token) _LOGGER.info("The following stations were returned: %s", station_ids) for station in station_ids: @@ -63,7 +63,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): (waqi_sensor.station_name in station_filter): dev.append(WaqiSensor(WaqiData(station, token), station)) - add_devices(dev) + print("#### Locations", locations) + print("### Stations", station_filter) + add_devices(dev, True) class WaqiSensor(Entity): @@ -74,7 +76,6 @@ class WaqiSensor(Entity): self.data = data self._station_id = station_id self._details = None - self.update() @property def name(self): @@ -156,7 +157,6 @@ class WaqiData(object): self._token = token self.data = None - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the data from World Air Quality Index and updates the states.""" import pwaqi diff --git a/homeassistant/components/sensor/yahoo_finance.py b/homeassistant/components/sensor/yahoo_finance.py index 90b388433dd..8c2cfd9923f 100644 --- a/homeassistant/components/sensor/yahoo_finance.py +++ b/homeassistant/components/sensor/yahoo_finance.py @@ -9,11 +9,10 @@ from datetime import timedelta import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ATTR_ATTRIBUTION from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle -import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['yahoo-finance==1.4.0'] @@ -31,7 +30,7 @@ DEFAULT_SYMBOL = 'YHOO' ICON = 'mdi:currency-usd' -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5) +SCAN_INTERVAL = timedelta(minutes=5) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_SYMBOLS, default=[DEFAULT_SYMBOL]): @@ -53,7 +52,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): data = YahooFinanceData(symbol) dev.append(YahooFinanceSensor(data, symbol)) - add_devices(dev) + add_devices(dev, True) class YahooFinanceSensor(Entity): @@ -66,7 +65,6 @@ class YahooFinanceSensor(Entity): self._symbol = symbol self._state = None self._unit_of_measurement = None - self.update() @property def name(self): @@ -120,7 +118,6 @@ class YahooFinanceData(object): self.prev_close = None self.stock = Share(self._symbol) - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the latest data and updates the states.""" self.stock.refresh()