1
mirror of https://github.com/home-assistant/core synced 2024-09-09 12:51:22 +02:00

Use DeviceInfo on components with via_device (R-X) (#58213)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-10-22 12:52:33 +02:00 committed by GitHub
parent 176ed4f7ba
commit a3d1159a13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 126 additions and 125 deletions

View File

@ -35,6 +35,7 @@ from homeassistant.helpers.dispatcher import (
async_dispatcher_connect, async_dispatcher_connect,
async_dispatcher_send, async_dispatcher_send,
) )
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.util import convert from homeassistant.util import convert
from homeassistant.util.dt import utcnow from homeassistant.util.dt import utcnow
@ -160,18 +161,18 @@ class RoonDevice(MediaPlayerEntity):
return [self._server.entity_id(roon_name) for roon_name in roon_names] return [self._server.entity_id(roon_name) for roon_name in roon_names]
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
dev_model = "player" dev_model = "player"
if self.player_data.get("source_controls"): if self.player_data.get("source_controls"):
dev_model = self.player_data["source_controls"][0].get("display_name") dev_model = self.player_data["source_controls"][0].get("display_name")
return { return DeviceInfo(
"identifiers": {(DOMAIN, self.unique_id)}, identifiers={(DOMAIN, self.unique_id)},
"name": self.name, name=self.name,
"manufacturer": "RoonLabs", manufacturer="RoonLabs",
"model": dev_model, model=dev_model,
"via_device": (DOMAIN, self._server.roon_id), via_device=(DOMAIN, self._server.roon_id),
} )
def update_data(self, player_data=None): def update_data(self, player_data=None):
"""Update session object.""" """Update session object."""

View File

@ -121,12 +121,12 @@ class RuckusUnleashedDevice(CoordinatorEntity, ScannerEntity):
def device_info(self) -> DeviceInfo | None: def device_info(self) -> DeviceInfo | None:
"""Return the device information.""" """Return the device information."""
if self.is_connected: if self.is_connected:
return { return DeviceInfo(
"name": self.name, name=self.name,
"connections": {(CONNECTION_NETWORK_MAC, self._mac)}, connections={(CONNECTION_NETWORK_MAC, self._mac)},
"via_device": ( via_device=(
CONNECTION_NETWORK_MAC, CONNECTION_NETWORK_MAC,
self.coordinator.data[API_CLIENTS][self._mac][API_ACCESS_POINT], self.coordinator.data[API_CLIENTS][self._mac][API_ACCESS_POINT],
), ),
} )
return None return None

View File

@ -125,8 +125,8 @@ class SIABaseEntity(RestoreEntity):
"""Return the device_info.""" """Return the device_info."""
assert self._attr_name is not None assert self._attr_name is not None
assert self.unique_id is not None assert self.unique_id is not None
return { return DeviceInfo(
"name": self._attr_name, name=self._attr_name,
"identifiers": {(DOMAIN, self.unique_id)}, identifiers={(DOMAIN, self.unique_id)},
"via_device": (DOMAIN, f"{self._port}_{self._account}"), via_device=(DOMAIN, f"{self._port}_{self._account}"),
} )

View File

@ -33,6 +33,7 @@ from homeassistant.helpers import (
config_validation as cv, config_validation as cv,
device_registry as dr, device_registry as dr,
) )
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.service import ( from homeassistant.helpers.service import (
async_register_admin_service, async_register_admin_service,
verify_domain_control, verify_domain_control,
@ -442,14 +443,13 @@ class SimpliSafeEntity(CoordinatorEntity):
serial = system.serial serial = system.serial
self._attr_extra_state_attributes = {ATTR_SYSTEM_ID: system.system_id} self._attr_extra_state_attributes = {ATTR_SYSTEM_ID: system.system_id}
self._attr_device_info = { self._attr_device_info = DeviceInfo(
"identifiers": {(DOMAIN, serial)}, identifiers={(DOMAIN, serial)},
"manufacturer": "SimpliSafe", manufacturer="SimpliSafe",
"model": model, model=model,
"name": device_name, name=device_name,
"via_device": (DOMAIN, system.system_id), via_device=(DOMAIN, system.system_id),
} )
self._attr_name = f"{system.address} {device_name} {' '.join([w.title() for w in model.split('_')])}" self._attr_name = f"{system.address} {device_name} {' '.join([w.title() for w in model.split('_')])}"
self._attr_unique_id = serial self._attr_unique_id = serial
self._device = device self._device = device

View File

@ -3,7 +3,7 @@
from abc import abstractmethod from abc import abstractmethod
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import DeviceInfo, Entity
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN from .const import DOMAIN
@ -33,19 +33,19 @@ class SomfyEntity(CoordinatorEntity, Entity):
return self.device.name return self.device.name
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return device specific attributes. """Return device specific attributes.
Implemented by platform classes. Implemented by platform classes.
""" """
return { return DeviceInfo(
"identifiers": {(DOMAIN, self.unique_id)}, identifiers={(DOMAIN, self.unique_id)},
"name": self.name, name=self.name,
"model": self.device.type, model=self.device.type,
"via_device": (DOMAIN, self.device.parent_id), via_device=(DOMAIN, self.device.parent_id),
# For the moment, Somfy only returns their own device. # For the moment, Somfy only returns their own device.
"manufacturer": "Somfy", manufacturer="Somfy",
} )
def has_capability(self, capability: str) -> bool: def has_capability(self, capability: str) -> bool:
"""Test if device has a capability.""" """Test if device has a capability."""

View File

@ -89,20 +89,20 @@ class SynoDSMCamera(SynologyDSMBaseEntity, Camera):
@property @property
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return the device information.""" """Return the device information."""
return { return DeviceInfo(
"identifiers": { identifiers={
( (
DOMAIN, DOMAIN,
f"{self._api.information.serial}_{self.camera_data.id}", f"{self._api.information.serial}_{self.camera_data.id}",
) )
}, },
"name": self.camera_data.name, name=self.camera_data.name,
"model": self.camera_data.model, model=self.camera_data.model,
"via_device": ( via_device=(
DOMAIN, DOMAIN,
f"{self._api.information.serial}_{SynoSurveillanceStation.INFO_API_KEY}", f"{self._api.information.serial}_{SynoSurveillanceStation.INFO_API_KEY}",
), ),
} )
@property @property
def available(self) -> bool: def available(self) -> bool:

View File

@ -106,16 +106,16 @@ class SynoDSMSurveillanceHomeModeToggle(SynologyDSMBaseEntity, ToggleEntity):
@property @property
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return the device information.""" """Return the device information."""
return { return DeviceInfo(
"identifiers": { identifiers={
( (
DOMAIN, DOMAIN,
f"{self._api.information.serial}_{SynoSurveillanceStation.INFO_API_KEY}", f"{self._api.information.serial}_{SynoSurveillanceStation.INFO_API_KEY}",
) )
}, },
"name": "Surveillance Station", name="Surveillance Station",
"manufacturer": "Synology", manufacturer="Synology",
"model": self._api.information.model, model=self._api.information.model,
"sw_version": self._version, sw_version=self._version,
"via_device": (DOMAIN, self._api.information.serial), via_device=(DOMAIN, self._api.information.serial),
} )

View File

@ -1,5 +1,5 @@
"""Base class for Tado entity.""" """Base class for Tado entity."""
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import DeviceInfo, Entity
from .const import DEFAULT_NAME, DOMAIN, TADO_HOME, TADO_ZONE from .const import DEFAULT_NAME, DOMAIN, TADO_HOME, TADO_ZONE
@ -15,16 +15,16 @@ class TadoDeviceEntity(Entity):
self.device_id = device_info["shortSerialNo"] self.device_id = device_info["shortSerialNo"]
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device_info of the device.""" """Return the device_info of the device."""
return { return DeviceInfo(
"identifiers": {(DOMAIN, self.device_id)}, identifiers={(DOMAIN, self.device_id)},
"name": self.device_name, name=self.device_name,
"manufacturer": DEFAULT_NAME, manufacturer=DEFAULT_NAME,
"sw_version": self._device_info["currentFwVersion"], sw_version=self._device_info["currentFwVersion"],
"model": self._device_info["deviceType"], model=self._device_info["deviceType"],
"via_device": (DOMAIN, self._device_info["serialNo"]), via_device=(DOMAIN, self._device_info["serialNo"]),
} )
@property @property
def should_poll(self): def should_poll(self):

View File

@ -41,11 +41,11 @@ class ToonElectricityMeterDeviceEntity(ToonEntity):
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return device information about this entity.""" """Return device information about this entity."""
agreement_id = self.coordinator.data.agreement.agreement_id agreement_id = self.coordinator.data.agreement.agreement_id
return { return DeviceInfo(
"name": "Electricity Meter", name="Electricity Meter",
"identifiers": {(DOMAIN, agreement_id, "electricity")}, identifiers={(DOMAIN, agreement_id, "electricity")},
"via_device": (DOMAIN, agreement_id, "meter_adapter"), via_device=(DOMAIN, agreement_id, "meter_adapter"),
} )
class ToonGasMeterDeviceEntity(ToonEntity): class ToonGasMeterDeviceEntity(ToonEntity):
@ -55,11 +55,11 @@ class ToonGasMeterDeviceEntity(ToonEntity):
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return device information about this entity.""" """Return device information about this entity."""
agreement_id = self.coordinator.data.agreement.agreement_id agreement_id = self.coordinator.data.agreement.agreement_id
return { return DeviceInfo(
"name": "Gas Meter", name="Gas Meter",
"identifiers": {(DOMAIN, agreement_id, "gas")}, identifiers={(DOMAIN, agreement_id, "gas")},
"via_device": (DOMAIN, agreement_id, "electricity"), via_device=(DOMAIN, agreement_id, "electricity"),
} )
class ToonWaterMeterDeviceEntity(ToonEntity): class ToonWaterMeterDeviceEntity(ToonEntity):
@ -69,11 +69,11 @@ class ToonWaterMeterDeviceEntity(ToonEntity):
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return device information about this entity.""" """Return device information about this entity."""
agreement_id = self.coordinator.data.agreement.agreement_id agreement_id = self.coordinator.data.agreement.agreement_id
return { return DeviceInfo(
"name": "Water Meter", name="Water Meter",
"identifiers": {(DOMAIN, agreement_id, "water")}, identifiers={(DOMAIN, agreement_id, "water")},
"via_device": (DOMAIN, agreement_id, "electricity"), via_device=(DOMAIN, agreement_id, "electricity"),
} )
class ToonSolarDeviceEntity(ToonEntity): class ToonSolarDeviceEntity(ToonEntity):
@ -83,11 +83,11 @@ class ToonSolarDeviceEntity(ToonEntity):
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return device information about this entity.""" """Return device information about this entity."""
agreement_id = self.coordinator.data.agreement.agreement_id agreement_id = self.coordinator.data.agreement.agreement_id
return { return DeviceInfo(
"name": "Solar Panels", name="Solar Panels",
"identifiers": {(DOMAIN, agreement_id, "solar")}, identifiers={(DOMAIN, agreement_id, "solar")},
"via_device": (DOMAIN, agreement_id, "meter_adapter"), via_device=(DOMAIN, agreement_id, "meter_adapter"),
} )
class ToonBoilerModuleDeviceEntity(ToonEntity): class ToonBoilerModuleDeviceEntity(ToonEntity):
@ -97,12 +97,12 @@ class ToonBoilerModuleDeviceEntity(ToonEntity):
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return device information about this entity.""" """Return device information about this entity."""
agreement_id = self.coordinator.data.agreement.agreement_id agreement_id = self.coordinator.data.agreement.agreement_id
return { return DeviceInfo(
"name": "Boiler Module", name="Boiler Module",
"manufacturer": "Eneco", manufacturer="Eneco",
"identifiers": {(DOMAIN, agreement_id, "boiler_module")}, identifiers={(DOMAIN, agreement_id, "boiler_module")},
"via_device": (DOMAIN, agreement_id), via_device=(DOMAIN, agreement_id),
} )
class ToonBoilerDeviceEntity(ToonEntity): class ToonBoilerDeviceEntity(ToonEntity):
@ -112,11 +112,11 @@ class ToonBoilerDeviceEntity(ToonEntity):
def device_info(self) -> DeviceInfo: def device_info(self) -> DeviceInfo:
"""Return device information about this entity.""" """Return device information about this entity."""
agreement_id = self.coordinator.data.agreement.agreement_id agreement_id = self.coordinator.data.agreement.agreement_id
return { return DeviceInfo(
"name": "Boiler", name="Boiler",
"identifiers": {(DOMAIN, agreement_id, "boiler")}, identifiers={(DOMAIN, agreement_id, "boiler")},
"via_device": (DOMAIN, agreement_id, "boiler_module"), via_device=(DOMAIN, agreement_id, "boiler_module"),
} )
@dataclass @dataclass

View File

@ -3,7 +3,7 @@
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.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import DeviceInfo, Entity
from .parent_device import WiLightParent from .parent_device import WiLightParent
@ -78,16 +78,16 @@ class WiLightDevice(Entity):
return self._unique_id return self._unique_id
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return { return DeviceInfo(
"name": self._name, name=self._name,
"identifiers": {(DOMAIN, self._unique_id)}, identifiers={(DOMAIN, self._unique_id)},
"model": self._model, model=self._model,
"manufacturer": "WiLight", manufacturer="WiLight",
"sw_version": self._sw_version, sw_version=self._sw_version,
"via_device": (DOMAIN, self._device_id), via_device=(DOMAIN, self._device_id),
} )
@property @property
def available(self): def available(self):

View File

@ -20,7 +20,7 @@ from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import DeviceInfo, Entity
from homeassistant.helpers.event import async_track_point_in_utc_time from homeassistant.helpers.event import async_track_point_in_utc_time
from homeassistant.util.dt import utcnow from homeassistant.util.dt import utcnow
@ -276,23 +276,23 @@ class XiaomiDevice(Entity):
return self._device_id return self._device_id
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info of the Xiaomi Aqara device.""" """Return the device info of the Xiaomi Aqara device."""
if self._is_gateway: if self._is_gateway:
device_info = { device_info = DeviceInfo(
"identifiers": {(DOMAIN, self._device_id)}, identifiers={(DOMAIN, self._device_id)},
"model": self._model, model=self._model,
} )
else: else:
device_info = { DeviceInfo(
"connections": {(dr.CONNECTION_ZIGBEE, self._device_id)}, connections={(dr.CONNECTION_ZIGBEE, self._device_id)},
"identifiers": {(DOMAIN, self._device_id)}, identifiers={(DOMAIN, self._device_id)},
"manufacturer": "Xiaomi Aqara", manufacturer="Xiaomi Aqara",
"model": self._model, model=self._model,
"name": self._device_name, name=self._device_name,
"sw_version": self._protocol, sw_version=self._protocol,
"via_device": (DOMAIN, self._gateway_id), via_device=(DOMAIN, self._gateway_id),
} )
return device_info return device_info

View File

@ -7,7 +7,7 @@ from micloud.micloudexception import MiCloudAccessDenied
from miio import DeviceException, gateway from miio import DeviceException, gateway
from miio.gateway.gateway import GATEWAY_MODEL_EU from miio.gateway.gateway import GATEWAY_MODEL_EU
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import DeviceInfo, Entity
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import ( from .const import (
@ -151,16 +151,16 @@ class XiaomiGatewayDevice(CoordinatorEntity, Entity):
return self._name return self._name
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info of the gateway.""" """Return the device info of the gateway."""
return { return DeviceInfo(
"identifiers": {(DOMAIN, self._sub_device.sid)}, identifiers={(DOMAIN, self._sub_device.sid)},
"via_device": (DOMAIN, self._entry.unique_id), via_device=(DOMAIN, self._entry.unique_id),
"manufacturer": "Xiaomi", manufacturer="Xiaomi",
"name": self._sub_device.name, name=self._sub_device.name,
"model": self._sub_device.model, model=self._sub_device.model,
"sw_version": self._sub_device.firmware_version, sw_version=self._sub_device.firmware_version,
} )
@property @property
def available(self): def available(self):