Move nuki base entity to separate module (#126500)

This commit is contained in:
epenet 2024-09-23 11:55:03 +02:00 committed by GitHub
parent 5b1e4e0691
commit 9b9edecaac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 49 additions and 36 deletions

View File

@ -10,7 +10,6 @@ import logging
from aiohttp import web from aiohttp import web
from pynuki import NukiBridge, NukiLock, NukiOpener from pynuki import NukiBridge, NukiLock, NukiOpener
from pynuki.bridge import InvalidCredentialsException from pynuki.bridge import InvalidCredentialsException
from pynuki.device import NukiDevice
from requests.exceptions import RequestException from requests.exceptions import RequestException
from homeassistant import exceptions from homeassistant import exceptions
@ -25,9 +24,8 @@ from homeassistant.const import (
) )
from homeassistant.core import Event, HomeAssistant from homeassistant.core import Event, HomeAssistant
from homeassistant.helpers import device_registry as dr, issue_registry as ir from homeassistant.helpers import device_registry as dr, issue_registry as ir
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.network import NoURLAvailableError, get_url from homeassistant.helpers.network import NoURLAvailableError, get_url
from homeassistant.helpers.update_coordinator import CoordinatorEntity, UpdateFailed from homeassistant.helpers.update_coordinator import UpdateFailed
from .const import CONF_ENCRYPT_TOKEN, DEFAULT_TIMEOUT, DOMAIN from .const import CONF_ENCRYPT_TOKEN, DEFAULT_TIMEOUT, DOMAIN
from .coordinator import NukiCoordinator from .coordinator import NukiCoordinator
@ -266,33 +264,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok return unload_ok
class NukiEntity[_NukiDeviceT: NukiDevice](CoordinatorEntity[NukiCoordinator]):
"""An entity using CoordinatorEntity.
The CoordinatorEntity class provides:
should_poll
async_update
async_added_to_hass
available
"""
def __init__(self, coordinator: NukiCoordinator, nuki_device: _NukiDeviceT) -> None:
"""Pass coordinator to CoordinatorEntity."""
super().__init__(coordinator)
self._nuki_device = nuki_device
@property
def device_info(self) -> DeviceInfo:
"""Device info for Nuki entities."""
return DeviceInfo(
identifiers={(DOMAIN, parse_id(self._nuki_device.nuki_id))},
name=self._nuki_device.name,
manufacturer="Nuki Home Solutions GmbH",
model=self._nuki_device.device_model_str.capitalize(),
sw_version=self._nuki_device.firmware_version,
via_device=(DOMAIN, self.coordinator.bridge_id),
serial_number=parse_id(self._nuki_device.nuki_id),
)

View File

@ -14,8 +14,9 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import NukiEntity, NukiEntryData from . import NukiEntryData
from .const import DOMAIN as NUKI_DOMAIN from .const import DOMAIN as NUKI_DOMAIN
from .entity import NukiEntity
async def async_setup_entry( async def async_setup_entry(

View File

@ -0,0 +1,42 @@
"""The nuki component."""
from __future__ import annotations
from pynuki.device import NukiDevice
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN
from .coordinator import NukiCoordinator
from .helpers import parse_id
class NukiEntity[_NukiDeviceT: NukiDevice](CoordinatorEntity[NukiCoordinator]):
"""An entity using CoordinatorEntity.
The CoordinatorEntity class provides:
should_poll
async_update
async_added_to_hass
available
"""
def __init__(self, coordinator: NukiCoordinator, nuki_device: _NukiDeviceT) -> None:
"""Pass coordinator to CoordinatorEntity."""
super().__init__(coordinator)
self._nuki_device = nuki_device
@property
def device_info(self) -> DeviceInfo:
"""Device info for Nuki entities."""
return DeviceInfo(
identifiers={(DOMAIN, parse_id(self._nuki_device.nuki_id))},
name=self._nuki_device.name,
manufacturer="Nuki Home Solutions GmbH",
model=self._nuki_device.device_model_str.capitalize(),
sw_version=self._nuki_device.firmware_version,
via_device=(DOMAIN, self.coordinator.bridge_id),
serial_number=parse_id(self._nuki_device.nuki_id),
)

View File

@ -17,8 +17,9 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers import config_validation as cv, entity_platform
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import NukiEntity, NukiEntryData from . import NukiEntryData
from .const import ATTR_ENABLE, ATTR_UNLATCH, DOMAIN as NUKI_DOMAIN, ERROR_STATES from .const import ATTR_ENABLE, ATTR_UNLATCH, DOMAIN as NUKI_DOMAIN, ERROR_STATES
from .entity import NukiEntity
from .helpers import CannotConnect from .helpers import CannotConnect

View File

@ -10,8 +10,9 @@ from homeassistant.const import PERCENTAGE, EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import NukiEntity, NukiEntryData from . import NukiEntryData
from .const import DOMAIN as NUKI_DOMAIN from .const import DOMAIN as NUKI_DOMAIN
from .entity import NukiEntity
async def async_setup_entry( async def async_setup_entry(