Migrate integrations to setting via_device_id in DeviceInfo (#177700)

This commit is contained in:
Erik Montnemery
2026-08-02 12:43:55 +02:00
committed by GitHub
parent e5aa33502c
commit 622a61ac34
26 changed files with 165 additions and 39 deletions
+8 -1
View File
@@ -7,6 +7,7 @@ from typing import Any, override
from pyinsteon import devices
from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
@@ -88,6 +89,8 @@ class InsteonEntity(Entity):
@override
def device_info(self) -> DeviceInfo:
"""Return device information."""
config_entry = self.platform.config_entry
assert config_entry
return DeviceInfo(
identifiers={(DOMAIN, str(self._insteon_device.address))},
manufacturer="SmartLabs, Inc",
@@ -100,7 +103,11 @@ class InsteonEntity(Entity):
f"{self._insteon_device.firmware:02x} Engine Version:"
f" {self._insteon_device.engine_version}"
),
via_device=(DOMAIN, str(devices.modem.address)),
via_device_id=dr.async_get_device_id_by_identifier(
self.hass,
(DOMAIN, str(devices.modem.address)),
config_entry_id=config_entry.entry_id,
),
configuration_url=f"homeassistant://insteon/device/config/{self._insteon_device.id}",
)
+6 -1
View File
@@ -1,5 +1,6 @@
"""Base entity for Iskra devices."""
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -26,7 +27,11 @@ class IskraEntity(CoordinatorEntity[IskraDataUpdateCoordinator]):
name=self.device.model,
sw_version=self.device.fw_version,
serial_number=self.device.serial,
via_device=(DOMAIN, gateway.serial),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, gateway.serial),
config_entry_id=coordinator.config_entry.entry_id,
),
)
else:
self._attr_device_info = DeviceInfo(
+6 -1
View File
@@ -2,6 +2,7 @@
from typing import Any, override
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -50,7 +51,11 @@ class JellyfinClientEntity(JellyfinEntity):
model=self.client_name,
name=self.device_name,
sw_version=self.app_version,
via_device=(DOMAIN, coordinator.server_id),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, coordinator.server_id),
config_entry_id=coordinator.config_entry.entry_id,
),
)
self._attr_name = None
else:
@@ -8,6 +8,7 @@ from homeassistant.components.sensor import (
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import DEGREE, UnitOfPower
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.typing import UNDEFINED, StateType, UndefinedType
@@ -31,6 +32,10 @@ async def async_setup_entry(
"2_ch_power_strip",
)
via_device_id = dr.async_get_device_id_by_identifier(
hass, (DOMAIN, "2_ch_power_strip"), config_entry_id=config_entry.entry_id
)
async_add_entities(
[
DemoSensor(
@@ -42,7 +47,7 @@ async def async_setup_entry(
device_class=SensorDeviceClass.POWER,
state_class=SensorStateClass.MEASUREMENT,
unit_of_measurement=UnitOfPower.WATT,
via_device="2_ch_power_strip",
via_device_id=via_device_id,
),
DemoSensor(
device_unique_id="outlet_2",
@@ -53,7 +58,7 @@ async def async_setup_entry(
device_class=SensorDeviceClass.POWER,
state_class=SensorStateClass.MEASUREMENT,
unit_of_measurement=UnitOfPower.WATT,
via_device="2_ch_power_strip",
via_device_id=via_device_id,
),
DemoSensor(
device_unique_id="statistics_issues",
@@ -135,7 +140,7 @@ class DemoSensor(SensorEntity):
device_class: SensorDeviceClass | None,
state_class: SensorStateClass | None,
unit_of_measurement: str | None,
via_device: str | None = None,
via_device_id: str | None = None,
) -> None:
"""Initialize the sensor."""
self._attr_device_class = device_class
@@ -150,5 +155,5 @@ class DemoSensor(SensorEntity):
identifiers={(DOMAIN, device_unique_id)},
name=device_name,
)
if via_device:
self._attr_device_info["via_device"] = (DOMAIN, via_device)
if via_device_id:
self._attr_device_info["via_device_id"] = via_device_id
@@ -5,6 +5,7 @@ from typing import Any, override
from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
@@ -27,6 +28,10 @@ async def async_setup_entry(
"2_ch_power_strip",
)
via_device_id = dr.async_get_device_id_by_identifier(
hass, (DOMAIN, "2_ch_power_strip"), config_entry_id=config_entry.entry_id
)
async_add_entities(
[
DemoSwitch(
@@ -35,7 +40,7 @@ async def async_setup_entry(
entity_name=None,
state=False,
assumed=False,
via_device="2_ch_power_strip",
via_device_id=via_device_id,
),
DemoSwitch(
unique_id="outlet_2",
@@ -43,7 +48,7 @@ async def async_setup_entry(
entity_name=None,
state=True,
assumed=False,
via_device="2_ch_power_strip",
via_device_id=via_device_id,
),
]
)
@@ -65,7 +70,7 @@ class DemoSwitch(SwitchEntity):
assumed: bool,
translation_key: str | None = None,
device_class: SwitchDeviceClass | None = None,
via_device: str | None = None,
via_device_id: str | None = None,
) -> None:
"""Initialize the Demo switch."""
self._attr_assumed_state = assumed
@@ -77,8 +82,8 @@ class DemoSwitch(SwitchEntity):
identifiers={(DOMAIN, unique_id)},
name=device_name,
)
if via_device:
self._attr_device_info["via_device"] = (DOMAIN, via_device)
if via_device_id:
self._attr_device_info["via_device_id"] = via_device_id
self._attr_name = entity_name
@override
+4 -2
View File
@@ -211,7 +211,9 @@ def register_lcn_address_devices(
"""
device_registry = dr.async_get(hass)
host_identifiers = (DOMAIN, config_entry.entry_id)
host_device_id = dr.async_get_device_id_by_identifier(
hass, (DOMAIN, config_entry.entry_id), config_entry_id=config_entry.entry_id
)
for device_config in config_entry.data[CONF_DEVICES]:
address = device_config[CONF_ADDRESS]
@@ -233,7 +235,7 @@ def register_lcn_address_devices(
device_entry = device_registry.async_get_or_create(
config_entry_id=config_entry.entry_id,
identifiers=identifiers,
via_device=host_identifiers,
via_device_id=host_device_id,
manufacturer="Issendorff",
sw_version=sw_version,
name=device_name,
+6 -1
View File
@@ -6,6 +6,7 @@ from typing import Any, override
from livisi.const import CAPABILITY_MAP
from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -59,7 +60,11 @@ class LivisiEntity(CoordinatorEntity[LivisiDataUpdateCoordinator]):
model=device["type"],
name=device_name,
suggested_area=room_name,
via_device=(DOMAIN, config_entry.entry_id),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, config_entry.entry_id),
config_entry_id=config_entry.entry_id,
),
)
super().__init__(coordinator)
+13 -4
View File
@@ -15,6 +15,7 @@ from homeassistant.components.light import (
brightness_supported,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -97,9 +98,13 @@ class LunatoneLight(
return DeviceInfo(
identifiers={(DOMAIN, self.unique_id)},
name=self._device.name,
via_device=(
DOMAIN,
f"{self._config_entry_unique_id}-line{self._device.data.line}",
via_device_id=dr.async_get_device_id_by_identifier(
self.hass,
(
DOMAIN,
f"{self._config_entry_unique_id}-line{self._device.data.line}",
),
config_entry_id=self.coordinator.config_entry.entry_id,
),
)
@@ -261,7 +266,11 @@ class LunatoneLineBroadcastLight(
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, self.unique_id)},
name=f"DALI Line {line}",
via_device=(DOMAIN, config_entry_unique_id),
via_device_id=dr.async_get_device_id_by_identifier(
self.coordinator.hass,
(DOMAIN, config_entry_unique_id),
config_entry_id=self.coordinator.config_entry.entry_id,
),
**extra_info,
)
+6 -1
View File
@@ -18,6 +18,7 @@ from homeassistant.const import (
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -135,7 +136,11 @@ class LunatoneSensor(
f"DALI Line {self.sensor.data.dali_sensor_address.line}"
f" - A{self.sensor.data.dali_sensor_address.address}\u00b2"
),
via_device=(DOMAIN, str(self._config_entry_unique_id)),
via_device_id=dr.async_get_device_id_by_identifier(
self.coordinator.hass,
(DOMAIN, str(self._config_entry_unique_id)),
config_entry_id=self.coordinator.config_entry.entry_id,
),
)
self._attr_device_info = device_info
@@ -11,6 +11,7 @@ from pymelcloud.atw_device import Zone
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.debounce import Debouncer
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -38,6 +39,8 @@ type MelCloudConfigEntry = ConfigEntry[dict[str, list[MelCloudDeviceUpdateCoordi
class MelCloudDeviceUpdateCoordinator(DataUpdateCoordinator[None]):
"""Per-device coordinator for MELCloud data updates."""
config_entry: MelCloudConfigEntry
def __init__(
self,
hass: HomeAssistant,
@@ -110,7 +113,11 @@ class MelCloudDeviceUpdateCoordinator(DataUpdateCoordinator[None]):
manufacturer="Mitsubishi Electric",
model="ATW zone device",
name=f"{self.device.name} {zone.name}",
via_device=(DOMAIN, f"{dev.mac}-{dev.serial}"),
via_device_id=dr.async_get_device_id_by_identifier(
self.hass,
(DOMAIN, f"{dev.mac}-{dev.serial}"),
config_entry_id=self.config_entry.entry_id,
),
)
@override
+6 -1
View File
@@ -4,6 +4,7 @@ from typing import override
from pynuki.device import NukiDevice
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -38,6 +39,10 @@ class NukiEntity[_NukiDeviceT: NukiDevice](CoordinatorEntity[NukiCoordinator]):
manufacturer="Nuki Home Solutions GmbH",
model=self._nuki_device.device_model_str.capitalize(),
sw_version=self._nuki_device.firmware_version,
via_device=(DOMAIN, self.coordinator.bridge_id),
via_device_id=dr.async_get_device_id_by_identifier(
self.coordinator.hass,
(DOMAIN, self.coordinator.bridge_id),
config_entry_id=self.coordinator.config_entry.entry_id,
),
serial_number=parse_id(self._nuki_device.nuki_id),
)
+6 -1
View File
@@ -17,6 +17,7 @@ from homeassistant.components.light import (
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -99,7 +100,11 @@ class OpenRGBLight(CoordinatorEntity[OpenRGBCoordinator], LightEntity):
model=f"{self.device.metadata.description} ({self.device.type.name})",
sw_version=self.device.metadata.version,
serial_number=self.device.metadata.serial,
via_device=(DOMAIN, coordinator.entry_id),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, coordinator.entry_id),
config_entry_id=coordinator.entry_id,
),
)
modes = [mode.name for mode in self.device.modes]
+10 -3
View File
@@ -3,7 +3,7 @@
from collections.abc import Callable
from functools import wraps
import logging
from typing import Any, Concatenate, cast, override
from typing import TYPE_CHECKING, Any, Concatenate, cast, override
from plexapi.client import PlexClient
import plexapi.exceptions
@@ -20,7 +20,7 @@ from homeassistant.components.media_player import (
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
@@ -557,6 +557,9 @@ class PlexMediaPlayer(MediaPlayerEntity):
entry_type=DeviceEntryType.SERVICE,
)
config_entry = self.platform.config_entry
if TYPE_CHECKING:
assert config_entry
return DeviceInfo(
identifiers={(DOMAIN, self.machine_identifier)},
manufacturer=self.device_platform or "Plex",
@@ -566,7 +569,11 @@ class PlexMediaPlayer(MediaPlayerEntity):
# name to None
name=cast(str | None, self.name),
sw_version=self.device_version,
via_device=(DOMAIN, self.plex_server.machine_identifier),
via_device_id=dr.async_get_device_id_by_identifier(
self.hass,
(DOMAIN, self.plex_server.machine_identifier),
config_entry_id=config_entry.entry_id,
),
)
@override
+6 -1
View File
@@ -5,6 +5,7 @@ from typing import cast, override
from homeassistant.components.event import EventDeviceClass, EventEntity
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
@@ -70,7 +71,11 @@ class RoonEventEntity(EventEntity):
name=cast(str | None, self.name),
manufacturer="RoonLabs",
model=dev_model,
via_device=(DOMAIN, self._entry_id),
via_device_id=dr.async_get_device_id_by_identifier(
self._server.hass,
(DOMAIN, self._entry_id),
config_entry_id=self._entry_id,
),
)
def _roonapi_volume_callback(
@@ -15,6 +15,7 @@ from homeassistant.components.media_player import (
)
from homeassistant.const import DEVICE_DEFAULT_NAME
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
@@ -154,7 +155,9 @@ class RoonDevice(MediaPlayerEntity):
name=cast(str | None, self.name),
manufacturer="RoonLabs",
model=dev_model,
via_device=(DOMAIN, self._entry_id),
via_device_id=dr.async_get_device_id_by_identifier(
self.hass, (DOMAIN, self._entry_id), config_entry_id=self._entry_id
),
)
def update_data(self, player_data=None):
@@ -6,6 +6,7 @@ from satel_integra import AsyncSatel
from homeassistant.config_entries import ConfigSubentry
from homeassistant.const import CONF_NAME
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -60,7 +61,11 @@ class SatelIntegraEntity[_CoordinatorT: SatelIntegraBaseCoordinator](
self._attr_device_info = DeviceInfo(
name=subentry.data[CONF_NAME],
identifiers={(DOMAIN, self._attr_unique_id)},
via_device=(DOMAIN, config_entry_id),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, config_entry_id),
config_entry_id=config_entry_id,
),
)
@property
@@ -17,6 +17,7 @@ from simplipy.websocket import (
)
from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -101,7 +102,11 @@ class SimpliSafeEntity(CoordinatorEntity[SimpliSafeDataUpdateCoordinator]):
manufacturer="SimpliSafe",
model=model,
name=device_name,
via_device=(DOMAIN, str(system.system_id)),
via_device_id=dr.async_get_device_id_by_identifier(
self.coordinator.hass,
(DOMAIN, str(system.system_id)),
config_entry_id=self.coordinator.config_entry.entry_id,
),
)
self._attr_unique_id = serial
@@ -162,7 +162,7 @@ async def async_setup_entry(
model_id=model_id,
hw_version=str(player.firmware) if player.firmware is not None else None,
sw_version=sw_version,
via_device=(DOMAIN, coordinator.server_uuid),
via_device_id=server_device.id if server_device else None,
)
_LOGGER.debug("Creating / Updating player device %s", device)
async_add_entities([SqueezeBoxMediaPlayerEntity(coordinator)])
@@ -26,6 +26,8 @@ type TailwindConfigEntry = ConfigEntry[TailwindDataUpdateCoordinator]
class TailwindDataUpdateCoordinator(DataUpdateCoordinator[TailwindDeviceStatus]):
"""Class to manage fetching Tailwind data."""
config_entry: TailwindConfigEntry
def __init__(self, hass: HomeAssistant, entry: TailwindConfigEntry) -> None:
"""Initialize the coordinator."""
self.tailwind = Tailwind(
+6 -1
View File
@@ -1,5 +1,6 @@
"""Base entity for the Tailwind integration."""
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -55,7 +56,11 @@ class TailwindDoorEntity(CoordinatorEntity[TailwindDataUpdateCoordinator]):
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, f"{coordinator.data.device_id}-{door_id}")},
via_device=(DOMAIN, coordinator.data.device_id),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, coordinator.data.device_id),
config_entry_id=coordinator.config_entry.entry_id,
),
name=f"Door {coordinator.data.doors[door_id].index + 1}",
manufacturer="Tailwind",
model=coordinator.data.product,
+6 -1
View File
@@ -5,6 +5,7 @@ from typing import override
from aiotedee.models import TedeeLock
from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -35,7 +36,11 @@ class TedeeEntity(CoordinatorEntity[TedeeApiCoordinator]):
manufacturer="Tedee",
model=lock.type_name,
model_id=lock.type_name,
via_device=(DOMAIN, coordinator.bridge.serial),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, coordinator.bridge.serial),
config_entry_id=coordinator.config_entry.entry_id,
),
)
@property
@@ -8,6 +8,7 @@ from tesla_fleet_api.tesla.energysite import EnergySite
from tesla_fleet_api.tesla.vehicle.fleet import VehicleFleet
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -205,7 +206,11 @@ class TeslaFleetWallConnectorEntity(
identifiers={(DOMAIN, din)},
manufacturer="Tesla",
name="Wall Connector",
via_device=(DOMAIN, str(data.id)),
via_device_id=dr.async_get_device_id_by_identifier(
data.live_coordinator.hass,
(DOMAIN, str(data.id)),
config_entry_id=data.live_coordinator.config_entry.entry_id,
),
serial_number=din.rsplit("-", maxsplit=1)[-1],
model=model,
)
@@ -7,6 +7,7 @@ from tesla_fleet_api.const import Scope
from tesla_fleet_api.teslemetry import EnergySite, Vehicle
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.typing import StateType
@@ -224,7 +225,11 @@ class TeslemetryWallConnectorEntity(TeslemetryPollingEntity):
manufacturer="Tesla",
configuration_url="https://teslemetry.com/console",
name="Wall Connector",
via_device=(DOMAIN, str(data.id)),
via_device_id=dr.async_get_device_id_by_identifier(
data.live_coordinator.hass,
(DOMAIN, str(data.id)),
config_entry_id=data.live_coordinator.config_entry.entry_id,
),
serial_number=din.rsplit("-", maxsplit=1)[-1],
model=model,
)
@@ -107,7 +107,11 @@ class ToGrillCoordinator(DataUpdateCoordinator[dict[tuple[int, int | None], Pack
"probe_number": str(probe_number),
},
identifiers={(DOMAIN, f"{self.address}_{probe_number}")},
via_device=(DOMAIN, self.address),
via_device_id=dr.async_get_device_id_by_identifier(
self.hass,
(DOMAIN, self.address),
config_entry_id=self.config_entry.entry_id,
),
)
@callback
@@ -4,6 +4,7 @@ from typing import override
from pytouchlinesl import Zone
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -24,7 +25,11 @@ class TouchlineSLZoneEntity(CoordinatorEntity[TouchlineSLModuleCoordinator]):
identifiers={(DOMAIN, f"{coordinator.data.module.id}-{zone_id}")},
name=self.zone.name,
manufacturer="Roth",
via_device=(DOMAIN, coordinator.data.module.id),
via_device_id=dr.async_get_device_id_by_identifier(
coordinator.hass,
(DOMAIN, coordinator.data.module.id),
config_entry_id=coordinator.config_entry.entry_id,
),
model="zone",
suggested_area=self.zone.name,
)
+6 -1
View File
@@ -10,6 +10,7 @@ from pytradfri.device import Device
from pytradfri.error import RequestError
from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -61,7 +62,11 @@ class TradfriBaseEntity(CoordinatorEntity[TradfriDeviceDataUpdateCoordinator]):
model=info.model_number,
name=self._device.name,
sw_version=info.firmware_version,
via_device=(DOMAIN, gateway_id),
via_device_id=dr.async_get_device_id_by_identifier(
device_coordinator.hass,
(DOMAIN, gateway_id),
config_entry_id=device_coordinator.config_entry.entry_id,
),
)
self._attr_unique_id = f"{gateway_id}-{self._device_id}"