New component to connect to VELUX KLF 200 Interface (#8203)
* New component to connect to VELUX KLF 200 Interface * Issue #8203: modifications as suggested by hound * Issue #8203: added entries to .coveragerc * moving velux/__init__p.y to velux.py * Issue #8203: Using hass.data for storing global object, updated docstrings * Issue #8203: validation of config, using standard approach for getting config values * Issue #8203: Exception handling if connection to velux component fails * Issue #8203: removed unused import * Issue #8203: Some minor changes within docstrings * Issue #8203: Some minor changes within docstrings * Issue #8203: added dependency for pyvlx to requirements_all.txt * Issue #8203: less broad exception * Issue #8203: increased version * Issue #8203: changed position of pyvlx within requirements_all.txt * Issue #8203: bumped version of pyvlx to 0.1.3 (better handling of retries when token expires) * reset pointer to home-assistant-polymer * Issue #8203: modifications as suggested by fabaff * hound *sigh*
This commit is contained in:
parent
3be0103259
commit
57c5ed33ee
4 changed files with 130 additions and 0 deletions
69
homeassistant/components/velux.py
Normal file
69
homeassistant/components/velux.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
"""
|
||||
Connects to VELUX KLF 200 interface.
|
||||
|
||||
For more details about this platform, please refer to the documentation at
|
||||
https://home-assistant.io/components/scene.velux/
|
||||
|
||||
"""
|
||||
|
||||
import logging
|
||||
import asyncio
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.helpers import discovery
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.const import (CONF_HOST, CONF_PASSWORD)
|
||||
|
||||
DOMAIN = "velux"
|
||||
DATA_VELUX = "data_velux"
|
||||
SUPPORTED_DOMAINS = ['scene']
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
REQUIREMENTS = ['pyvlx==0.1.3']
|
||||
|
||||
CONFIG_SCHEMA = vol.Schema({
|
||||
DOMAIN: vol.Schema({
|
||||
vol.Required(CONF_HOST): cv.string,
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
})
|
||||
}, extra=vol.ALLOW_EXTRA)
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def async_setup(hass, config):
|
||||
"""Set up the velux component."""
|
||||
from pyvlx import PyVLXException
|
||||
try:
|
||||
hass.data[DATA_VELUX] = VeluxModule(hass, config)
|
||||
yield from hass.data[DATA_VELUX].async_start()
|
||||
|
||||
except PyVLXException as ex:
|
||||
_LOGGER.exception("Can't connect to velux interface: %s", ex)
|
||||
return False
|
||||
|
||||
for component in SUPPORTED_DOMAINS:
|
||||
hass.async_add_job(
|
||||
discovery.async_load_platform(hass, component, DOMAIN, {}, config))
|
||||
return True
|
||||
|
||||
|
||||
class VeluxModule:
|
||||
"""Abstraction for velux component."""
|
||||
|
||||
def __init__(self, hass, config):
|
||||
"""Initialize for velux component."""
|
||||
from pyvlx import PyVLX
|
||||
self.initialized = False
|
||||
host = config[DOMAIN].get(CONF_HOST)
|
||||
password = config[DOMAIN].get(CONF_PASSWORD)
|
||||
self.pyvlx = PyVLX(
|
||||
host=host,
|
||||
password=password)
|
||||
self.hass = hass
|
||||
|
||||
@asyncio.coroutine
|
||||
def async_start(self):
|
||||
"""Start velux component."""
|
||||
yield from self.pyvlx.load_scenes()
|
||||
self.initialized = True
|
Loading…
Add table
Add a link
Reference in a new issue