mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
Support multiple deCONZ gateways (#22449)
* Store gateways inside a dict in deconz domain * Make reachable events gateway specific * Gateway shall always exist * Adapt new device signalling to support multiple gateways * Services follow gateway master * Working on unload entry * Make unload and master handover work Improve tests for init * Fix config flow * Fix linting * Clean up init tests * Clean up hassio discovery to fit with the rest * Store gateways inside a dict in deconz domain * Make reachable events gateway specific * Gateway shall always exist * Adapt new device signalling to support multiple gateways * Services follow gateway master * Working on unload entry * Make unload and master handover work Improve tests for init * Fix config flow * Fix linting * Clean up init tests * Clean up hassio discovery to fit with the rest * Add support for services to specify bridgeid
This commit is contained in:
committed by
Jason Hu
parent
b9ec623ad9
commit
b50afec5f1
@@ -8,10 +8,9 @@ from homeassistant.core import callback
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
import homeassistant.util.color as color_util
|
||||
|
||||
from .const import (
|
||||
CONF_ALLOW_DECONZ_GROUPS, DOMAIN as DECONZ_DOMAIN, COVER_TYPES, NEW_GROUP,
|
||||
NEW_LIGHT, SWITCH_TYPES)
|
||||
from .const import COVER_TYPES, NEW_GROUP, NEW_LIGHT, SWITCH_TYPES
|
||||
from .deconz_device import DeconzDevice
|
||||
from .gateway import get_gateway_from_config_entry
|
||||
|
||||
DEPENDENCIES = ['deconz']
|
||||
|
||||
@@ -24,32 +23,35 @@ async def async_setup_platform(
|
||||
|
||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
"""Set up the deCONZ lights and groups from a config entry."""
|
||||
gateway = hass.data[DECONZ_DOMAIN]
|
||||
gateway = get_gateway_from_config_entry(hass, config_entry)
|
||||
|
||||
@callback
|
||||
def async_add_light(lights):
|
||||
"""Add light from deCONZ."""
|
||||
entities = []
|
||||
|
||||
for light in lights:
|
||||
if light.type not in COVER_TYPES + SWITCH_TYPES:
|
||||
entities.append(DeconzLight(light, gateway))
|
||||
|
||||
async_add_entities(entities, True)
|
||||
|
||||
gateway.listeners.append(
|
||||
async_dispatcher_connect(hass, NEW_LIGHT, async_add_light))
|
||||
gateway.listeners.append(async_dispatcher_connect(
|
||||
hass, gateway.async_event_new_device(NEW_LIGHT), async_add_light))
|
||||
|
||||
@callback
|
||||
def async_add_group(groups):
|
||||
"""Add group from deCONZ."""
|
||||
entities = []
|
||||
allow_group = config_entry.data.get(CONF_ALLOW_DECONZ_GROUPS, True)
|
||||
|
||||
for group in groups:
|
||||
if group.lights and allow_group:
|
||||
if group.lights and gateway.allow_deconz_groups:
|
||||
entities.append(DeconzLight(group, gateway))
|
||||
|
||||
async_add_entities(entities, True)
|
||||
|
||||
gateway.listeners.append(
|
||||
async_dispatcher_connect(hass, NEW_GROUP, async_add_group))
|
||||
gateway.listeners.append(async_dispatcher_connect(
|
||||
hass, gateway.async_event_new_device(NEW_GROUP), async_add_group))
|
||||
|
||||
async_add_light(gateway.api.lights.values())
|
||||
async_add_group(gateway.api.groups.values())
|
||||
|
||||
Reference in New Issue
Block a user