diff --git a/homeassistant/components/climate/spider.py b/homeassistant/components/climate/spider.py index 9a8f7dd7fbd104..a6916b22a25aa6 100644 --- a/homeassistant/components/climate/spider.py +++ b/homeassistant/components/climate/spider.py @@ -48,7 +48,6 @@ def __init__(self, api, thermostat): """Initialize the thermostat.""" self.api = api self.thermostat = thermostat - self.master = self.thermostat.has_operation_mode @property def supported_features(self): @@ -125,16 +124,4 @@ def set_operation_mode(self, operation_mode): def update(self): """Get the latest data.""" - try: - # Only let the master thermostat refresh - # and let the others use the cache - thermostats = self.api.get_thermostats( - force_refresh=self.master) - for thermostat in thermostats: - if thermostat.id == self.unique_id: - self.thermostat = thermostat - break - - except StopIteration: - _LOGGER.error("No data from the Spider API") - return + self.thermostat = self.api.get_thermostat(self.unique_id) diff --git a/homeassistant/components/spider.py b/homeassistant/components/spider.py index 10dbd630b7551d..359aa029794fc7 100644 --- a/homeassistant/components/spider.py +++ b/homeassistant/components/spider.py @@ -4,28 +4,35 @@ For more details about this component, please refer to the documentation at https://home-assistant.io/components/spider/ """ +from datetime import timedelta import logging import voluptuous as vol -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.discovery import load_platform -REQUIREMENTS = ['spiderpy==1.0.7'] +REQUIREMENTS = ['spiderpy==1.1.0'] _LOGGER = logging.getLogger(__name__) DOMAIN = 'spider' SPIDER_COMPONENTS = [ - 'climate' + 'climate', + 'switch' ] +SCAN_INTERVAL = timedelta(seconds=120) + CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_USERNAME): cv.string, + vol.Optional(CONF_SCAN_INTERVAL, default=SCAN_INTERVAL): + cv.time_period, }) }, extra=vol.ALLOW_EXTRA) @@ -37,13 +44,15 @@ def setup(hass, config): username = config[DOMAIN][CONF_USERNAME] password = config[DOMAIN][CONF_PASSWORD] + refresh_rate = config[DOMAIN][CONF_SCAN_INTERVAL] try: - api = SpiderApi(username, password) + api = SpiderApi(username, password, refresh_rate.total_seconds()) hass.data[DOMAIN] = { 'controller': api, - 'thermostats': api.get_thermostats() + 'thermostats': api.get_thermostats(), + 'power_plugs': api.get_power_plugs() } for component in SPIDER_COMPONENTS: diff --git a/homeassistant/components/switch/spider.py b/homeassistant/components/switch/spider.py new file mode 100644 index 00000000000000..94b7db8f1e5b2b --- /dev/null +++ b/homeassistant/components/switch/spider.py @@ -0,0 +1,77 @@ +""" +Support for Spider switches. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/switch.spider/ +""" + +import logging + +from homeassistant.components.spider import DOMAIN as SPIDER_DOMAIN +from homeassistant.components.switch import SwitchDevice + +DEPENDENCIES = ['spider'] + +_LOGGER = logging.getLogger(__name__) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Set up the Spider thermostat.""" + if discovery_info is None: + return + + devices = [SpiderPowerPlug(hass.data[SPIDER_DOMAIN]['controller'], device) + for device in hass.data[SPIDER_DOMAIN]['power_plugs']] + + add_devices(devices, True) + + +class SpiderPowerPlug(SwitchDevice): + """Representation of a Spider Power Plug.""" + + def __init__(self, api, power_plug): + """Initialize the Vera device.""" + self.api = api + self.power_plug = power_plug + + @property + def unique_id(self): + """Return the ID of this switch.""" + return self.power_plug.id + + @property + def name(self): + """Return the name of the switch if any.""" + return self.power_plug.name + + @property + def current_power_w(self): + """Return the current power usage in W.""" + return round(self.power_plug.current_energy_consumption) + + @property + def today_energy_kwh(self): + """Return the current power usage in Kwh.""" + return round(self.power_plug.today_energy_consumption / 1000, 2) + + @property + def is_on(self): + """Return true if switch is on. Standby is on.""" + return self.power_plug.is_on + + @property + def available(self): + """Return true if switch is available.""" + return self.power_plug.is_available + + def turn_on(self, **kwargs): + """Turn device on.""" + self.power_plug.turn_on() + + def turn_off(self, **kwargs): + """Turn device off.""" + self.power_plug.turn_off() + + def update(self): + """Get the latest data.""" + self.power_plug = self.api.get_power_plug(self.unique_id) diff --git a/requirements_all.txt b/requirements_all.txt index 3d4b48398f9c1a..f20bff5767a11b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1282,7 +1282,7 @@ somecomfort==0.5.2 speedtest-cli==2.0.2 # homeassistant.components.spider -spiderpy==1.0.7 +spiderpy==1.1.0 # homeassistant.components.sensor.spotcrime spotcrime==1.0.3