diff --git a/homeassistant/components/daikin/__init__.py b/homeassistant/components/daikin/__init__.py index 504f8cd9f86..185537cc7d0 100644 --- a/homeassistant/components/daikin/__init__.py +++ b/homeassistant/components/daikin/__init__.py @@ -13,6 +13,7 @@ from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady import homeassistant.helpers.config_validation as cv from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC +from homeassistant.helpers.entity import DeviceInfo from homeassistant.util import Throttle from .const import CONF_UUID, DOMAIN, KEY_MAC, TIMEOUT @@ -109,13 +110,13 @@ class DaikinApi: return self._available @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return a device description for device registry.""" info = self.device.values - return { - "connections": {(CONNECTION_NETWORK_MAC, self.device.mac)}, - "manufacturer": "Daikin", - "model": info.get("model"), - "name": info.get("name"), - "sw_version": info.get("ver", "").replace("_", "."), - } + return DeviceInfo( + connections={(CONNECTION_NETWORK_MAC, self.device.mac)}, + manufacturer="Daikin", + model=info.get("model"), + name=info.get("name"), + sw_version=info.get("ver", "").replace("_", "."), + ) diff --git a/homeassistant/components/demo/binary_sensor.py b/homeassistant/components/demo/binary_sensor.py index c4186eae505..7cf96d33f5c 100644 --- a/homeassistant/components/demo/binary_sensor.py +++ b/homeassistant/components/demo/binary_sensor.py @@ -4,6 +4,7 @@ from homeassistant.components.binary_sensor import ( DEVICE_CLASS_MOTION, BinarySensorEntity, ) +from homeassistant.helpers.entity import DeviceInfo from . import DOMAIN @@ -38,15 +39,15 @@ class DemoBinarySensor(BinarySensorEntity): self._sensor_type = device_class @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return device info.""" - return { - "identifiers": { + return DeviceInfo( + identifiers={ # Serial numbers are unique identifiers within a specific domain (DOMAIN, self.unique_id) }, - "name": self.name, - } + name=self.name, + ) @property def unique_id(self): diff --git a/homeassistant/components/demo/climate.py b/homeassistant/components/demo/climate.py index a6d166662ae..ff8e0c256c6 100644 --- a/homeassistant/components/demo/climate.py +++ b/homeassistant/components/demo/climate.py @@ -20,6 +20,7 @@ from homeassistant.components.climate.const import ( SUPPORT_TARGET_TEMPERATURE_RANGE, ) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT +from homeassistant.helpers.entity import DeviceInfo from . import DOMAIN @@ -154,15 +155,15 @@ class DemoClimate(ClimateEntity): self._target_temperature_low = target_temp_low @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return device info.""" - return { - "identifiers": { + return DeviceInfo( + identifiers={ # Serial numbers are unique identifiers within a specific domain (DOMAIN, self.unique_id) }, - "name": self.name, - } + name=self.name, + ) @property def unique_id(self): diff --git a/homeassistant/components/demo/cover.py b/homeassistant/components/demo/cover.py index 35f25df5a96..444b6a2a90c 100644 --- a/homeassistant/components/demo/cover.py +++ b/homeassistant/components/demo/cover.py @@ -11,6 +11,7 @@ from homeassistant.components.cover import ( CoverEntity, ) from homeassistant.core import callback +from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.event import async_track_utc_time_change from . import DOMAIN @@ -86,15 +87,15 @@ class DemoCover(CoverEntity): self._closed = self.current_cover_position <= 0 @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return device info.""" - return { - "identifiers": { + return DeviceInfo( + identifiers={ # Serial numbers are unique identifiers within a specific domain (DOMAIN, self.unique_id) }, - "name": self.name, - } + name=self.name, + ) @property def unique_id(self): diff --git a/homeassistant/components/demo/light.py b/homeassistant/components/demo/light.py index 4d9496ca10f..29e7e1395ee 100644 --- a/homeassistant/components/demo/light.py +++ b/homeassistant/components/demo/light.py @@ -19,6 +19,7 @@ from homeassistant.components.light import ( SUPPORT_EFFECT, LightEntity, ) +from homeassistant.helpers.entity import DeviceInfo from . import DOMAIN @@ -138,15 +139,15 @@ class DemoLight(LightEntity): self._features |= SUPPORT_EFFECT @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return device info.""" - return { - "identifiers": { + return DeviceInfo( + identifiers={ # Serial numbers are unique identifiers within a specific domain (DOMAIN, self.unique_id) }, - "name": self.name, - } + name=self.name, + ) @property def should_poll(self) -> bool: diff --git a/homeassistant/components/demo/number.py b/homeassistant/components/demo/number.py index 8f3ccf47230..d471bdac85f 100644 --- a/homeassistant/components/demo/number.py +++ b/homeassistant/components/demo/number.py @@ -6,6 +6,7 @@ from typing import Literal from homeassistant.components.number import NumberEntity from homeassistant.components.number.const import MODE_AUTO, MODE_BOX, MODE_SLIDER from homeassistant.const import DEVICE_DEFAULT_NAME +from homeassistant.helpers.entity import DeviceInfo from . import DOMAIN @@ -95,15 +96,15 @@ class DemoNumber(NumberEntity): self._attr_step = step @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return device info.""" - return { - "identifiers": { + return DeviceInfo( + identifiers={ # Serial numbers are unique identifiers within a specific domain (DOMAIN, self.unique_id) }, - "name": self.name, - } + name=self.name, + ) async def async_set_value(self, value): """Update the current value.""" diff --git a/homeassistant/components/demo/select.py b/homeassistant/components/demo/select.py index 8d499c7a258..6a768f80ba7 100644 --- a/homeassistant/components/demo/select.py +++ b/homeassistant/components/demo/select.py @@ -5,6 +5,7 @@ from homeassistant.components.select import SelectEntity from homeassistant.config_entries import ConfigEntry from homeassistant.const import DEVICE_DEFAULT_NAME from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType @@ -66,10 +67,10 @@ class DemoSelect(SelectEntity): self._attr_icon = icon self._attr_device_class = device_class self._attr_options = options - self._attr_device_info = { - "identifiers": {(DOMAIN, unique_id)}, - "name": name, - } + self._attr_device_info = DeviceInfo( + identifiers={(DOMAIN, unique_id)}, + name=name, + ) async def async_select_option(self, option: str) -> None: """Update the current selected option.""" diff --git a/homeassistant/components/demo/sensor.py b/homeassistant/components/demo/sensor.py index 21ec8e1d391..413017ad2f1 100644 --- a/homeassistant/components/demo/sensor.py +++ b/homeassistant/components/demo/sensor.py @@ -20,6 +20,7 @@ from homeassistant.const import ( TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, StateType @@ -125,10 +126,10 @@ class DemoSensor(SensorEntity): self._attr_state_class = state_class self._attr_unique_id = unique_id - self._attr_device_info = { - "identifiers": {(DOMAIN, unique_id)}, - "name": name, - } + self._attr_device_info = DeviceInfo( + identifiers={(DOMAIN, unique_id)}, + name=name, + ) if battery: self._attr_extra_state_attributes = {ATTR_BATTERY_LEVEL: battery} diff --git a/homeassistant/components/demo/switch.py b/homeassistant/components/demo/switch.py index 84554bf0db1..dd969010bd7 100644 --- a/homeassistant/components/demo/switch.py +++ b/homeassistant/components/demo/switch.py @@ -3,6 +3,7 @@ from __future__ import annotations from homeassistant.components.switch import SwitchEntity from homeassistant.const import DEVICE_DEFAULT_NAME +from homeassistant.helpers.entity import DeviceInfo from . import DOMAIN @@ -52,12 +53,12 @@ class DemoSwitch(SwitchEntity): self._attr_unique_id = unique_id @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Return device info.""" - return { - "identifiers": {(DOMAIN, self.unique_id)}, - "name": self.name, - } + return DeviceInfo( + identifiers={(DOMAIN, self.unique_id)}, + name=self.name, + ) def turn_on(self, **kwargs): """Turn the switch on.""" diff --git a/homeassistant/components/denonavr/media_player.py b/homeassistant/components/denonavr/media_player.py index f8cfe75f304..39186680e09 100644 --- a/homeassistant/components/denonavr/media_player.py +++ b/homeassistant/components/denonavr/media_player.py @@ -148,11 +148,11 @@ class DenonDevice(MediaPlayerEntity): self._attr_name = receiver.name self._attr_unique_id = unique_id self._attr_device_info = DeviceInfo( + configuration_url=f"http://{config_entry.data[CONF_HOST]}/", identifiers={(DOMAIN, config_entry.unique_id)}, manufacturer=config_entry.data[CONF_MANUFACTURER], - name=config_entry.title, model=f"{config_entry.data[CONF_MODEL]}-{config_entry.data[CONF_TYPE]}", - configuration_url=f"http://{config_entry.data[CONF_HOST]}/", + name=config_entry.title, ) self._attr_sound_mode_list = receiver.sound_mode_list self._attr_source_list = receiver.input_func_list diff --git a/homeassistant/components/devolo_home_control/devolo_device.py b/homeassistant/components/devolo_home_control/devolo_device.py index 03f850579be..7fdd53d0d87 100644 --- a/homeassistant/components/devolo_home_control/devolo_device.py +++ b/homeassistant/components/devolo_home_control/devolo_device.py @@ -6,7 +6,7 @@ import logging from devolo_home_control_api.devices.zwave import Zwave from devolo_home_control_api.homecontrol import HomeControl -from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity import DeviceInfo, Entity from .const import DOMAIN from .subscriber import Subscriber @@ -32,15 +32,15 @@ class DevoloDeviceEntity(Entity): ].name self._attr_should_poll = False self._attr_unique_id = element_uid - self._attr_device_info = { - "identifiers": {(DOMAIN, self._device_instance.uid)}, - "name": self._attr_name, - "manufacturer": device_instance.brand, - "model": device_instance.name, - "suggested_area": device_instance.settings_property[ + self._attr_device_info = DeviceInfo( + identifiers={(DOMAIN, self._device_instance.uid)}, + manufacturer=device_instance.brand, + model=device_instance.name, + name=self._attr_name, + suggested_area=device_instance.settings_property[ "general_device_settings" ].zone, - } + ) self.subscriber: Subscriber | None = None self.sync_callback = self._sync diff --git a/homeassistant/components/directv/entity.py b/homeassistant/components/directv/entity.py index b3ac8fd7df6..08b24a50a75 100644 --- a/homeassistant/components/directv/entity.py +++ b/homeassistant/components/directv/entity.py @@ -23,9 +23,8 @@ class DIRECTVEntity(Entity): """Return device information about this DirecTV receiver.""" return DeviceInfo( identifiers={(DOMAIN, self._device_id)}, - name=self.name, manufacturer=self.dtv.device.info.brand, - model=None, + name=self.name, sw_version=self.dtv.device.info.version, via_device=(DOMAIN, self.dtv.device.info.receiver_id), ) diff --git a/homeassistant/components/doorbird/entity.py b/homeassistant/components/doorbird/entity.py index 44cbb1f42de..73404e7c199 100644 --- a/homeassistant/components/doorbird/entity.py +++ b/homeassistant/components/doorbird/entity.py @@ -1,7 +1,7 @@ """The DoorBird integration base entity.""" from homeassistant.helpers import device_registry as dr -from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity import DeviceInfo, Entity from .const import ( DOORBIRD_INFO_KEY_BUILD_NUMBER, @@ -23,14 +23,14 @@ class DoorBirdEntity(Entity): self._mac_addr = get_mac_address_from_doorstation_info(doorstation_info) @property - def device_info(self): + def device_info(self) -> DeviceInfo: """Doorbird device info.""" firmware = self._doorstation_info[DOORBIRD_INFO_KEY_FIRMWARE] firmware_build = self._doorstation_info[DOORBIRD_INFO_KEY_BUILD_NUMBER] - return { - "connections": {(dr.CONNECTION_NETWORK_MAC, self._mac_addr)}, - "name": self._doorstation.name, - "manufacturer": MANUFACTURER, - "sw_version": f"{firmware} {firmware_build}", - "model": self._doorstation_info[DOORBIRD_INFO_KEY_DEVICE_TYPE], - } + return DeviceInfo( + connections={(dr.CONNECTION_NETWORK_MAC, self._mac_addr)}, + manufacturer=MANUFACTURER, + model=self._doorstation_info[DOORBIRD_INFO_KEY_DEVICE_TYPE], + name=self._doorstation.name, + sw_version=f"{firmware} {firmware_build}", + ) diff --git a/homeassistant/components/dsmr/sensor.py b/homeassistant/components/dsmr/sensor.py index bd02be7d63e..12b2a17016a 100644 --- a/homeassistant/components/dsmr/sensor.py +++ b/homeassistant/components/dsmr/sensor.py @@ -24,6 +24,7 @@ from homeassistant.const import ( ) from homeassistant.core import CoreState, HomeAssistant, callback from homeassistant.helpers import config_validation as cv +from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, EventType, StateType from homeassistant.util import Throttle @@ -230,10 +231,10 @@ class DSMREntity(SensorEntity): if device_serial is None: device_serial = entry.entry_id - self._attr_device_info = { - "identifiers": {(DOMAIN, device_serial)}, - "name": device_name, - } + self._attr_device_info = DeviceInfo( + identifiers={(DOMAIN, device_serial)}, + name=device_name, + ) self._attr_unique_id = f"{device_serial}_{entity_description.name}".replace( " ", "_" ) diff --git a/homeassistant/components/dunehd/media_player.py b/homeassistant/components/dunehd/media_player.py index 482b92f768e..437b5b66a99 100644 --- a/homeassistant/components/dunehd/media_player.py +++ b/homeassistant/components/dunehd/media_player.py @@ -131,11 +131,11 @@ class DuneHDPlayerEntity(MediaPlayerEntity): @property def device_info(self) -> DeviceInfo: """Return the device info.""" - return { - "identifiers": {(DOMAIN, self._unique_id)}, - "name": DEFAULT_NAME, - "manufacturer": ATTR_MANUFACTURER, - } + return DeviceInfo( + identifiers={(DOMAIN, self._unique_id)}, + manufacturer=ATTR_MANUFACTURER, + name=DEFAULT_NAME, + ) @property def volume_level(self) -> float: diff --git a/homeassistant/components/dynalite/dynalitebase.py b/homeassistant/components/dynalite/dynalitebase.py index 72803f86f02..9bb4f3aeb27 100644 --- a/homeassistant/components/dynalite/dynalitebase.py +++ b/homeassistant/components/dynalite/dynalitebase.py @@ -64,11 +64,11 @@ class DynaliteBase(Entity): @property def device_info(self) -> DeviceInfo: """Device info for this entity.""" - return { - "identifiers": {(DOMAIN, self._device.unique_id)}, - "name": self.name, - "manufacturer": "Dynalite", - } + return DeviceInfo( + identifiers={(DOMAIN, self._device.unique_id)}, + manufacturer="Dynalite", + name=self.name, + ) async def async_added_to_hass(self) -> None: """Added to hass so need to register to dispatch."""