Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions homeassistant/components/binary_sensor/ffmpeg_motion.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Expand All @@ -28,6 +28,7 @@

DEFAULT_NAME = 'FFmpeg Motion'
DEFAULT_INIT_STATE = True
DEFAULT_RUN_TEST = True

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_INPUT): cv.string,
Expand All @@ -42,6 +43,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,
})


Expand All @@ -50,8 +52,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])
Expand Down
9 changes: 6 additions & 3 deletions homeassistant/components/binary_sensor/ffmpeg_noise.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Expand All @@ -27,6 +27,7 @@

DEFAULT_NAME = 'FFmpeg Noise'
DEFAULT_INIT_STATE = True
DEFAULT_RUN_TEST = True

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_INPUT): cv.string,
Expand All @@ -39,6 +40,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,
})


Expand All @@ -47,8 +49,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])
Expand Down
12 changes: 9 additions & 3 deletions homeassistant/components/camera/ffmpeg.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -21,19 +21,25 @@

DEPENDENCIES = ['ffmpeg']
DEFAULT_NAME = 'FFmpeg'
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
manager = hass.data[DATA_FFMPEG]

if config.get(CONF_RUN_TEST):
if not await manager.async_run_test(config.get(CONF_INPUT)):
return

async_add_entities([FFmpegCamera(hass, config)])


Expand Down
34 changes: 15 additions & 19 deletions homeassistant/components/ffmpeg.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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
Expand Down Expand Up @@ -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):
Expand All @@ -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


Expand Down