From 49b8937bb3ef088c759e98773241e838d14f9c61 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Sun, 24 Sep 2023 14:51:56 +0200 Subject: [PATCH] Fix Comelit device info (#100587) --- .../components/comelit/coordinator.py | 39 ++++++++++++++++++- homeassistant/components/comelit/light.py | 14 ++----- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/comelit/coordinator.py b/homeassistant/components/comelit/coordinator.py index 1fcbd7c0d37..df1d745ce8a 100644 --- a/homeassistant/components/comelit/coordinator.py +++ b/homeassistant/components/comelit/coordinator.py @@ -3,11 +3,14 @@ import asyncio from datetime import timedelta from typing import Any -from aiocomelit import ComeliteSerialBridgeApi +from aiocomelit import ComeliteSerialBridgeApi, ComelitSerialBridgeObject +from aiocomelit.const import BRIDGE import aiohttp +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.update_coordinator import DataUpdateCoordinator, UpdateFailed from .const import _LOGGER, DOMAIN @@ -16,6 +19,8 @@ from .const import _LOGGER, DOMAIN class ComelitSerialBridge(DataUpdateCoordinator): """Queries Comelit Serial Bridge.""" + config_entry: ConfigEntry + def __init__(self, hass: HomeAssistant, host: str, pin: int) -> None: """Initialize the scanner.""" @@ -30,6 +35,38 @@ class ComelitSerialBridge(DataUpdateCoordinator): name=f"{DOMAIN}-{host}-coordinator", update_interval=timedelta(seconds=5), ) + device_registry = dr.async_get(self.hass) + device_registry.async_get_or_create( + config_entry_id=self.config_entry.entry_id, + identifiers={(DOMAIN, self.config_entry.entry_id)}, + model=BRIDGE, + name=f"{BRIDGE} ({self.api.host})", + **self.basic_device_info, + ) + + @property + def basic_device_info(self) -> dict: + """Set basic device info.""" + + return { + "manufacturer": "Comelit", + "hw_version": "20003101", + } + + def platform_device_info( + self, device: ComelitSerialBridgeObject, platform: str + ) -> dr.DeviceInfo: + """Set platform device info.""" + + return dr.DeviceInfo( + identifiers={ + (DOMAIN, f"{self.config_entry.entry_id}-{platform}-{device.index}") + }, + via_device=(DOMAIN, self.config_entry.entry_id), + name=device.name, + model=f"{BRIDGE} {platform}", + **self.basic_device_info, + ) async def _async_update_data(self) -> dict[str, Any]: """Update router data.""" diff --git a/homeassistant/components/comelit/light.py b/homeassistant/components/comelit/light.py index 9a893bd929c..a4a534025f0 100644 --- a/homeassistant/components/comelit/light.py +++ b/homeassistant/components/comelit/light.py @@ -9,7 +9,6 @@ from aiocomelit.const import LIGHT, LIGHT_OFF, LIGHT_ON from homeassistant.components.light import LightEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity @@ -37,27 +36,20 @@ class ComelitLightEntity(CoordinatorEntity[ComelitSerialBridge], LightEntity): """Light device.""" _attr_has_entity_name = True - _attr_name = None def __init__( self, coordinator: ComelitSerialBridge, device: ComelitSerialBridgeObject, - config_entry_unique_id: str | None, + config_entry_unique_id: str, ) -> None: """Init light entity.""" self._api = coordinator.api self._device = device super().__init__(coordinator) + self._attr_name = device.name self._attr_unique_id = f"{config_entry_unique_id}-{device.index}" - self._attr_device_info = DeviceInfo( - identifiers={ - (DOMAIN, self._attr_unique_id), - }, - manufacturer="Comelit", - model="Serial Bridge", - name=device.name, - ) + self._attr_device_info = self.coordinator.platform_device_info(device, LIGHT) async def _light_set_state(self, state: int) -> None: """Set desired light state."""