diff --git a/homeassistant/components/mill/__init__.py b/homeassistant/components/mill/__init__.py index 11199e126cf..dd0c4035dd7 100644 --- a/homeassistant/components/mill/__init__.py +++ b/homeassistant/components/mill/__init__.py @@ -11,6 +11,7 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, CONF_USERNAME, Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers import device_registry as dr from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import CLOUD, CONNECTION_TYPE, DOMAIN, LOCAL @@ -55,6 +56,18 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await data_coordinator.async_config_entry_first_refresh() hass.data[DOMAIN][conn_type][key] = data_coordinator + if entry.data.get(CONNECTION_TYPE) == CLOUD: + device_registry = dr.async_get(hass) + for mill_device in mill_data_connection.devices.values(): + # migrate to new device ids + device_entry = device_registry.async_get_device( + identifiers={(DOMAIN, mill_device.device_id)} + ) + if device_entry and entry.entry_id in device_entry.config_entries: + device_registry.async_update_device( + device_entry.id, new_identifiers={(DOMAIN, mill_device.mac_address)} + ) + await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True diff --git a/homeassistant/components/mill/climate.py b/homeassistant/components/mill/climate.py index 4f700d24e1b..a4f0ef04755 100644 --- a/homeassistant/components/mill/climate.py +++ b/homeassistant/components/mill/climate.py @@ -113,7 +113,7 @@ class MillHeater(CoordinatorEntity[MillDataUpdateCoordinator], ClimateEntity): self._id = heater.device_id self._attr_unique_id = heater.device_id self._attr_device_info = DeviceInfo( - identifiers={(DOMAIN, heater.device_id)}, + identifiers={(DOMAIN, heater.mac_address)}, manufacturer=MANUFACTURER, model=heater.model, name=heater.name, @@ -197,16 +197,16 @@ class LocalMillHeater(CoordinatorEntity[MillDataUpdateCoordinator], ClimateEntit def __init__(self, coordinator: MillDataUpdateCoordinator) -> None: """Initialize the thermostat.""" super().__init__(coordinator) - if mac := coordinator.mill_data_connection.mac_address: - self._attr_unique_id = mac - self._attr_device_info = DeviceInfo( - connections={(CONNECTION_NETWORK_MAC, mac)}, - configuration_url=self.coordinator.mill_data_connection.url, - manufacturer=MANUFACTURER, - model="Generation 3", - name=coordinator.mill_data_connection.name, - sw_version=coordinator.mill_data_connection.version, - ) + mac = coordinator.mill_data_connection.mac_address + self._attr_unique_id = mac + self._attr_device_info = DeviceInfo( + connections={(CONNECTION_NETWORK_MAC, mac)}, + configuration_url=self.coordinator.mill_data_connection.url, + manufacturer=MANUFACTURER, + model="Generation 3", + name=coordinator.mill_data_connection.name, + sw_version=coordinator.mill_data_connection.version, + ) self._update_attr() diff --git a/homeassistant/components/mill/sensor.py b/homeassistant/components/mill/sensor.py index c4b975ab039..2ef14204f2e 100644 --- a/homeassistant/components/mill/sensor.py +++ b/homeassistant/components/mill/sensor.py @@ -193,7 +193,7 @@ class MillSensor(CoordinatorEntity, SensorEntity): self._available = False self._attr_unique_id = f"{mill_device.device_id}_{entity_description.key}" self._attr_device_info = DeviceInfo( - identifiers={(DOMAIN, mill_device.device_id)}, + identifiers={(DOMAIN, mill_device.mac_address)}, name=mill_device.name, manufacturer=MANUFACTURER, model=mill_device.model, @@ -227,16 +227,17 @@ class LocalMillSensor(CoordinatorEntity, SensorEntity): super().__init__(coordinator) self.entity_description = entity_description - if mac := coordinator.mill_data_connection.mac_address: - self._attr_unique_id = f"{mac}_{entity_description.key}" - self._attr_device_info = DeviceInfo( - connections={(CONNECTION_NETWORK_MAC, mac)}, - configuration_url=self.coordinator.mill_data_connection.url, - manufacturer=MANUFACTURER, - model="Generation 3", - name=coordinator.mill_data_connection.name, - sw_version=coordinator.mill_data_connection.version, - ) + mac = coordinator.mill_data_connection.mac_address + self._attr_unique_id = f"{mac}_{entity_description.key}" + self._attr_device_info = DeviceInfo( + connections={(CONNECTION_NETWORK_MAC, mac)}, + configuration_url=self.coordinator.mill_data_connection.url, + identifiers={(DOMAIN, mac)}, + manufacturer=MANUFACTURER, + model="Generation 3", + name=coordinator.mill_data_connection.name, + sw_version=coordinator.mill_data_connection.version, + ) @property def native_value(self):