Add use wallclock as timestamps option to onvif (#71983)

This commit is contained in:
uvjustin 2022-05-23 13:54:49 +08:00 committed by GitHub
parent 20960e182d
commit 79fb5e1bec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 3 deletions

View File

@ -9,7 +9,10 @@ from yarl import URL
from homeassistant.components import ffmpeg from homeassistant.components import ffmpeg
from homeassistant.components.camera import Camera, CameraEntityFeature from homeassistant.components.camera import Camera, CameraEntityFeature
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, get_ffmpeg_manager 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.config_entries import ConfigEntry
from homeassistant.const import HTTP_BASIC_AUTHENTICATION from homeassistant.const import HTTP_BASIC_AUTHENTICATION
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -97,6 +100,9 @@ class ONVIFCameraEntity(ONVIFBaseEntity, Camera):
self.stream_options[CONF_RTSP_TRANSPORT] = device.config_entry.options.get( self.stream_options[CONF_RTSP_TRANSPORT] = device.config_entry.options.get(
CONF_RTSP_TRANSPORT 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 = ( self._basic_auth = (
device.config_entry.data.get(CONF_SNAPSHOT_AUTH) device.config_entry.data.get(CONF_SNAPSHOT_AUTH)
== HTTP_BASIC_AUTHENTICATION == HTTP_BASIC_AUTHENTICATION

View File

@ -13,7 +13,11 @@ from zeep.exceptions import Fault
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS 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 ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
CONF_NAME, CONF_NAME,
@ -272,8 +276,22 @@ class OnvifOptionsFlowHandler(config_entries.OptionsFlow):
if user_input is not None: if user_input is not None:
self.options[CONF_EXTRA_ARGUMENTS] = user_input[CONF_EXTRA_ARGUMENTS] self.options[CONF_EXTRA_ARGUMENTS] = user_input[CONF_EXTRA_ARGUMENTS]
self.options[CONF_RTSP_TRANSPORT] = user_input[CONF_RTSP_TRANSPORT] 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) 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( return self.async_show_form(
step_id="onvif_devices", step_id="onvif_devices",
data_schema=vol.Schema( data_schema=vol.Schema(
@ -290,6 +308,7 @@ class OnvifOptionsFlowHandler(config_entries.OptionsFlow):
CONF_RTSP_TRANSPORT, next(iter(RTSP_TRANSPORTS)) CONF_RTSP_TRANSPORT, next(iter(RTSP_TRANSPORTS))
), ),
): vol.In(RTSP_TRANSPORTS), ): vol.In(RTSP_TRANSPORTS),
**advanced_options,
} }
), ),
) )

View File

@ -314,7 +314,9 @@ async def test_option_flow(hass):
"""Test config flow options.""" """Test config flow options."""
entry, _, _ = await setup_onvif_integration(hass) 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["type"] == data_entry_flow.RESULT_TYPE_FORM
assert result["step_id"] == "onvif_devices" assert result["step_id"] == "onvif_devices"
@ -324,6 +326,7 @@ async def test_option_flow(hass):
user_input={ user_input={
config_flow.CONF_EXTRA_ARGUMENTS: "", config_flow.CONF_EXTRA_ARGUMENTS: "",
config_flow.CONF_RTSP_TRANSPORT: list(config_flow.RTSP_TRANSPORTS)[1], 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"] == { assert result["data"] == {
config_flow.CONF_EXTRA_ARGUMENTS: "", config_flow.CONF_EXTRA_ARGUMENTS: "",
config_flow.CONF_RTSP_TRANSPORT: list(config_flow.RTSP_TRANSPORTS)[1], config_flow.CONF_RTSP_TRANSPORT: list(config_flow.RTSP_TRANSPORTS)[1],
config_flow.CONF_USE_WALLCLOCK_AS_TIMESTAMPS: True,
} }