Restore: migrate fastdotcom and speedtest to restore (#6149)

This commit is contained in:
Johann Kellerman 2017-02-22 04:10:09 +02:00 committed by Paulus Schoutsen
parent 15e8a22100
commit 11d3093a30
2 changed files with 26 additions and 37 deletions

View File

@ -4,15 +4,16 @@ Support for Fast.com internet speed testing sensor.
For more details about this platform, please refer to the documentation at For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.fastdotcom/ https://home-assistant.io/components/sensor.fastdotcom/
""" """
import asyncio
import logging import logging
import voluptuous as vol import voluptuous as vol
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.components import recorder
from homeassistant.components.sensor import (DOMAIN, PLATFORM_SCHEMA) from homeassistant.components.sensor import (DOMAIN, PLATFORM_SCHEMA)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.event import track_time_change from homeassistant.helpers.event import track_time_change
from homeassistant.helpers.restore_state import async_get_last_state
REQUIREMENTS = ['fastdotcom==0.0.1'] REQUIREMENTS = ['fastdotcom==0.0.1']
@ -80,24 +81,17 @@ class SpeedtestSensor(Entity):
"""Get the latest data and update the states.""" """Get the latest data and update the states."""
data = self.speedtest_client.data data = self.speedtest_client.data
if data is None: if data is None:
entity_id = 'sensor.fastcom_speedtest' return
states = recorder.get_model('States')
try: self._state = data['download']
last_state = recorder.execute(
recorder.query('States').filter( @asyncio.coroutine
(states.entity_id == entity_id) & def async_added_to_hass(self):
(states.last_changed == states.last_updated) & """Called when entity is about to be added to hass."""
(states.state != 'unknown') state = yield from async_get_last_state(self.hass, self.entity_id)
).order_by(states.state_id.desc()).limit(1)) if not state:
except TypeError: return
return self._state = state.state
except RuntimeError:
return
if not last_state:
return
self._state = last_state[0].state
else:
self._state = data['download']
class SpeedtestData(object): class SpeedtestData(object):

View File

@ -4,6 +4,7 @@ Support for Speedtest.net.
For more details about this platform, please refer to the documentation at For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.speedtest/ https://home-assistant.io/components/sensor.speedtest/
""" """
import asyncio
import logging import logging
import re import re
import sys import sys
@ -13,11 +14,11 @@ import voluptuous as vol
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.components import recorder
from homeassistant.components.sensor import (DOMAIN, PLATFORM_SCHEMA) from homeassistant.components.sensor import (DOMAIN, PLATFORM_SCHEMA)
from homeassistant.const import CONF_MONITORED_CONDITIONS from homeassistant.const import CONF_MONITORED_CONDITIONS
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.event import track_time_change from homeassistant.helpers.event import track_time_change
from homeassistant.helpers.restore_state import async_get_last_state
REQUIREMENTS = ['speedtest-cli==1.0.2'] REQUIREMENTS = ['speedtest-cli==1.0.2']
@ -106,29 +107,23 @@ class SpeedtestSensor(Entity):
"""Get the latest data and update the states.""" """Get the latest data and update the states."""
data = self.speedtest_client.data data = self.speedtest_client.data
if data is None: if data is None:
entity_id = 'sensor.speedtest_' + self._name.lower() return
states = recorder.get_model('States')
try: if self.type == 'ping':
last_state = recorder.execute(
recorder.query('States').filter(
(states.entity_id == entity_id) &
(states.last_changed == states.last_updated) &
(states.state != 'unknown')
).order_by(states.state_id.desc()).limit(1))
except TypeError:
return
except RuntimeError:
return
if not last_state:
return
self._state = last_state[0].state
elif self.type == 'ping':
self._state = data['ping'] self._state = data['ping']
elif self.type == 'download': elif self.type == 'download':
self._state = data['download'] self._state = data['download']
elif self.type == 'upload': elif self.type == 'upload':
self._state = data['upload'] self._state = data['upload']
@asyncio.coroutine
def async_added_to_hass(self):
"""Called when entity is about to be added to hass."""
state = yield from async_get_last_state(self.hass, self.entity_id)
if not state:
return
self._state = state.state
class SpeedtestData(object): class SpeedtestData(object):
"""Get the latest data from speedtest.net.""" """Get the latest data from speedtest.net."""