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
|
@ -170,6 +170,9 @@ omit =
|
|||
homeassistant/components/notify/twilio_sms.py
|
||||
homeassistant/components/notify/twilio_call.py
|
||||
|
||||
homeassistant/components/velux.py
|
||||
homeassistant/components/*/velux.py
|
||||
|
||||
homeassistant/components/vera.py
|
||||
homeassistant/components/*/vera.py
|
||||
|
||||
|
|
55
homeassistant/components/scene/velux.py
Normal file
55
homeassistant/components/scene/velux.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
"""
|
||||
Support for VELUX scenes.
|
||||
|
||||
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/
|
||||
"""
|
||||
from homeassistant.components.scene import Scene
|
||||
from homeassistant.components.velux import _LOGGER, DATA_VELUX
|
||||
|
||||
|
||||
DEPENDENCIES = ['velux']
|
||||
|
||||
|
||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||
"""Set up the scenes for velux platform."""
|
||||
if DATA_VELUX not in hass.data \
|
||||
or not hass.data[DATA_VELUX].initialized:
|
||||
return False
|
||||
|
||||
entities = []
|
||||
for scene in hass.data[DATA_VELUX].pyvlx.scenes:
|
||||
entities.append(VeluxScene(hass, scene))
|
||||
add_devices(entities)
|
||||
return True
|
||||
|
||||
|
||||
class VeluxScene(Scene):
|
||||
"""Representation of a velux scene."""
|
||||
|
||||
def __init__(self, hass, scene):
|
||||
"""Init velux scene."""
|
||||
_LOGGER.info("Adding VELUX scene: %s", scene)
|
||||
self.hass = hass
|
||||
self.scene = scene
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
"""Return the name of the scene."""
|
||||
return self.scene.name
|
||||
|
||||
@property
|
||||
def should_poll(self):
|
||||
"""Return that polling is not necessary."""
|
||||
return False
|
||||
|
||||
@property
|
||||
def is_on(self):
|
||||
"""There is no way of detecting if a scene is active (yet)."""
|
||||
return False
|
||||
|
||||
def activate(self, **kwargs):
|
||||
"""Activate the scene."""
|
||||
self.hass.async_add_job(self.scene.run())
|
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
|
|
@ -770,6 +770,9 @@ pyunifi==2.13
|
|||
# homeassistant.components.vera
|
||||
pyvera==0.2.33
|
||||
|
||||
# homeassistant.components.velux
|
||||
pyvlx==0.1.3
|
||||
|
||||
# homeassistant.components.notify.html5
|
||||
pywebpush==1.0.5
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue