1 """Support for Synology DSM update platform."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from typing
import Final
8 from synology_dsm.api.core.upgrade
import SynoCoreUpgrade
17 from .const
import DOMAIN
18 from .coordinator
import SynologyDSMCentralUpdateCoordinator
19 from .entity
import SynologyDSMBaseEntity, SynologyDSMEntityDescription
20 from .models
import SynologyDSMData
23 @dataclass(frozen=True, kw_only=True)
25 UpdateEntityDescription, SynologyDSMEntityDescription
27 """Describes Synology DSM update entity."""
30 UPDATE_ENTITIES: Final = [
32 api_key=SynoCoreUpgrade.API_KEY,
34 translation_key=
"update",
35 entity_category=EntityCategory.DIAGNOSTIC,
41 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
43 """Set up Synology DSM update entities."""
44 data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
47 for description
in UPDATE_ENTITIES
52 SynologyDSMBaseEntity[SynologyDSMCentralUpdateCoordinator], UpdateEntity
54 """Mixin for update entity specific attributes."""
56 entity_description: SynologyDSMUpdateEntityEntityDescription
57 _attr_title =
"Synology DSM"
61 """Return True if entity is available."""
62 return bool(self._api.upgrade)
and super().available
66 """Version installed and in use."""
67 assert self._api.information
is not None
68 return self._api.information.version_string
72 """Latest version available for install."""
73 assert self._api.upgrade
is not None
74 if not self._api.upgrade.update_available:
76 return self._api.upgrade.available_version
80 """URL to the full release notes of the latest version available."""
81 assert self._api.information
is not None
82 assert self._api.upgrade
is not None
84 if (details := self._api.upgrade.available_version_details)
is None:
87 url =
URL(
"http://update.synology.com/autoupdate/whatsnew.php")
88 query = {
"model": self._api.information.model}
89 if details[
"nano"] > 0:
90 query[
"update_version"] = f
"{details['buildnumber']}-{details['nano']}"
92 query[
"update_version"] = details[
"buildnumber"]
94 return url.update_query(query).human_repr()
str|None latest_version(self)
str|None installed_version(self)
str|None release_url(self)
str|None installed_version(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)