From 750663c2b5d9db9a3c3b1f05b4ceaa0b6929df80 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Wed, 24 Oct 2018 13:21:56 -0500 Subject: [PATCH 1/4] Add 'run_test' configs to skip ffmpeg input test on startup --- .../components/binary_sensor/ffmpeg_motion.py | 8 ++++++-- .../components/binary_sensor/ffmpeg_noise.py | 8 ++++++-- homeassistant/components/camera/ffmpeg.py | 11 +++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/binary_sensor/ffmpeg_motion.py b/homeassistant/components/binary_sensor/ffmpeg_motion.py index df811d47e56258..6523b5226027c8 100644 --- a/homeassistant/components/binary_sensor/ffmpeg_motion.py +++ b/homeassistant/components/binary_sensor/ffmpeg_motion.py @@ -25,9 +25,11 @@ CONF_CHANGES = 'changes' CONF_REPEAT = 'repeat' CONF_REPEAT_TIME = 'repeat_time' +CONF_RUN_TEST = 'run_test' DEFAULT_NAME = 'FFmpeg Motion' DEFAULT_INIT_STATE = True +DEFAULT_RUN_TEST = True PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_INPUT): cv.string, @@ -42,6 +44,7 @@ vol.All(vol.Coerce(int), vol.Range(min=1)), vol.Inclusive(CONF_REPEAT_TIME, 'repeat'): vol.All(vol.Coerce(int), vol.Range(min=1)), + vol.Optional(CONF_RUN_TEST, default=DEFAULT_RUN_TEST): cv.boolean, }) @@ -50,8 +53,9 @@ async def async_setup_platform(hass, config, async_add_entities, """Set up the FFmpeg binary motion sensor.""" manager = hass.data[DATA_FFMPEG] - if not await manager.async_run_test(config.get(CONF_INPUT)): - return + if config.get(CONF_RUN_TEST): + if not await manager.async_run_test(config.get(CONF_INPUT)): + return entity = FFmpegMotion(hass, manager, config) async_add_entities([entity]) diff --git a/homeassistant/components/binary_sensor/ffmpeg_noise.py b/homeassistant/components/binary_sensor/ffmpeg_noise.py index a2625c3de8d360..a07fadba3b7526 100644 --- a/homeassistant/components/binary_sensor/ffmpeg_noise.py +++ b/homeassistant/components/binary_sensor/ffmpeg_noise.py @@ -24,9 +24,11 @@ CONF_PEAK = 'peak' CONF_DURATION = 'duration' CONF_RESET = 'reset' +CONF_RUN_TEST = 'run_test' DEFAULT_NAME = 'FFmpeg Noise' DEFAULT_INIT_STATE = True +DEFAULT_RUN_TEST = True PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_INPUT): cv.string, @@ -39,6 +41,7 @@ vol.All(vol.Coerce(int), vol.Range(min=1)), vol.Optional(CONF_RESET, default=10): vol.All(vol.Coerce(int), vol.Range(min=1)), + vol.Optional(CONF_RUN_TEST, default=DEFAULT_RUN_TEST): cv.boolean, }) @@ -47,8 +50,9 @@ async def async_setup_platform(hass, config, async_add_entities, """Set up the FFmpeg noise binary sensor.""" manager = hass.data[DATA_FFMPEG] - if not await manager.async_run_test(config.get(CONF_INPUT)): - return + if config.get(CONF_RUN_TEST): + if not await manager.async_run_test(config.get(CONF_INPUT)): + return entity = FFmpegNoise(hass, manager, config) async_add_entities([entity]) diff --git a/homeassistant/components/camera/ffmpeg.py b/homeassistant/components/camera/ffmpeg.py index dfbcc4d70bcf76..be0d8622ca9c4d 100644 --- a/homeassistant/components/camera/ffmpeg.py +++ b/homeassistant/components/camera/ffmpeg.py @@ -22,18 +22,25 @@ DEPENDENCIES = ['ffmpeg'] DEFAULT_NAME = 'FFmpeg' +CONF_RUN_TEST = 'run_test' + +DEFAULT_RUN_TEST = True + PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_INPUT): cv.string, vol.Optional(CONF_EXTRA_ARGUMENTS): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_RUN_TEST, default=DEFAULT_RUN_TEST): cv.boolean, }) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up a FFmpeg camera.""" - if not await hass.data[DATA_FFMPEG].async_run_test(config.get(CONF_INPUT)): - return + if config.get(CONF_RUN_TEST): + if not await hass.data[DATA_FFMPEG].async_run_test(config.get(CONF_INPUT)): + return + async_add_entities([FFmpegCamera(hass, config)]) From 76b2a388df823557496d31c40158affe99eeb50a Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Wed, 24 Oct 2018 14:56:33 -0500 Subject: [PATCH 2/4] Shorten line which exceeds limit --- homeassistant/components/camera/ffmpeg.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/camera/ffmpeg.py b/homeassistant/components/camera/ffmpeg.py index be0d8622ca9c4d..bb9083cc9367be 100644 --- a/homeassistant/components/camera/ffmpeg.py +++ b/homeassistant/components/camera/ffmpeg.py @@ -37,8 +37,10 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up a FFmpeg camera.""" + manager = hass.data[DATA_FFMPEG] + if config.get(CONF_RUN_TEST): - if not await hass.data[DATA_FFMPEG].async_run_test(config.get(CONF_INPUT)): + if not await manager.async_run_test(config.get(CONF_INPUT)): return async_add_entities([FFmpegCamera(hass, config)]) From 70eccefdc0968c2afdbe759a7a00d150b9e93c74 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Wed, 24 Oct 2018 15:13:37 -0500 Subject: [PATCH 3/4] Import key name from ffmpeg component --- homeassistant/components/binary_sensor/ffmpeg_motion.py | 3 +-- homeassistant/components/binary_sensor/ffmpeg_noise.py | 3 +-- homeassistant/components/camera/ffmpeg.py | 5 +---- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/binary_sensor/ffmpeg_motion.py b/homeassistant/components/binary_sensor/ffmpeg_motion.py index 6523b5226027c8..b87a4cdfbfed14 100644 --- a/homeassistant/components/binary_sensor/ffmpeg_motion.py +++ b/homeassistant/components/binary_sensor/ffmpeg_motion.py @@ -14,7 +14,7 @@ BinarySensorDevice, PLATFORM_SCHEMA) from homeassistant.components.ffmpeg import ( FFmpegBase, DATA_FFMPEG, CONF_INPUT, CONF_EXTRA_ARGUMENTS, - CONF_INITIAL_STATE) + CONF_INITIAL_STATE, CONF_RUN_TEST) from homeassistant.const import CONF_NAME DEPENDENCIES = ['ffmpeg'] @@ -25,7 +25,6 @@ CONF_CHANGES = 'changes' CONF_REPEAT = 'repeat' CONF_REPEAT_TIME = 'repeat_time' -CONF_RUN_TEST = 'run_test' DEFAULT_NAME = 'FFmpeg Motion' DEFAULT_INIT_STATE = True diff --git a/homeassistant/components/binary_sensor/ffmpeg_noise.py b/homeassistant/components/binary_sensor/ffmpeg_noise.py index a07fadba3b7526..33bce6967275ca 100644 --- a/homeassistant/components/binary_sensor/ffmpeg_noise.py +++ b/homeassistant/components/binary_sensor/ffmpeg_noise.py @@ -14,7 +14,7 @@ FFmpegBinarySensor) from homeassistant.components.ffmpeg import ( DATA_FFMPEG, CONF_INPUT, CONF_OUTPUT, CONF_EXTRA_ARGUMENTS, - CONF_INITIAL_STATE) + CONF_INITIAL_STATE, CONF_RUN_TEST) from homeassistant.const import CONF_NAME DEPENDENCIES = ['ffmpeg'] @@ -24,7 +24,6 @@ CONF_PEAK = 'peak' CONF_DURATION = 'duration' CONF_RESET = 'reset' -CONF_RUN_TEST = 'run_test' DEFAULT_NAME = 'FFmpeg Noise' DEFAULT_INIT_STATE = True diff --git a/homeassistant/components/camera/ffmpeg.py b/homeassistant/components/camera/ffmpeg.py index bb9083cc9367be..f8608bb822a25f 100644 --- a/homeassistant/components/camera/ffmpeg.py +++ b/homeassistant/components/camera/ffmpeg.py @@ -12,7 +12,7 @@ from homeassistant.const import CONF_NAME from homeassistant.components.camera import Camera, PLATFORM_SCHEMA from homeassistant.components.ffmpeg import ( - DATA_FFMPEG, CONF_INPUT, CONF_EXTRA_ARGUMENTS) + DATA_FFMPEG, CONF_INPUT, CONF_EXTRA_ARGUMENTS, CONF_RUN_TEST) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.aiohttp_client import ( async_aiohttp_proxy_stream) @@ -21,9 +21,6 @@ DEPENDENCIES = ['ffmpeg'] DEFAULT_NAME = 'FFmpeg' - -CONF_RUN_TEST = 'run_test' - DEFAULT_RUN_TEST = True PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ From f77f72b35a495bd085ba7eee99fb570df024e03b Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Mon, 29 Oct 2018 21:33:49 -0500 Subject: [PATCH 4/4] Config FFmpeg tests from components instead of platform --- homeassistant/components/ffmpeg.py | 34 +++++++++++++----------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/homeassistant/components/ffmpeg.py b/homeassistant/components/ffmpeg.py index f28dbd5233649c..80d68a8b32047d 100644 --- a/homeassistant/components/ffmpeg.py +++ b/homeassistant/components/ffmpeg.py @@ -40,12 +40,10 @@ CONF_RUN_TEST = 'run_test' DEFAULT_BINARY = 'ffmpeg' -DEFAULT_RUN_TEST = True CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ vol.Optional(CONF_FFMPEG_BIN, default=DEFAULT_BINARY): cv.string, - vol.Optional(CONF_RUN_TEST, default=DEFAULT_RUN_TEST): cv.boolean, }), }, extra=vol.ALLOW_EXTRA) @@ -60,8 +58,7 @@ async def async_setup(hass, config): manager = FFmpegManager( hass, - conf.get(CONF_FFMPEG_BIN, DEFAULT_BINARY), - conf.get(CONF_RUN_TEST, DEFAULT_RUN_TEST) + conf.get(CONF_FFMPEG_BIN, DEFAULT_BINARY) ) # Register service @@ -95,12 +92,11 @@ async def async_service_handle(service): class FFmpegManager: """Helper for ha-ffmpeg.""" - def __init__(self, hass, ffmpeg_bin, run_test): + def __init__(self, hass, ffmpeg_bin): """Initialize helper.""" self.hass = hass self._cache = {} self._bin = ffmpeg_bin - self._run_test = run_test @property def binary(self): @@ -114,19 +110,19 @@ async def async_run_test(self, input_source): """ from haffmpeg import Test - if self._run_test: - # if in cache - if input_source in self._cache: - return self._cache[input_source] - - # run test - ffmpeg_test = Test(self.binary, loop=self.hass.loop) - success = await ffmpeg_test.run_test(input_source) - if not success: - _LOGGER.error("FFmpeg '%s' test fails!", input_source) - self._cache[input_source] = False - return False - self._cache[input_source] = True + # if in cache + if input_source in self._cache: + return self._cache[input_source] + + # run test + ffmpeg_test = Test(self.binary, loop=self.hass.loop) + success = await ffmpeg_test.run_test(input_source) + if not success: + _LOGGER.error("FFmpeg '%s' test fails!", input_source) + self._cache[input_source] = False + return False + self._cache[input_source] = True + return True