Decouple emulated hue from http server (#15530)

pull/15519/head
Paulus Schoutsen 2018-07-18 10:47:06 +02:00 committed by GitHub
parent 2781796d9c
commit 98722e10fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 32 additions and 26 deletions

View File

@ -6,6 +6,7 @@ https://home-assistant.io/components/emulated_hue/
""" """
import logging import logging
from aiohttp import web
import voluptuous as vol import voluptuous as vol
from homeassistant import util from homeassistant import util
@ -13,7 +14,6 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP,
) )
from homeassistant.components.http import REQUIREMENTS # NOQA from homeassistant.components.http import REQUIREMENTS # NOQA
from homeassistant.components.http import HomeAssistantHTTP
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.deprecation import get_deprecated from homeassistant.helpers.deprecation import get_deprecated
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -85,28 +85,17 @@ def setup(hass, yaml_config):
"""Activate the emulated_hue component.""" """Activate the emulated_hue component."""
config = Config(hass, yaml_config.get(DOMAIN, {})) config = Config(hass, yaml_config.get(DOMAIN, {}))
server = HomeAssistantHTTP( app = web.Application()
hass, app['hass'] = hass
server_host=config.host_ip_addr, handler = None
server_port=config.listen_port, server = None
api_password=None,
ssl_certificate=None,
ssl_peer_certificate=None,
ssl_key=None,
cors_origins=None,
use_x_forwarded_for=False,
trusted_proxies=[],
trusted_networks=[],
login_threshold=0,
is_ban_enabled=False
)
server.register_view(DescriptionXmlView(config)) DescriptionXmlView(config).register(app.router)
server.register_view(HueUsernameView) HueUsernameView().register(app.router)
server.register_view(HueAllLightsStateView(config)) HueAllLightsStateView(config).register(app.router)
server.register_view(HueOneLightStateView(config)) HueOneLightStateView(config).register(app.router)
server.register_view(HueOneLightChangeView(config)) HueOneLightChangeView(config).register(app.router)
server.register_view(HueGroupView(config)) HueGroupView(config).register(app.router)
upnp_listener = UPNPResponderThread( upnp_listener = UPNPResponderThread(
config.host_ip_addr, config.listen_port, config.host_ip_addr, config.listen_port,
@ -116,12 +105,29 @@ def setup(hass, yaml_config):
async def stop_emulated_hue_bridge(event): async def stop_emulated_hue_bridge(event):
"""Stop the emulated hue bridge.""" """Stop the emulated hue bridge."""
upnp_listener.stop() upnp_listener.stop()
await server.stop() if server:
server.close()
await server.wait_closed()
await app.shutdown()
if handler:
await handler.shutdown(10)
await app.cleanup()
async def start_emulated_hue_bridge(event): async def start_emulated_hue_bridge(event):
"""Start the emulated hue bridge.""" """Start the emulated hue bridge."""
upnp_listener.start() upnp_listener.start()
await server.start() nonlocal handler
nonlocal server
handler = app.make_handler(loop=hass.loop)
try:
server = await hass.loop.create_server(
handler, config.host_ip_addr, config.listen_port)
except OSError as error:
_LOGGER.error("Failed to create HTTP server at port %d: %s",
config.listen_port, error)
else:
hass.bus.async_listen_once( hass.bus.async_listen_once(
EVENT_HOMEASSISTANT_STOP, stop_emulated_hue_bridge) EVENT_HOMEASSISTANT_STOP, stop_emulated_hue_bridge)