Ensure all devices show up in Tuya (#58280)
This commit is contained in:
parent
23e362faf3
commit
a4641a91ff
1 changed files with 15 additions and 7 deletions
|
@ -16,7 +16,7 @@ from tuya_iot import (
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant, callback
|
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 homeassistant.helpers.dispatcher import dispatcher_send
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
|
@ -116,7 +116,15 @@ async def _init_tuya_sdk(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
await cleanup_device_registry(hass, device_manager)
|
await cleanup_device_registry(hass, device_manager)
|
||||||
|
|
||||||
# Register known device IDs
|
# Register known device IDs
|
||||||
|
device_registry = dr.async_get(hass)
|
||||||
for device in device_manager.device_map.values():
|
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)
|
device_ids.add(device.id)
|
||||||
|
|
||||||
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
||||||
|
@ -127,11 +135,11 @@ async def cleanup_device_registry(
|
||||||
hass: HomeAssistant, device_manager: TuyaDeviceManager
|
hass: HomeAssistant, device_manager: TuyaDeviceManager
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Remove deleted device registry entry if there are no remaining entities."""
|
"""Remove deleted device registry entry if there are no remaining entities."""
|
||||||
device_registry_object = device_registry.async_get(hass)
|
device_registry = dr.async_get(hass)
|
||||||
for dev_id, device_entry in list(device_registry_object.devices.items()):
|
for dev_id, device_entry in list(device_registry.devices.items()):
|
||||||
for item in device_entry.identifiers:
|
for item in device_entry.identifiers:
|
||||||
if DOMAIN == item[0] and item[1] not in device_manager.device_map:
|
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
|
break
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,10 +206,10 @@ class DeviceListener(TuyaDeviceListener):
|
||||||
def async_remove_device(self, device_id: str) -> None:
|
def async_remove_device(self, device_id: str) -> None:
|
||||||
"""Remove device from Home Assistant."""
|
"""Remove device from Home Assistant."""
|
||||||
_LOGGER.debug("Remove device: %s", device_id)
|
_LOGGER.debug("Remove device: %s", device_id)
|
||||||
device_registry_object = device_registry.async_get(self.hass)
|
device_registry = dr.async_get(self.hass)
|
||||||
device_entry = device_registry_object.async_get_device(
|
device_entry = device_registry.async_get_device(
|
||||||
identifiers={(DOMAIN, device_id)}
|
identifiers={(DOMAIN, device_id)}
|
||||||
)
|
)
|
||||||
if device_entry is not None:
|
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)
|
self.device_ids.discard(device_id)
|
||||||
|
|
Loading…
Add table
Reference in a new issue