Clean up two year old entity migration from Tuya (#103003)

pull/103022/head
Franck Nijhof 2023-10-29 14:47:24 +01:00 committed by GitHub
parent 8a87ea5506
commit 59f238b9a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 84 deletions

View File

@ -14,12 +14,10 @@ from tuya_iot import (
TuyaOpenMQ,
)
from homeassistant.components.light import DOMAIN as LIGHT_DOMAIN
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.dispatcher import dispatcher_send
from .const import (
@ -37,7 +35,6 @@ from .const import (
PLATFORMS,
TUYA_DISCOVERY_NEW,
TUYA_HA_SIGNAL_UPDATE_ENTITY,
DPCode,
)
@ -108,9 +105,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await hass.async_add_executor_job(home_manager.update_device_cache)
await cleanup_device_registry(hass, device_manager)
# Migrate old unique_ids to the new format
async_migrate_entities_unique_ids(hass, entry, device_manager)
# Register known device IDs
device_registry = dr.async_get(hass)
for device in device_manager.device_map.values():
@ -139,83 +133,6 @@ async def cleanup_device_registry(
break
@callback
def async_migrate_entities_unique_ids(
hass: HomeAssistant, config_entry: ConfigEntry, device_manager: TuyaDeviceManager
) -> None:
"""Migrate unique_ids in the entity registry to the new format."""
entity_registry = er.async_get(hass)
registry_entries = er.async_entries_for_config_entry(
entity_registry, config_entry.entry_id
)
light_entries = {
entry.unique_id: entry
for entry in registry_entries
if entry.domain == LIGHT_DOMAIN
}
switch_entries = {
entry.unique_id: entry
for entry in registry_entries
if entry.domain == SWITCH_DOMAIN
}
for device in device_manager.device_map.values():
# Old lights where in `tuya.{device_id}` format, now the DPCode is added.
#
# If the device is a previously supported light category and still has
# the old format for the unique ID, migrate it to the new format.
#
# Previously only devices providing the SWITCH_LED DPCode were supported,
# thus this can be added to those existing IDs.
#
# `tuya.{device_id}` -> `tuya.{device_id}{SWITCH_LED}`
if (
device.category in ("dc", "dd", "dj", "fs", "fwl", "jsq", "xdd", "xxj")
and (entry := light_entries.get(f"tuya.{device.id}"))
and f"tuya.{device.id}{DPCode.SWITCH_LED}" not in light_entries
):
entity_registry.async_update_entity(
entry.entity_id, new_unique_id=f"tuya.{device.id}{DPCode.SWITCH_LED}"
)
# Old switches has different formats for the unique ID, but is mappable.
#
# If the device is a previously supported switch category and still has
# the old format for the unique ID, migrate it to the new format.
#
# `tuya.{device_id}` -> `tuya.{device_id}{SWITCH}`
# `tuya.{device_id}_1` -> `tuya.{device_id}{SWITCH_1}`
# ...
# `tuya.{device_id}_6` -> `tuya.{device_id}{SWITCH_6}`
# `tuya.{device_id}_usb1` -> `tuya.{device_id}{SWITCH_USB1}`
# ...
# `tuya.{device_id}_usb6` -> `tuya.{device_id}{SWITCH_USB6}`
#
# In all other cases, the unique ID is not changed.
if device.category in ("bh", "cwysj", "cz", "dlq", "kg", "kj", "pc", "xxj"):
for postfix, dpcode in (
("", DPCode.SWITCH),
("_1", DPCode.SWITCH_1),
("_2", DPCode.SWITCH_2),
("_3", DPCode.SWITCH_3),
("_4", DPCode.SWITCH_4),
("_5", DPCode.SWITCH_5),
("_6", DPCode.SWITCH_6),
("_usb1", DPCode.SWITCH_USB1),
("_usb2", DPCode.SWITCH_USB2),
("_usb3", DPCode.SWITCH_USB3),
("_usb4", DPCode.SWITCH_USB4),
("_usb5", DPCode.SWITCH_USB5),
("_usb6", DPCode.SWITCH_USB6),
):
if (
entry := switch_entries.get(f"tuya.{device.id}{postfix}")
) and f"tuya.{device.id}{dpcode}" not in switch_entries:
entity_registry.async_update_entity(
entry.entity_id, new_unique_id=f"tuya.{device.id}{dpcode}"
)
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unloading the Tuya platforms."""
unload = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)