Clean up camera service schema (#49151)

This commit is contained in:
Tobias Sauerwein 2021-04-13 13:07:05 +02:00 committed by GitHub
parent 5365fb6c72
commit 2b79c91813
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 75 deletions

View File

@ -8,12 +8,7 @@ from amcrest import AmcrestError
from haffmpeg.camera import CameraMjpeg from haffmpeg.camera import CameraMjpeg
import voluptuous as vol import voluptuous as vol
from homeassistant.components.camera import ( from homeassistant.components.camera import SUPPORT_ON_OFF, SUPPORT_STREAM, Camera
CAMERA_SERVICE_SCHEMA,
SUPPORT_ON_OFF,
SUPPORT_STREAM,
Camera,
)
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import DATA_FFMPEG
from homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON from homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON
from homeassistant.helpers.aiohttp_client import ( from homeassistant.helpers.aiohttp_client import (
@ -82,30 +77,26 @@ _CBW_AUTO = "auto"
_CBW_BW = "bw" _CBW_BW = "bw"
_CBW = [_CBW_COLOR, _CBW_AUTO, _CBW_BW] _CBW = [_CBW_COLOR, _CBW_AUTO, _CBW_BW]
_SRV_GOTO_SCHEMA = CAMERA_SERVICE_SCHEMA.extend( _SRV_GOTO_SCHEMA = {
{vol.Required(_ATTR_PRESET): vol.All(vol.Coerce(int), vol.Range(min=1))} vol.Required(_ATTR_PRESET): vol.All(vol.Coerce(int), vol.Range(min=1))
) }
_SRV_CBW_SCHEMA = CAMERA_SERVICE_SCHEMA.extend( _SRV_CBW_SCHEMA = {vol.Required(_ATTR_COLOR_BW): vol.In(_CBW)}
{vol.Required(_ATTR_COLOR_BW): vol.In(_CBW)} _SRV_PTZ_SCHEMA = {
) vol.Required(_ATTR_PTZ_MOV): vol.In(_MOV),
_SRV_PTZ_SCHEMA = CAMERA_SERVICE_SCHEMA.extend( vol.Optional(_ATTR_PTZ_TT, default=_DEFAULT_TT): cv.small_float,
{ }
vol.Required(_ATTR_PTZ_MOV): vol.In(_MOV),
vol.Optional(_ATTR_PTZ_TT, default=_DEFAULT_TT): cv.small_float,
}
)
CAMERA_SERVICES = { CAMERA_SERVICES = {
_SRV_EN_REC: (CAMERA_SERVICE_SCHEMA, "async_enable_recording", ()), _SRV_EN_REC: ({}, "async_enable_recording", ()),
_SRV_DS_REC: (CAMERA_SERVICE_SCHEMA, "async_disable_recording", ()), _SRV_DS_REC: ({}, "async_disable_recording", ()),
_SRV_EN_AUD: (CAMERA_SERVICE_SCHEMA, "async_enable_audio", ()), _SRV_EN_AUD: ({}, "async_enable_audio", ()),
_SRV_DS_AUD: (CAMERA_SERVICE_SCHEMA, "async_disable_audio", ()), _SRV_DS_AUD: ({}, "async_disable_audio", ()),
_SRV_EN_MOT_REC: (CAMERA_SERVICE_SCHEMA, "async_enable_motion_recording", ()), _SRV_EN_MOT_REC: ({}, "async_enable_motion_recording", ()),
_SRV_DS_MOT_REC: (CAMERA_SERVICE_SCHEMA, "async_disable_motion_recording", ()), _SRV_DS_MOT_REC: ({}, "async_disable_motion_recording", ()),
_SRV_GOTO: (_SRV_GOTO_SCHEMA, "async_goto_preset", (_ATTR_PRESET,)), _SRV_GOTO: (_SRV_GOTO_SCHEMA, "async_goto_preset", (_ATTR_PRESET,)),
_SRV_CBW: (_SRV_CBW_SCHEMA, "async_set_color_bw", (_ATTR_COLOR_BW,)), _SRV_CBW: (_SRV_CBW_SCHEMA, "async_set_color_bw", (_ATTR_COLOR_BW,)),
_SRV_TOUR_ON: (CAMERA_SERVICE_SCHEMA, "async_start_tour", ()), _SRV_TOUR_ON: ({}, "async_start_tour", ()),
_SRV_TOUR_OFF: (CAMERA_SERVICE_SCHEMA, "async_stop_tour", ()), _SRV_TOUR_OFF: ({}, "async_stop_tour", ()),
_SRV_PTZ_CTRL: ( _SRV_PTZ_CTRL: (
_SRV_PTZ_SCHEMA, _SRV_PTZ_SCHEMA,
"async_ptz_control", "async_ptz_control",

View File

@ -89,26 +89,18 @@ _RND = SystemRandom()
MIN_STREAM_INTERVAL = 0.5 # seconds MIN_STREAM_INTERVAL = 0.5 # seconds
CAMERA_SERVICE_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids}) CAMERA_SERVICE_SNAPSHOT = {vol.Required(ATTR_FILENAME): cv.template}
CAMERA_SERVICE_SNAPSHOT = CAMERA_SERVICE_SCHEMA.extend( CAMERA_SERVICE_PLAY_STREAM = {
{vol.Required(ATTR_FILENAME): cv.template} vol.Required(ATTR_MEDIA_PLAYER): cv.entities_domain(DOMAIN_MP),
) vol.Optional(ATTR_FORMAT, default="hls"): vol.In(OUTPUT_FORMATS),
}
CAMERA_SERVICE_PLAY_STREAM = CAMERA_SERVICE_SCHEMA.extend( CAMERA_SERVICE_RECORD = {
{ vol.Required(CONF_FILENAME): cv.template,
vol.Required(ATTR_MEDIA_PLAYER): cv.entities_domain(DOMAIN_MP), vol.Optional(CONF_DURATION, default=30): vol.Coerce(int),
vol.Optional(ATTR_FORMAT, default="hls"): vol.In(OUTPUT_FORMATS), vol.Optional(CONF_LOOKBACK, default=0): vol.Coerce(int),
} }
)
CAMERA_SERVICE_RECORD = CAMERA_SERVICE_SCHEMA.extend(
{
vol.Required(CONF_FILENAME): cv.template,
vol.Optional(CONF_DURATION, default=30): vol.Coerce(int),
vol.Optional(CONF_LOOKBACK, default=0): vol.Coerce(int),
}
)
WS_TYPE_CAMERA_THUMBNAIL = "camera_thumbnail" WS_TYPE_CAMERA_THUMBNAIL = "camera_thumbnail"
SCHEMA_WS_CAMERA_THUMBNAIL = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend( SCHEMA_WS_CAMERA_THUMBNAIL = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
@ -271,17 +263,13 @@ async def async_setup(hass, config):
hass.helpers.event.async_track_time_interval(update_tokens, TOKEN_CHANGE_INTERVAL) hass.helpers.event.async_track_time_interval(update_tokens, TOKEN_CHANGE_INTERVAL)
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_ENABLE_MOTION, CAMERA_SERVICE_SCHEMA, "async_enable_motion_detection" SERVICE_ENABLE_MOTION, {}, "async_enable_motion_detection"
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_DISABLE_MOTION, CAMERA_SERVICE_SCHEMA, "async_disable_motion_detection" SERVICE_DISABLE_MOTION, {}, "async_disable_motion_detection"
)
component.async_register_entity_service(
SERVICE_TURN_OFF, CAMERA_SERVICE_SCHEMA, "async_turn_off"
)
component.async_register_entity_service(
SERVICE_TURN_ON, CAMERA_SERVICE_SCHEMA, "async_turn_on"
) )
component.async_register_entity_service(SERVICE_TURN_OFF, {}, "async_turn_off")
component.async_register_entity_service(SERVICE_TURN_ON, {}, "async_turn_on")
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_SNAPSHOT, CAMERA_SERVICE_SNAPSHOT, async_handle_snapshot_service SERVICE_SNAPSHOT, CAMERA_SERVICE_SNAPSHOT, async_handle_snapshot_service
) )

View File

@ -5,11 +5,7 @@ import os
import voluptuous as vol import voluptuous as vol
from homeassistant.components.camera import ( from homeassistant.components.camera import PLATFORM_SCHEMA, Camera
CAMERA_SERVICE_SCHEMA,
PLATFORM_SCHEMA,
Camera,
)
from homeassistant.const import ATTR_ENTITY_ID, CONF_FILE_PATH, CONF_NAME from homeassistant.const import ATTR_ENTITY_ID, CONF_FILE_PATH, CONF_NAME
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
@ -24,8 +20,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
} }
) )
CAMERA_SERVICE_UPDATE_FILE_PATH = CAMERA_SERVICE_SCHEMA.extend( CAMERA_SERVICE_UPDATE_FILE_PATH = vol.Schema(
{vol.Required(CONF_FILE_PATH): cv.string} {
vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids,
vol.Required(CONF_FILE_PATH): cv.string,
}
) )

View File

@ -8,7 +8,7 @@ from logi_circle.exception import AuthorizationFailed
import voluptuous as vol import voluptuous as vol
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.camera import ATTR_FILENAME, CAMERA_SERVICE_SCHEMA from homeassistant.components.camera import ATTR_FILENAME
from homeassistant.const import ( from homeassistant.const import (
ATTR_MODE, ATTR_MODE,
CONF_API_KEY, CONF_API_KEY,
@ -72,23 +72,17 @@ CONFIG_SCHEMA = vol.Schema(
extra=vol.ALLOW_EXTRA, extra=vol.ALLOW_EXTRA,
) )
LOGI_CIRCLE_SERVICE_SET_CONFIG = CAMERA_SERVICE_SCHEMA.extend( LOGI_CIRCLE_SERVICE_SET_CONFIG = {
{ vol.Required(ATTR_MODE): vol.In([LED_MODE_KEY, RECORDING_MODE_KEY]),
vol.Required(ATTR_MODE): vol.In([LED_MODE_KEY, RECORDING_MODE_KEY]), vol.Required(ATTR_VALUE): cv.boolean,
vol.Required(ATTR_VALUE): cv.boolean, }
}
)
LOGI_CIRCLE_SERVICE_SNAPSHOT = CAMERA_SERVICE_SCHEMA.extend( LOGI_CIRCLE_SERVICE_SNAPSHOT = {vol.Required(ATTR_FILENAME): cv.template}
{vol.Required(ATTR_FILENAME): cv.template}
)
LOGI_CIRCLE_SERVICE_RECORD = CAMERA_SERVICE_SCHEMA.extend( LOGI_CIRCLE_SERVICE_RECORD = {
{ vol.Required(ATTR_FILENAME): cv.template,
vol.Required(ATTR_FILENAME): cv.template, vol.Required(ATTR_DURATION): cv.positive_int,
vol.Required(ATTR_DURATION): cv.positive_int, }
}
)
async def async_setup(hass, config): async def async_setup(hass, config):