diff --git a/homeassistant/components/synology_dsm/camera.py b/homeassistant/components/synology_dsm/camera.py index 8d4f74bd132..0999ef858c6 100644 --- a/homeassistant/components/synology_dsm/camera.py +++ b/homeassistant/components/synology_dsm/camera.py @@ -22,7 +22,14 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from . import SynoApi, SynologyDSMBaseEntity -from .const import COORDINATOR_CAMERAS, DOMAIN, SYNO_API, SynologyDSMEntityDescription +from .const import ( + CONF_SNAPSHOT_QUALITY, + COORDINATOR_CAMERAS, + DEFAULT_SNAPSHOT_QUALITY, + DOMAIN, + SYNO_API, + SynologyDSMEntityDescription, +) _LOGGER = logging.getLogger(__name__) @@ -78,6 +85,9 @@ class SynoDSMCamera(SynologyDSMBaseEntity, Camera): camera_id ].is_enabled, ) + self.snapshot_quality = api._entry.options.get( + CONF_SNAPSHOT_QUALITY, DEFAULT_SNAPSHOT_QUALITY + ) super().__init__(api, coordinator, description) Camera.__init__(self) @@ -135,7 +145,7 @@ class SynoDSMCamera(SynologyDSMBaseEntity, Camera): if not self.available: return None try: - return self._api.surveillance_station.get_camera_image(self.entity_description.key) # type: ignore[no-any-return] + return self._api.surveillance_station.get_camera_image(self.entity_description.key, self.snapshot_quality) # type: ignore[no-any-return] except ( SynologyDSMAPIErrorException, SynologyDSMRequestException, diff --git a/homeassistant/components/synology_dsm/config_flow.py b/homeassistant/components/synology_dsm/config_flow.py index 8b3a566d854..91ad49c5f84 100644 --- a/homeassistant/components/synology_dsm/config_flow.py +++ b/homeassistant/components/synology_dsm/config_flow.py @@ -39,10 +39,12 @@ from homeassistant.helpers.typing import DiscoveryInfoType from .const import ( CONF_DEVICE_TOKEN, + CONF_SNAPSHOT_QUALITY, CONF_VOLUMES, DEFAULT_PORT, DEFAULT_PORT_SSL, DEFAULT_SCAN_INTERVAL, + DEFAULT_SNAPSHOT_QUALITY, DEFAULT_TIMEOUT, DEFAULT_USE_SSL, DEFAULT_VERIFY_SSL, @@ -357,18 +359,24 @@ class SynologyDSMOptionsFlowHandler(OptionsFlow): data_schema = vol.Schema( { - vol.Optional( + vol.Required( CONF_SCAN_INTERVAL, default=self.config_entry.options.get( CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL ), ): cv.positive_int, - vol.Optional( + vol.Required( CONF_TIMEOUT, default=self.config_entry.options.get( CONF_TIMEOUT, DEFAULT_TIMEOUT ), ): cv.positive_int, + vol.Required( + CONF_SNAPSHOT_QUALITY, + default=self.config_entry.options.get( + CONF_SNAPSHOT_QUALITY, DEFAULT_SNAPSHOT_QUALITY + ), + ): vol.All(vol.Coerce(int), vol.Range(min=0, max=2)), } ) return self.async_show_form(step_id="init", data_schema=data_schema) diff --git a/homeassistant/components/synology_dsm/const.py b/homeassistant/components/synology_dsm/const.py index 5b7c8648416..18707c24f95 100644 --- a/homeassistant/components/synology_dsm/const.py +++ b/homeassistant/components/synology_dsm/const.py @@ -9,6 +9,7 @@ from synology_dsm.api.core.utilization import SynoCoreUtilization from synology_dsm.api.dsm.information import SynoDSMInformation from synology_dsm.api.storage.storage import SynoStorage from synology_dsm.api.surveillance_station import SynoSurveillanceStation +from synology_dsm.api.surveillance_station.const import SNAPSHOT_PROFILE_BALANCED from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, @@ -47,6 +48,7 @@ UNDO_UPDATE_LISTENER = "undo_update_listener" CONF_SERIAL = "serial" CONF_VOLUMES = "volumes" CONF_DEVICE_TOKEN = "device_token" +CONF_SNAPSHOT_QUALITY = "snap_profile_type" DEFAULT_USE_SSL = True DEFAULT_VERIFY_SSL = False @@ -55,6 +57,7 @@ DEFAULT_PORT_SSL = 5001 # Options DEFAULT_SCAN_INTERVAL = 15 # min DEFAULT_TIMEOUT = 10 # sec +DEFAULT_SNAPSHOT_QUALITY = SNAPSHOT_PROFILE_BALANCED ENTITY_UNIT_LOAD = "load" diff --git a/homeassistant/components/synology_dsm/strings.json b/homeassistant/components/synology_dsm/strings.json index d5d0728db77..501cbfb5fff 100644 --- a/homeassistant/components/synology_dsm/strings.json +++ b/homeassistant/components/synology_dsm/strings.json @@ -56,7 +56,8 @@ "init": { "data": { "scan_interval": "Minutes between scans", - "timeout": "Timeout (seconds)" + "timeout": "Timeout (seconds)", + "snap_profile_type": "Quality level of camera snapshots (0:high 1:medium 2:low)" } } } diff --git a/homeassistant/components/synology_dsm/translations/en.json b/homeassistant/components/synology_dsm/translations/en.json index b86c8a3fe57..b9087aa4063 100644 --- a/homeassistant/components/synology_dsm/translations/en.json +++ b/homeassistant/components/synology_dsm/translations/en.json @@ -31,14 +31,6 @@ "description": "Do you want to setup {name} ({host})?", "title": "Synology DSM" }, - "reauth": { - "data": { - "password": "Password", - "username": "Username" - }, - "description": "Reason: {details}", - "title": "Synology DSM Reauthenticate Integration" - }, "reauth_confirm": { "data": { "password": "Password", @@ -64,6 +56,7 @@ "init": { "data": { "scan_interval": "Minutes between scans", + "snap_profile_type": "Quality level of camera snapshots (0:high 1:medium 2:low)", "timeout": "Timeout (seconds)" } } diff --git a/tests/components/synology_dsm/test_config_flow.py b/tests/components/synology_dsm/test_config_flow.py index 3907f9c42ec..8cec30abefa 100644 --- a/tests/components/synology_dsm/test_config_flow.py +++ b/tests/components/synology_dsm/test_config_flow.py @@ -14,10 +14,12 @@ from homeassistant import data_entry_flow from homeassistant.components import ssdp from homeassistant.components.synology_dsm.config_flow import CONF_OTP_CODE from homeassistant.components.synology_dsm.const import ( + CONF_SNAPSHOT_QUALITY, CONF_VOLUMES, DEFAULT_PORT, DEFAULT_PORT_SSL, DEFAULT_SCAN_INTERVAL, + DEFAULT_SNAPSHOT_QUALITY, DEFAULT_TIMEOUT, DEFAULT_USE_SSL, DEFAULT_VERIFY_SSL, @@ -545,13 +547,15 @@ async def test_options_flow(hass: HomeAssistant, service: MagicMock): assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert config_entry.options[CONF_SCAN_INTERVAL] == DEFAULT_SCAN_INTERVAL assert config_entry.options[CONF_TIMEOUT] == DEFAULT_TIMEOUT + assert config_entry.options[CONF_SNAPSHOT_QUALITY] == DEFAULT_SNAPSHOT_QUALITY # Manual result = await hass.config_entries.options.async_init(config_entry.entry_id) result = await hass.config_entries.options.async_configure( result["flow_id"], - user_input={CONF_SCAN_INTERVAL: 2, CONF_TIMEOUT: 30}, + user_input={CONF_SCAN_INTERVAL: 2, CONF_TIMEOUT: 30, CONF_SNAPSHOT_QUALITY: 0}, ) assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert config_entry.options[CONF_SCAN_INTERVAL] == 2 assert config_entry.options[CONF_TIMEOUT] == 30 + assert config_entry.options[CONF_SNAPSHOT_QUALITY] == 0