Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disconnect velux on hass stop #26266

Merged
merged 15 commits into from Sep 17, 2019
30 changes: 21 additions & 9 deletions homeassistant/components/velux/__init__.py
@@ -1,11 +1,12 @@
"""Support for VELUX KLF 200 devices."""
import logging

import voluptuous as vol
from pyvlx import PyVLX
from pyvlx import PyVLXException

from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv
from homeassistant.const import CONF_HOST, CONF_PASSWORD
from homeassistant.const import CONF_HOST, CONF_PASSWORD, EVENT_HOMEASSISTANT_STOP

DOMAIN = "velux"
DATA_VELUX = "data_velux"
Expand All @@ -24,10 +25,9 @@

async def async_setup(hass, config):
"""Set up the velux component."""
from pyvlx import PyVLXException

try:
hass.data[DATA_VELUX] = VeluxModule(hass, config)
hass.data[DATA_VELUX] = VeluxModule(hass, config[DOMAIN])
hass.data[DATA_VELUX].setup()
await hass.data[DATA_VELUX].async_start()

except PyVLXException as ex:
Expand All @@ -44,15 +44,27 @@ async def async_setup(hass, config):
class VeluxModule:
"""Abstraction for velux component."""

def __init__(self, hass, config):
def __init__(self, hass, domain_config):
"""Initialize for velux component."""
from pyvlx import PyVLX
self.pyvlx = None
self._hass = hass
self._domain_config = domain_config

def setup(self):
"""Velux component setup."""

async def on_hass_stop(event):
"""Close connection when hass stops."""
_LOGGER.debug("Velux interface terminated")
await self.pyvlx.disconnect()

host = config[DOMAIN].get(CONF_HOST)
password = config[DOMAIN].get(CONF_PASSWORD)
self._hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, on_hass_stop)
host = self._domain_config.get(CONF_HOST)
password = self._domain_config.get(CONF_PASSWORD)
self.pyvlx = PyVLX(host=host, password=password)

async def async_start(self):
"""Start velux component."""
_LOGGER.debug("Velux interface started")
await self.pyvlx.load_scenes()
await self.pyvlx.load_nodes()