mirror of
https://github.com/home-assistant/core.git
synced 2026-08-03 20:24:55 +02:00
Migrate integrations to setting via_device_id in DeviceInfo (#177700)
This commit is contained in:
@@ -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}",
|
||||
)
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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)
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user