diff --git a/homeassistant/components/synology_dsm/__init__.py b/homeassistant/components/synology_dsm/__init__.py index 44a68b4c18c2f2b5ba3b2bc1a3f3cdf4fa7f2eb5..f5e57934b63d88b47ffcf2afb7427ed1798be538 100644 --- a/homeassistant/components/synology_dsm/__init__.py +++ b/homeassistant/components/synology_dsm/__init__.py @@ -6,6 +6,7 @@ from typing import Dict from synology_dsm import SynologyDSM from synology_dsm.api.core.security import SynoCoreSecurity +from synology_dsm.api.core.upgrade import SynoCoreUpgrade from synology_dsm.api.core.utilization import SynoCoreUtilization from synology_dsm.api.dsm.information import SynoDSMInformation from synology_dsm.api.dsm.network import SynoDSMNetwork @@ -230,6 +231,7 @@ class SynoApi: self.information: SynoDSMInformation = None self.network: SynoDSMNetwork = None self.security: SynoCoreSecurity = None + self.upgrade: SynoCoreUpgrade = None self.storage: SynoStorage = None self.utilisation: SynoCoreUtilization = None self.surveillance_station: SynoSurveillanceStation = None @@ -238,6 +240,7 @@ class SynoApi: self._fetching_entities = {} self._with_security = True self._with_storage = True + self._with_upgrade = True self._with_utilisation = True self._with_information = True self._with_surveillance_station = True @@ -308,6 +311,7 @@ class SynoApi: self._fetching_entities.get(SynoCoreSecurity.API_KEY) ) self._with_storage = bool(self._fetching_entities.get(SynoStorage.API_KEY)) + self._with_upgrade = bool(self._fetching_entities.get(SynoCoreUpgrade.API_KEY)) self._with_utilisation = bool( self._fetching_entities.get(SynoCoreUtilization.API_KEY) ) @@ -329,6 +333,10 @@ class SynoApi: self.dsm.reset(self.storage) self.storage = None + if not self._with_upgrade: + self.dsm.reset(self.upgrade) + self.upgrade = None + if not self._with_utilisation: self.dsm.reset(self.utilisation) self.utilisation = None @@ -349,6 +357,9 @@ class SynoApi: if self._with_storage: self.storage = self.dsm.storage + if self._with_upgrade: + self.upgrade = self.dsm.upgrade + if self._with_utilisation: self.utilisation = self.dsm.utilisation diff --git a/homeassistant/components/synology_dsm/binary_sensor.py b/homeassistant/components/synology_dsm/binary_sensor.py index 6c11d31b7f7c9c211facc8164113e3cd88762dfa..69f217a4b4e9c0398928e32c96b9b2d92567a9f8 100644 --- a/homeassistant/components/synology_dsm/binary_sensor.py +++ b/homeassistant/components/synology_dsm/binary_sensor.py @@ -12,6 +12,7 @@ from .const import ( SECURITY_BINARY_SENSORS, STORAGE_DISK_BINARY_SENSORS, SYNO_API, + UPGRADE_BINARY_SENSORS, ) @@ -29,6 +30,13 @@ async def async_setup_entry( for sensor_type in SECURITY_BINARY_SENSORS ] + entities += [ + SynoDSMUpgradeBinarySensor( + api, sensor_type, UPGRADE_BINARY_SENSORS[sensor_type] + ) + for sensor_type in UPGRADE_BINARY_SENSORS + ] + # Handle all disks if api.storage.disks_ids: for disk in entry.data.get(CONF_DISKS, api.storage.disks_ids): @@ -68,3 +76,17 @@ class SynoDSMStorageBinarySensor(SynologyDSMDeviceEntity, BinarySensorEntity): def is_on(self) -> bool: """Return the state.""" return getattr(self._api.storage, self.entity_type)(self._device_id) + + +class SynoDSMUpgradeBinarySensor(SynologyDSMEntity, BinarySensorEntity): + """Representation a Synology Upgrade binary sensor.""" + + @property + def is_on(self) -> bool: + """Return the state.""" + return getattr(self._api.upgrade, self.entity_type) + + @property + def available(self) -> bool: + """Return True if entity is available.""" + return bool(self._api.upgrade) diff --git a/homeassistant/components/synology_dsm/const.py b/homeassistant/components/synology_dsm/const.py index 82bb232461e201521326c91f23be6f7f3f14e595..f8b05b25fe0f3309987019e231fce4ff3b179be5 100644 --- a/homeassistant/components/synology_dsm/const.py +++ b/homeassistant/components/synology_dsm/const.py @@ -1,6 +1,7 @@ """Constants for Synology DSM.""" from synology_dsm.api.core.security import SynoCoreSecurity +from synology_dsm.api.core.upgrade import SynoCoreUpgrade from synology_dsm.api.core.utilization import SynoCoreUtilization from synology_dsm.api.dsm.information import SynoDSMInformation from synology_dsm.api.storage.storage import SynoStorage @@ -43,6 +44,16 @@ ENTITY_ENABLE = "enable" # Entity keys should start with the API_KEY to fetch # Binary sensors +UPGRADE_BINARY_SENSORS = { + f"{SynoCoreUpgrade.API_KEY}:update_available": { + ENTITY_NAME: "Update available", + ENTITY_UNIT: None, + ENTITY_ICON: "mdi:update", + ENTITY_CLASS: None, + ENTITY_ENABLE: True, + }, +} + SECURITY_BINARY_SENSORS = { f"{SynoCoreSecurity.API_KEY}:status": { ENTITY_NAME: "Security status",