Make Reolink reboot button always available (#136667)

This commit is contained in:
starkillerOG 2025-01-31 13:15:22 +01:00 committed by GitHub
parent c7041a97be
commit 66f048f49f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 19 deletions

View File

@ -138,6 +138,7 @@ BUTTON_ENTITIES = (
HOST_BUTTON_ENTITIES = (
ReolinkHostButtonEntityDescription(
key="reboot",
always_available=True,
device_class=ButtonDeviceClass.RESTART,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=False,
@ -218,7 +219,7 @@ class ReolinkButtonEntity(ReolinkChannelCoordinatorEntity, ButtonEntity):
class ReolinkHostButtonEntity(ReolinkHostCoordinatorEntity, ButtonEntity):
"""Base button entity class for Reolink IP cameras."""
"""Base button entity class for Reolink hosts."""
entity_description: ReolinkHostButtonEntityDescription

View File

@ -25,6 +25,7 @@ class ReolinkEntityDescription(EntityDescription):
cmd_key: str | None = None
cmd_id: int | None = None
always_available: bool = False
@dataclass(frozen=True, kw_only=True)
@ -92,6 +93,9 @@ class ReolinkHostCoordinatorEntity(CoordinatorEntity[DataUpdateCoordinator[None]
@property
def available(self) -> bool:
"""Return True if entity is available."""
if self.entity_description.always_available:
return True
return (
self._host.api.session_active
and not self._host.api.baichuan.privacy_mode()

View File

@ -206,11 +206,9 @@ SWITCH_ENTITIES = (
value=lambda api, ch: api.pir_reduce_alarm(ch) is True,
method=lambda api, ch, value: api.set_pir(ch, reduce_alarm=value),
),
)
AVAILABILITY_SWITCH_ENTITIES = (
ReolinkSwitchEntityDescription(
key="privacy_mode",
always_available=True,
translation_key="privacy_mode",
entity_category=EntityCategory.CONFIG,
supported=lambda api, ch: api.supported(ch, "privacy_mode"),
@ -355,12 +353,6 @@ async def async_setup_entry(
for entity_description in CHIME_SWITCH_ENTITIES
for chime in reolink_data.host.api.chime_list
)
entities.extend(
ReolinkAvailabilitySwitchEntity(reolink_data, channel, entity_description)
for entity_description in AVAILABILITY_SWITCH_ENTITIES
for channel in reolink_data.host.api.channels
if entity_description.supported(reolink_data.host.api, channel)
)
# Can be removed in HA 2025.4.0
depricated_dict = {}
@ -426,15 +418,6 @@ class ReolinkSwitchEntity(ReolinkChannelCoordinatorEntity, SwitchEntity):
self.async_write_ha_state()
class ReolinkAvailabilitySwitchEntity(ReolinkSwitchEntity):
"""Switch entity class for Reolink IP cameras which will be available even if API is unavailable."""
@property
def available(self) -> bool:
"""Return True if entity is available."""
return self._host.api.camera_online(self._channel)
class ReolinkNVRSwitchEntity(ReolinkHostCoordinatorEntity, SwitchEntity):
"""Switch entity class for Reolink NVR features."""