Skip to content

Commit

Permalink
Add spider power plug component (#15682)
Browse files Browse the repository at this point in the history
* Add spider power plug component

* rounding down the numbers

* ability to throttle the API

* updated to the lastest api

* resolved an issue within the API
  • Loading branch information
peternijssen authored and awarecan committed Jul 27, 2018
1 parent e30510a commit 33f3e72
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 20 deletions.
15 changes: 1 addition & 14 deletions homeassistant/components/climate/spider.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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)
19 changes: 14 additions & 5 deletions homeassistant/components/spider.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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:
Expand Down
77 changes: 77 additions & 0 deletions homeassistant/components/switch/spider.py
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 33f3e72

Please sign in to comment.