Optimized setup_entities by regrouping platforms
This commit is contained in:
@@ -259,24 +259,28 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
|
|||||||
res = await tuya_api.async_get_devices_list()
|
res = await tuya_api.async_get_devices_list()
|
||||||
hass.data[DOMAIN][DATA_CLOUD] = tuya_api
|
hass.data[DOMAIN][DATA_CLOUD] = tuya_api
|
||||||
|
|
||||||
async def setup_entities(dev_id):
|
async def setup_entities(device_ids):
|
||||||
dev_entry = entry.data[CONF_DEVICES][dev_id]
|
platforms = set()
|
||||||
device = TuyaDevice(hass, entry, dev_id)
|
for dev_id in device_ids:
|
||||||
hass.data[DOMAIN][TUYA_DEVICES][dev_id] = device
|
entities = entry.data[CONF_DEVICES][dev_id][CONF_ENTITIES]
|
||||||
|
platforms = platforms.union(
|
||||||
|
set(entity[CONF_PLATFORM] for entity in entities)
|
||||||
|
)
|
||||||
|
hass.data[DOMAIN][TUYA_DEVICES][dev_id] = TuyaDevice(hass, entry, dev_id)
|
||||||
|
|
||||||
platforms = set(entity[CONF_PLATFORM] for entity in dev_entry[CONF_ENTITIES])
|
|
||||||
await asyncio.gather(
|
await asyncio.gather(
|
||||||
*[
|
*[
|
||||||
hass.config_entries.async_forward_entry_setup(entry, platform)
|
hass.config_entries.async_forward_entry_setup(entry, platform)
|
||||||
for platform in platforms
|
for platform in platforms
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
device.async_connect()
|
|
||||||
|
for dev_id in device_ids:
|
||||||
|
hass.data[DOMAIN][TUYA_DEVICES][dev_id].async_connect()
|
||||||
|
|
||||||
await async_remove_orphan_entities(hass, entry)
|
await async_remove_orphan_entities(hass, entry)
|
||||||
|
|
||||||
for dev_id in entry.data[CONF_DEVICES]:
|
hass.async_create_task(setup_entities(entry.data[CONF_DEVICES].keys()))
|
||||||
hass.async_create_task(setup_entities(dev_id))
|
|
||||||
|
|
||||||
unsub_listener = entry.add_update_listener(update_listener)
|
unsub_listener = entry.add_update_listener(update_listener)
|
||||||
hass.data[DOMAIN][entry.entry_id] = {UNSUB_LISTENER: unsub_listener}
|
hass.data[DOMAIN][entry.entry_id] = {UNSUB_LISTENER: unsub_listener}
|
||||||
|
Reference in New Issue
Block a user