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