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.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

View file

@ -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,
}
),
)

View file

@ -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,
}