Initial Commit
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
"""AsusRouter update module."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
from asusrouter.modules.system import AsusSystem
|
||||
from homeassistant.components.update import UpdateEntity, UpdateEntityFeature
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||
|
||||
from .const import STATIC_UPDATES
|
||||
from .dataclass import ARUpdateDescription
|
||||
from .entity import ARBinaryEntity, async_setup_ar_entry
|
||||
from .router import ARDevice
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up AsusRouter updates."""
|
||||
|
||||
updates = STATIC_UPDATES.copy()
|
||||
|
||||
await async_setup_ar_entry(
|
||||
hass, config_entry, async_add_entities, updates, ARUpdate
|
||||
)
|
||||
|
||||
|
||||
class ARUpdate(ARBinaryEntity, UpdateEntity):
|
||||
"""AsusRouter update."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
coordinator: DataUpdateCoordinator,
|
||||
router: ARDevice,
|
||||
description: ARUpdateDescription,
|
||||
) -> None:
|
||||
"""Initialize AsusRouter update."""
|
||||
|
||||
super().__init__(coordinator, router, description)
|
||||
self.entity_description: ARUpdateDescription = description
|
||||
|
||||
self._attr_installed_version = self.extra_state_attributes.get(
|
||||
"current"
|
||||
)
|
||||
self._attr_latest_version = self.extra_state_attributes.get("latest")
|
||||
self._attr_release_summary = self.extra_state_attributes.get(
|
||||
"release_note"
|
||||
)
|
||||
self._attr_in_progress = False
|
||||
|
||||
self._attr_supported_features = (
|
||||
UpdateEntityFeature.RELEASE_NOTES
|
||||
| UpdateEntityFeature.INSTALL
|
||||
| UpdateEntityFeature.PROGRESS
|
||||
)
|
||||
|
||||
def release_notes(self) -> str | None:
|
||||
"""Return the release notes."""
|
||||
|
||||
return self.extra_state_attributes.get("release_note")
|
||||
|
||||
async def async_install(
|
||||
self, version: str | None, backup: bool, **kwargs: Any
|
||||
) -> None:
|
||||
"""Install the update."""
|
||||
try:
|
||||
_LOGGER.debug(
|
||||
"Trying to install Firmware update. "
|
||||
"This might take several minutes."
|
||||
)
|
||||
result = await self.api.async_set_state(
|
||||
state=AsusSystem.FIRMWARE_UPGRADE,
|
||||
)
|
||||
if not result:
|
||||
_LOGGER.debug(
|
||||
"Something went wrong while trying to install the update."
|
||||
)
|
||||
else:
|
||||
self._attr_in_progress = True
|
||||
await asyncio.sleep(120)
|
||||
self._attr_in_progress = False
|
||||
|
||||
except Exception as ex: # noqa: BLE001
|
||||
_LOGGER.error(
|
||||
"An exception occurred while trying to install the update: %s",
|
||||
ex,
|
||||
)
|
||||
Reference in New Issue
Block a user