Fix Comelit device info (#100587)

This commit is contained in:
Simone Chemelli 2023-09-24 14:51:56 +02:00 committed by GitHub
parent 0dc21504f5
commit b19a0fb2e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 12 deletions

View File

@ -3,11 +3,14 @@ import asyncio
from datetime import timedelta from datetime import timedelta
from typing import Any from typing import Any
from aiocomelit import ComeliteSerialBridgeApi from aiocomelit import ComeliteSerialBridgeApi, ComelitSerialBridgeObject
from aiocomelit.const import BRIDGE
import aiohttp import aiohttp
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import _LOGGER, DOMAIN from .const import _LOGGER, DOMAIN
@ -16,6 +19,8 @@ from .const import _LOGGER, DOMAIN
class ComelitSerialBridge(DataUpdateCoordinator): class ComelitSerialBridge(DataUpdateCoordinator):
"""Queries Comelit Serial Bridge.""" """Queries Comelit Serial Bridge."""
config_entry: ConfigEntry
def __init__(self, hass: HomeAssistant, host: str, pin: int) -> None: def __init__(self, hass: HomeAssistant, host: str, pin: int) -> None:
"""Initialize the scanner.""" """Initialize the scanner."""
@ -30,6 +35,38 @@ class ComelitSerialBridge(DataUpdateCoordinator):
name=f"{DOMAIN}-{host}-coordinator", name=f"{DOMAIN}-{host}-coordinator",
update_interval=timedelta(seconds=5), 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]: async def _async_update_data(self) -> dict[str, Any]:
"""Update router data.""" """Update router data."""

View File

@ -9,7 +9,6 @@ from aiocomelit.const import LIGHT, LIGHT_OFF, LIGHT_ON
from homeassistant.components.light import LightEntity from homeassistant.components.light import LightEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
@ -37,27 +36,20 @@ class ComelitLightEntity(CoordinatorEntity[ComelitSerialBridge], LightEntity):
"""Light device.""" """Light device."""
_attr_has_entity_name = True _attr_has_entity_name = True
_attr_name = None
def __init__( def __init__(
self, self,
coordinator: ComelitSerialBridge, coordinator: ComelitSerialBridge,
device: ComelitSerialBridgeObject, device: ComelitSerialBridgeObject,
config_entry_unique_id: str | None, config_entry_unique_id: str,
) -> None: ) -> None:
"""Init light entity.""" """Init light entity."""
self._api = coordinator.api self._api = coordinator.api
self._device = device self._device = device
super().__init__(coordinator) super().__init__(coordinator)
self._attr_name = device.name
self._attr_unique_id = f"{config_entry_unique_id}-{device.index}" self._attr_unique_id = f"{config_entry_unique_id}-{device.index}"
self._attr_device_info = DeviceInfo( self._attr_device_info = self.coordinator.platform_device_info(device, LIGHT)
identifiers={
(DOMAIN, self._attr_unique_id),
},
manufacturer="Comelit",
model="Serial Bridge",
name=device.name,
)
async def _light_set_state(self, state: int) -> None: async def _light_set_state(self, state: int) -> None:
"""Set desired light state.""" """Set desired light state."""