From 79fb5e1bec90a9b1b313419702ea620172dd0849 Mon Sep 17 00:00:00 2001 From: uvjustin <46082645+uvjustin@users.noreply.github.com> Date: Mon, 23 May 2022 13:54:49 +0800 Subject: [PATCH] Add use wallclock as timestamps option to onvif (#71983) --- homeassistant/components/onvif/camera.py | 8 ++++++- homeassistant/components/onvif/config_flow.py | 21 ++++++++++++++++++- tests/components/onvif/test_config_flow.py | 6 +++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/onvif/camera.py b/homeassistant/components/onvif/camera.py index e46e1a2ac59..6aa7ae42767 100644 --- a/homeassistant/components/onvif/camera.py +++ b/homeassistant/components/onvif/camera.py @@ -9,7 +9,10 @@ from yarl import URL from homeassistant.components import ffmpeg from homeassistant.components.camera import Camera, CameraEntityFeature from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, get_ffmpeg_manager -from homeassistant.components.stream import CONF_RTSP_TRANSPORT +from homeassistant.components.stream import ( + CONF_RTSP_TRANSPORT, + CONF_USE_WALLCLOCK_AS_TIMESTAMPS, +) from homeassistant.config_entries import ConfigEntry from homeassistant.const import HTTP_BASIC_AUTHENTICATION from homeassistant.core import HomeAssistant @@ -97,6 +100,9 @@ class ONVIFCameraEntity(ONVIFBaseEntity, Camera): self.stream_options[CONF_RTSP_TRANSPORT] = device.config_entry.options.get( CONF_RTSP_TRANSPORT ) + self.stream_options[ + CONF_USE_WALLCLOCK_AS_TIMESTAMPS + ] = device.config_entry.options.get(CONF_USE_WALLCLOCK_AS_TIMESTAMPS, False) self._basic_auth = ( device.config_entry.data.get(CONF_SNAPSHOT_AUTH) == HTTP_BASIC_AUTHENTICATION diff --git a/homeassistant/components/onvif/config_flow.py b/homeassistant/components/onvif/config_flow.py index 894f2fee3df..1ee0be18467 100644 --- a/homeassistant/components/onvif/config_flow.py +++ b/homeassistant/components/onvif/config_flow.py @@ -13,7 +13,11 @@ from zeep.exceptions import Fault from homeassistant import config_entries from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS -from homeassistant.components.stream import CONF_RTSP_TRANSPORT, RTSP_TRANSPORTS +from homeassistant.components.stream import ( + CONF_RTSP_TRANSPORT, + CONF_USE_WALLCLOCK_AS_TIMESTAMPS, + RTSP_TRANSPORTS, +) from homeassistant.const import ( CONF_HOST, CONF_NAME, @@ -272,8 +276,22 @@ class OnvifOptionsFlowHandler(config_entries.OptionsFlow): if user_input is not None: self.options[CONF_EXTRA_ARGUMENTS] = user_input[CONF_EXTRA_ARGUMENTS] self.options[CONF_RTSP_TRANSPORT] = user_input[CONF_RTSP_TRANSPORT] + self.options[CONF_USE_WALLCLOCK_AS_TIMESTAMPS] = user_input.get( + CONF_USE_WALLCLOCK_AS_TIMESTAMPS, + self.config_entry.options.get(CONF_USE_WALLCLOCK_AS_TIMESTAMPS, False), + ) return self.async_create_entry(title="", data=self.options) + advanced_options = {} + if self.show_advanced_options: + advanced_options[ + vol.Optional( + CONF_USE_WALLCLOCK_AS_TIMESTAMPS, + default=self.config_entry.options.get( + CONF_USE_WALLCLOCK_AS_TIMESTAMPS, False + ), + ) + ] = bool return self.async_show_form( step_id="onvif_devices", data_schema=vol.Schema( @@ -290,6 +308,7 @@ class OnvifOptionsFlowHandler(config_entries.OptionsFlow): CONF_RTSP_TRANSPORT, next(iter(RTSP_TRANSPORTS)) ), ): vol.In(RTSP_TRANSPORTS), + **advanced_options, } ), ) diff --git a/tests/components/onvif/test_config_flow.py b/tests/components/onvif/test_config_flow.py index 1e4dabfe7cf..fec1e2b8132 100644 --- a/tests/components/onvif/test_config_flow.py +++ b/tests/components/onvif/test_config_flow.py @@ -314,7 +314,9 @@ async def test_option_flow(hass): """Test config flow options.""" entry, _, _ = await setup_onvif_integration(hass) - result = await hass.config_entries.options.async_init(entry.entry_id) + result = await hass.config_entries.options.async_init( + entry.entry_id, context={"show_advanced_options": True} + ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "onvif_devices" @@ -324,6 +326,7 @@ async def test_option_flow(hass): user_input={ config_flow.CONF_EXTRA_ARGUMENTS: "", config_flow.CONF_RTSP_TRANSPORT: list(config_flow.RTSP_TRANSPORTS)[1], + config_flow.CONF_USE_WALLCLOCK_AS_TIMESTAMPS: True, }, ) @@ -331,4 +334,5 @@ async def test_option_flow(hass): assert result["data"] == { config_flow.CONF_EXTRA_ARGUMENTS: "", config_flow.CONF_RTSP_TRANSPORT: list(config_flow.RTSP_TRANSPORTS)[1], + config_flow.CONF_USE_WALLCLOCK_AS_TIMESTAMPS: True, }