Decouple emulated hue from http server (#15530)
parent
2781796d9c
commit
98722e10fc
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue