mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 07:07:28 +00:00
Reolink clean device registry mac (#144554)
This commit is contained in:
parent
920d281d45
commit
9757009d8f
@ -23,7 +23,7 @@ from homeassistant.helpers import (
|
|||||||
device_registry as dr,
|
device_registry as dr,
|
||||||
entity_registry as er,
|
entity_registry as er,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.device_registry import format_mac
|
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, format_mac
|
||||||
from homeassistant.helpers.event import async_call_later
|
from homeassistant.helpers.event import async_call_later
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||||
@ -380,6 +380,14 @@ def migrate_entity_ids(
|
|||||||
if ch is None or is_chime:
|
if ch is None or is_chime:
|
||||||
continue # Do not consider the NVR itself or chimes
|
continue # Do not consider the NVR itself or chimes
|
||||||
|
|
||||||
|
# Check for wrongfully added MAC of the NVR/Hub to the camera
|
||||||
|
# Can be removed in HA 2025.12
|
||||||
|
host_connnection = (CONNECTION_NETWORK_MAC, host.api.mac_address)
|
||||||
|
if host_connnection in device.connections:
|
||||||
|
new_connections = device.connections.copy()
|
||||||
|
new_connections.remove(host_connnection)
|
||||||
|
device_reg.async_update_device(device.id, new_connections=new_connections)
|
||||||
|
|
||||||
ch_device_ids[device.id] = ch
|
ch_device_ids[device.id] = ch
|
||||||
if host.api.supported(ch, "UID") and device_uid[1] != host.api.camera_uid(ch):
|
if host.api.supported(ch, "UID") and device_uid[1] != host.api.camera_uid(ch):
|
||||||
if host.api.supported(None, "UID"):
|
if host.api.supported(None, "UID"):
|
||||||
|
@ -39,7 +39,7 @@ from homeassistant.helpers import (
|
|||||||
entity_registry as er,
|
entity_registry as er,
|
||||||
issue_registry as ir,
|
issue_registry as ir,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.device_registry import format_mac
|
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, format_mac
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from .conftest import (
|
from .conftest import (
|
||||||
@ -51,6 +51,7 @@ from .conftest import (
|
|||||||
TEST_HOST,
|
TEST_HOST,
|
||||||
TEST_HOST_MODEL,
|
TEST_HOST_MODEL,
|
||||||
TEST_MAC,
|
TEST_MAC,
|
||||||
|
TEST_MAC_CAM,
|
||||||
TEST_NVR_NAME,
|
TEST_NVR_NAME,
|
||||||
TEST_PORT,
|
TEST_PORT,
|
||||||
TEST_PRIVACY,
|
TEST_PRIVACY,
|
||||||
@ -614,6 +615,55 @@ async def test_migrate_with_already_existing_entity(
|
|||||||
assert entity_registry.async_get_entity_id(domain, DOMAIN, new_id)
|
assert entity_registry.async_get_entity_id(domain, DOMAIN, new_id)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_cleanup_mac_connection(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config_entry: MockConfigEntry,
|
||||||
|
reolink_connect: MagicMock,
|
||||||
|
entity_registry: er.EntityRegistry,
|
||||||
|
device_registry: dr.DeviceRegistry,
|
||||||
|
) -> None:
|
||||||
|
"""Test cleanup of the MAC of a IPC which was set to the MAC of the host."""
|
||||||
|
reolink_connect.channels = [0]
|
||||||
|
reolink_connect.baichuan.mac_address.return_value = None
|
||||||
|
entity_id = f"{TEST_UID}_{TEST_UID_CAM}_record_audio"
|
||||||
|
dev_id = f"{TEST_UID}_{TEST_UID_CAM}"
|
||||||
|
domain = Platform.SWITCH
|
||||||
|
|
||||||
|
dev_entry = device_registry.async_get_or_create(
|
||||||
|
identifiers={(DOMAIN, dev_id)},
|
||||||
|
connections={(CONNECTION_NETWORK_MAC, TEST_MAC)},
|
||||||
|
config_entry_id=config_entry.entry_id,
|
||||||
|
disabled_by=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
entity_registry.async_get_or_create(
|
||||||
|
domain=domain,
|
||||||
|
platform=DOMAIN,
|
||||||
|
unique_id=entity_id,
|
||||||
|
config_entry=config_entry,
|
||||||
|
suggested_object_id=entity_id,
|
||||||
|
disabled_by=None,
|
||||||
|
device_id=dev_entry.id,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert entity_registry.async_get_entity_id(domain, DOMAIN, entity_id)
|
||||||
|
device = device_registry.async_get_device(identifiers={(DOMAIN, dev_id)})
|
||||||
|
assert device
|
||||||
|
assert device.connections == {(CONNECTION_NETWORK_MAC, TEST_MAC)}
|
||||||
|
|
||||||
|
# setup CH 0 and host entities/device
|
||||||
|
with patch("homeassistant.components.reolink.PLATFORMS", [domain]):
|
||||||
|
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert entity_registry.async_get_entity_id(domain, DOMAIN, entity_id)
|
||||||
|
device = device_registry.async_get_device(identifiers={(DOMAIN, dev_id)})
|
||||||
|
assert device
|
||||||
|
assert device.connections == set()
|
||||||
|
|
||||||
|
reolink_connect.baichuan.mac_address.return_value = TEST_MAC_CAM
|
||||||
|
|
||||||
|
|
||||||
async def test_no_repair_issue(
|
async def test_no_repair_issue(
|
||||||
hass: HomeAssistant, config_entry: MockConfigEntry, issue_registry: ir.IssueRegistry
|
hass: HomeAssistant, config_entry: MockConfigEntry, issue_registry: ir.IssueRegistry
|
||||||
) -> None:
|
) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user