diff --git a/.coveragerc b/.coveragerc index 4e912e9bb36..0d501e223f0 100644 --- a/.coveragerc +++ b/.coveragerc @@ -55,6 +55,7 @@ omit = homeassistant/components/sensor/temper.py homeassistant/components/sensor/time_date.py homeassistant/components/sensor/transmission.py + homeassistant/components/sensor/edimax.py homeassistant/components/switch/hikvisioncam.py homeassistant/components/switch/wemo.py homeassistant/components/thermostat/nest.py diff --git a/homeassistant/components/switch/edimax.py b/homeassistant/components/switch/edimax.py new file mode 100644 index 00000000000..171183900df --- /dev/null +++ b/homeassistant/components/switch/edimax.py @@ -0,0 +1,87 @@ +""" +homeassistant.components.switch.edimax +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Support for Edimax switches. +""" +import logging + +from homeassistant.helpers import validate_config +from homeassistant.components.switch import SwitchDevice, DOMAIN +from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD,\ + CONF_NAME + +# constants +DEFAULT_USERNAME = 'admin' +DEFAULT_PASSWORD = '1234' +DEVICE_DEFAULT_NAME = 'Edimax Smart Plug' +REQUIREMENTS = ['https://github.com/rkabadi/pyedimax/archive/master.zip'] + +# setup logger +_LOGGER = logging.getLogger(__name__) + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices_callback, discovery_info=None): + """ Find and return Edimax Smart Plugs. """ + try: + # pylint: disable=no-name-in-module, import-error + from pyedimax.smartplug import SmartPlug + except ImportError: + _LOGGER.error('Failed to import pyedimax') + return False + + # pylint: disable=global-statement + # check for required values in configuration file + if not validate_config({DOMAIN: config}, + {DOMAIN: [CONF_HOST]}, + _LOGGER): + return False + + host = config.get(CONF_HOST) + auth = (config.get(CONF_USERNAME, DEFAULT_USERNAME), + config.get(CONF_PASSWORD, DEFAULT_PASSWORD)) + name = config.get(CONF_NAME, DEVICE_DEFAULT_NAME) + + add_devices_callback([SmartPlugSwitch(SmartPlug(host, auth), name)]) + + +class SmartPlugSwitch(SwitchDevice): + """ Represents an Edimax Smart Plug switch within Home Assistant. """ + def __init__(self, smartplug, name): + self.smartplug = smartplug + self._name = name + + @property + def name(self): + """ Returns the name of the Smart Plug, if any. """ + return self._name + + @property + def current_power_mwh(self): + """ Current power usage in mwh. """ + try: + return float(self.smartplug.now_power) / 1000000.0 + except ValueError: + return None + + @property + def today_power_mw(self): + """ Today total power usage in mw. """ + try: + return float(self.smartplug.now_energy_day) / 1000.0 + except ValueError: + return None + + @property + def is_on(self): + """ True if switch is on. """ + return self.smartplug.state == 'ON' + + def turn_on(self, **kwargs): + """ Turns the switch on. """ + self.smartplug.state = 'ON' + + def turn_off(self): + """ Turns the switch off. """ + self.smartplug.state = 'OFF' diff --git a/requirements.txt b/requirements.txt index 54c0f5a29f4..42842212907 100644 --- a/requirements.txt +++ b/requirements.txt @@ -97,3 +97,6 @@ slacker>=0.6.8 # Temper sensors https://github.com/rkabadi/temper-python/archive/master.zip + +# PyEdimax +https://github.com/rkabadi/pyedimax/archive/master.zip