Do not call update() in constructor (#7917)

This commit is contained in:
Fabian Affolter 2017-06-05 21:28:13 +02:00 committed by GitHub
parent b1f538b622
commit 760138ac52
10 changed files with 60 additions and 91 deletions

View file

@ -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):

View file

@ -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:

View file

@ -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

View file

@ -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()

View file

@ -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):

View file

@ -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)

View file

@ -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."""

View file

@ -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:

View file

@ -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

View file

@ -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()