diff --git a/homeassistant/components/xiaomi_miio/entity.py b/homeassistant/components/xiaomi_miio/entity.py index 7f769ab56562..45929fc5981e 100644 --- a/homeassistant/components/xiaomi_miio/entity.py +++ b/homeassistant/components/xiaomi_miio/entity.py @@ -176,7 +176,11 @@ class XiaomiGatewayDevice(CoordinatorEntity[GatewayDeviceCoordinator], Entity): assert self._entry.unique_id is not None return DeviceInfo( identifiers={(DOMAIN, self._sub_device.sid)}, - via_device=(DOMAIN, self._entry.unique_id), + via_device_id=dr.async_get_device_id_by_identifier( + self.hass, + (DOMAIN, self._entry.unique_id), + config_entry_id=self._entry.entry_id, + ), manufacturer="Xiaomi", name=self._sub_device.name, model=self._sub_device.model, diff --git a/tests/components/xiaomi_miio/test_entity.py b/tests/components/xiaomi_miio/test_entity.py new file mode 100644 index 000000000000..086d50af1809 --- /dev/null +++ b/tests/components/xiaomi_miio/test_entity.py @@ -0,0 +1,44 @@ +"""The tests for the xiaomi_miio entity base classes.""" + +from unittest.mock import Mock + +from homeassistant.components.xiaomi_miio.const import DOMAIN +from homeassistant.components.xiaomi_miio.coordinator import GatewayDeviceCoordinator +from homeassistant.components.xiaomi_miio.entity import XiaomiGatewayDevice +from homeassistant.core import HomeAssistant +from homeassistant.helpers import device_registry as dr + +from . import TEST_MAC + +from tests.common import MockConfigEntry + + +async def test_gateway_sub_device_via_device_id( + hass: HomeAssistant, device_registry: dr.DeviceRegistry +) -> None: + """Test a gateway sub device links to the gateway device via via_device_id.""" + config_entry = MockConfigEntry(domain=DOMAIN, unique_id=TEST_MAC) + config_entry.add_to_hass(hass) + + gateway_device = device_registry.async_get_or_create( + config_entry_id=config_entry.entry_id, + identifiers={(DOMAIN, TEST_MAC)}, + manufacturer="Xiaomi", + name="Test Gateway", + ) + + sub_device = Mock( + sid="158d0001d7c95a", + model="lumi.sensor_ht", + firmware_version="1.2", + zigbee_model="lumi.sensor_ht.v1", + ) + sub_device.name = "Sub Device" + + coordinator = GatewayDeviceCoordinator(hass, config_entry, sub_device) + entity = XiaomiGatewayDevice(coordinator) + entity.hass = hass + + device_info = entity.device_info + + assert device_info["via_device_id"] == gateway_device.id