From 26ea4e41cbcc6825bdfcc94b0e0df23450350227 Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Tue, 10 May 2016 01:49:26 -0400 Subject: [PATCH] Bring back custom scan intervals and service for speedtest.net component (#1980) * Bring back the functionality that was removed in PR 1717. This includes the speedtest service and the ability to define the scan times in the configuration file. Restore default functionality of 1 scan per hour on the hour. * remove unnecessary code. --- homeassistant/components/sensor/speedtest.py | 28 +++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/sensor/speedtest.py b/homeassistant/components/sensor/speedtest.py index 8898259754a..b781cdbad68 100644 --- a/homeassistant/components/sensor/speedtest.py +++ b/homeassistant/components/sensor/speedtest.py @@ -7,11 +7,12 @@ https://home-assistant.io/components/sensor.speedtest/ import logging import re import sys -from datetime import timedelta from subprocess import check_output +import homeassistant.util.dt as dt_util +from homeassistant.components.sensor import DOMAIN from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle +from homeassistant.helpers.event import track_time_change REQUIREMENTS = ['speedtest-cli==0.3.4'] _LOGGER = logging.getLogger(__name__) @@ -30,13 +31,10 @@ SENSOR_TYPES = { 'upload': ['Upload', 'Mbit/s'], } -# Return cached results if last scan was less then this time ago -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15) - def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Speedtest sensor.""" - data = SpeedtestData() + data = SpeedtestData(hass, config) dev = [] for sensor in config[CONF_MONITORED_CONDITIONS]: if sensor not in SENSOR_TYPES: @@ -46,6 +44,14 @@ def setup_platform(hass, config, add_devices, discovery_info=None): add_devices(dev) + def update(call=None): + """Update service for manual updates.""" + data.update(dt_util.now()) + for sensor in dev: + sensor.update() + + hass.services.register(DOMAIN, 'update_speedtest', update) + # pylint: disable=too-few-public-methods class SpeedtestSensor(Entity): @@ -76,7 +82,6 @@ class SpeedtestSensor(Entity): def update(self): """Get the latest data and update the states.""" - self.speedtest_client.update() data = self.speedtest_client.data if data is None: return @@ -92,12 +97,15 @@ class SpeedtestSensor(Entity): class SpeedtestData(object): """Get the latest data from speedtest.net.""" - def __init__(self): + def __init__(self, hass, config): """Initialize the data object.""" self.data = None + track_time_change(hass, self.update, + minute=config.get(CONF_MINUTE, 0), + hour=config.get(CONF_HOUR, None), + day=config.get(CONF_DAY, None)) - @Throttle(MIN_TIME_BETWEEN_UPDATES) - def update(self): + def update(self, now): """Get the latest data from speedtest.net.""" import speedtest_cli