Ensure all devices show up in Tuya (#58280)

This commit is contained in:
Franck Nijhof 2021-10-23 15:00:53 +02:00 committed by GitHub
parent 23e362faf3
commit a4641a91ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -16,7 +16,7 @@ from tuya_iot import (
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.dispatcher import dispatcher_send
from .const import (
@ -116,7 +116,15 @@ async def _init_tuya_sdk(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await cleanup_device_registry(hass, device_manager)
# Register known device IDs
device_registry = dr.async_get(hass)
for device in device_manager.device_map.values():
device_registry.async_get_or_create(
config_entry_id=entry.entry_id,
identifiers={(DOMAIN, device.id)},
manufacturer="Tuya",
name=device.name,
model=f"{device.product_name} (unsupported)",
)
device_ids.add(device.id)
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
@ -127,11 +135,11 @@ async def cleanup_device_registry(
hass: HomeAssistant, device_manager: TuyaDeviceManager
) -> None:
"""Remove deleted device registry entry if there are no remaining entities."""
device_registry_object = device_registry.async_get(hass)
for dev_id, device_entry in list(device_registry_object.devices.items()):
device_registry = dr.async_get(hass)
for dev_id, device_entry in list(device_registry.devices.items()):
for item in device_entry.identifiers:
if DOMAIN == item[0] and item[1] not in device_manager.device_map:
device_registry_object.async_remove_device(dev_id)
device_registry.async_remove_device(dev_id)
break
@ -198,10 +206,10 @@ class DeviceListener(TuyaDeviceListener):
def async_remove_device(self, device_id: str) -> None:
"""Remove device from Home Assistant."""
_LOGGER.debug("Remove device: %s", device_id)
device_registry_object = device_registry.async_get(self.hass)
device_entry = device_registry_object.async_get_device(
device_registry = dr.async_get(self.hass)
device_entry = device_registry.async_get_device(
identifiers={(DOMAIN, device_id)}
)
if device_entry is not None:
device_registry_object.async_remove_device(device_entry.id)
device_registry.async_remove_device(device_entry.id)
self.device_ids.discard(device_id)