diff --git a/homeassistant/components/amcrest/camera.py b/homeassistant/components/amcrest/camera.py index 140069a1024..92453d24144 100644 --- a/homeassistant/components/amcrest/camera.py +++ b/homeassistant/components/amcrest/camera.py @@ -10,7 +10,7 @@ import voluptuous as vol from homeassistant.components.camera import SUPPORT_ON_OFF, SUPPORT_STREAM, Camera from homeassistant.components.ffmpeg import DATA_FFMPEG -from homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON +from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME, STATE_OFF, STATE_ON from homeassistant.helpers.aiohttp_client import ( async_aiohttp_proxy_stream, async_aiohttp_proxy_web, @@ -77,26 +77,29 @@ _CBW_AUTO = "auto" _CBW_BW = "bw" _CBW = [_CBW_COLOR, _CBW_AUTO, _CBW_BW] -_SRV_GOTO_SCHEMA = { - vol.Required(_ATTR_PRESET): vol.All(vol.Coerce(int), vol.Range(min=1)) -} -_SRV_CBW_SCHEMA = {vol.Required(_ATTR_COLOR_BW): vol.In(_CBW)} -_SRV_PTZ_SCHEMA = { - vol.Required(_ATTR_PTZ_MOV): vol.In(_MOV), - vol.Optional(_ATTR_PTZ_TT, default=_DEFAULT_TT): cv.small_float, -} +_SRV_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids}) +_SRV_GOTO_SCHEMA = _SRV_SCHEMA.extend( + {vol.Required(_ATTR_PRESET): vol.All(vol.Coerce(int), vol.Range(min=1))} +) +_SRV_CBW_SCHEMA = _SRV_SCHEMA.extend({vol.Required(_ATTR_COLOR_BW): vol.In(_CBW)}) +_SRV_PTZ_SCHEMA = _SRV_SCHEMA.extend( + { + vol.Required(_ATTR_PTZ_MOV): vol.In(_MOV), + vol.Optional(_ATTR_PTZ_TT, default=_DEFAULT_TT): cv.small_float, + } +) CAMERA_SERVICES = { - _SRV_EN_REC: ({}, "async_enable_recording", ()), - _SRV_DS_REC: ({}, "async_disable_recording", ()), - _SRV_EN_AUD: ({}, "async_enable_audio", ()), - _SRV_DS_AUD: ({}, "async_disable_audio", ()), - _SRV_EN_MOT_REC: ({}, "async_enable_motion_recording", ()), - _SRV_DS_MOT_REC: ({}, "async_disable_motion_recording", ()), + _SRV_EN_REC: (_SRV_SCHEMA, "async_enable_recording", ()), + _SRV_DS_REC: (_SRV_SCHEMA, "async_disable_recording", ()), + _SRV_EN_AUD: (_SRV_SCHEMA, "async_enable_audio", ()), + _SRV_DS_AUD: (_SRV_SCHEMA, "async_disable_audio", ()), + _SRV_EN_MOT_REC: (_SRV_SCHEMA, "async_enable_motion_recording", ()), + _SRV_DS_MOT_REC: (_SRV_SCHEMA, "async_disable_motion_recording", ()), _SRV_GOTO: (_SRV_GOTO_SCHEMA, "async_goto_preset", (_ATTR_PRESET,)), _SRV_CBW: (_SRV_CBW_SCHEMA, "async_set_color_bw", (_ATTR_COLOR_BW,)), - _SRV_TOUR_ON: ({}, "async_start_tour", ()), - _SRV_TOUR_OFF: ({}, "async_stop_tour", ()), + _SRV_TOUR_ON: (_SRV_SCHEMA, "async_start_tour", ()), + _SRV_TOUR_OFF: (_SRV_SCHEMA, "async_stop_tour", ()), _SRV_PTZ_CTRL: ( _SRV_PTZ_SCHEMA, "async_ptz_control", diff --git a/homeassistant/components/logi_circle/__init__.py b/homeassistant/components/logi_circle/__init__.py index c51833bc43f..2b6553f9d32 100644 --- a/homeassistant/components/logi_circle/__init__.py +++ b/homeassistant/components/logi_circle/__init__.py @@ -10,6 +10,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.components.camera import ATTR_FILENAME from homeassistant.const import ( + ATTR_ENTITY_ID, ATTR_MODE, CONF_API_KEY, CONF_CLIENT_ID, @@ -72,17 +73,28 @@ CONFIG_SCHEMA = vol.Schema( extra=vol.ALLOW_EXTRA, ) -LOGI_CIRCLE_SERVICE_SET_CONFIG = { - vol.Required(ATTR_MODE): vol.In([LED_MODE_KEY, RECORDING_MODE_KEY]), - vol.Required(ATTR_VALUE): cv.boolean, -} +LOGI_CIRCLE_SERVICE_SET_CONFIG = vol.Schema( + { + vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids, + vol.Required(ATTR_MODE): vol.In([LED_MODE_KEY, RECORDING_MODE_KEY]), + vol.Required(ATTR_VALUE): cv.boolean, + } +) -LOGI_CIRCLE_SERVICE_SNAPSHOT = {vol.Required(ATTR_FILENAME): cv.template} +LOGI_CIRCLE_SERVICE_SNAPSHOT = vol.Schema( + { + vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids, + vol.Required(ATTR_FILENAME): cv.template, + } +) -LOGI_CIRCLE_SERVICE_RECORD = { - vol.Required(ATTR_FILENAME): cv.template, - vol.Required(ATTR_DURATION): cv.positive_int, -} +LOGI_CIRCLE_SERVICE_RECORD = vol.Schema( + { + vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids, + vol.Required(ATTR_FILENAME): cv.template, + vol.Required(ATTR_DURATION): cv.positive_int, + } +) async def async_setup(hass, config):