Ejemplo n.º 1
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Create the binary sensor."""
    from haffmpeg import SensorNoise, SensorMotion

    # check source
    if not run_test(config.get(CONF_INPUT)):
        return

    # generate sensor object
    if config.get(CONF_TOOL) == FFMPEG_SENSOR_NOISE:
        entity = FFmpegNoise(SensorNoise, config)
    else:
        entity = FFmpegMotion(SensorMotion, config)

    hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, entity.shutdown_ffmpeg)

    # add to system
    add_entities([entity])
    DEVICES.append(entity)

    # exists service?
    if hass.services.has_service(DOMAIN, SERVICE_RESTART):
        return

    descriptions = load_yaml_config_file(
        path.join(path.dirname(__file__), 'services.yaml'))

    # register service
    def _service_handle_restart(service):
        """Handle service binary_sensor.ffmpeg_restart."""
        entity_ids = service.data.get('entity_id')

        if entity_ids:
            _devices = [
                device for device in DEVICES if device.entity_id in entity_ids
            ]
        else:
            _devices = DEVICES

        for device in _devices:
            device.restart_ffmpeg()

    hass.services.register(DOMAIN,
                           SERVICE_RESTART,
                           _service_handle_restart,
                           descriptions.get(SERVICE_RESTART),
                           schema=SERVICE_RESTART_SCHEMA)
Ejemplo n.º 2
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Create the binary sensor."""
    from haffmpeg import SensorNoise, SensorMotion

    # check source
    if not run_test(config.get(CONF_INPUT)):
        return

    # generate sensor object
    if config.get(CONF_TOOL) == FFMPEG_SENSOR_NOISE:
        entity = FFmpegNoise(SensorNoise, config)
    else:
        entity = FFmpegMotion(SensorMotion, config)

    hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, entity.shutdown_ffmpeg)

    # add to system
    add_entities([entity])
    DEVICES.append(entity)

    # exists service?
    if hass.services.has_service(DOMAIN, SERVICE_RESTART):
        return

    descriptions = load_yaml_config_file(
        path.join(path.dirname(__file__), 'services.yaml'))

    # register service
    def _service_handle_restart(service):
        """Handle service binary_sensor.ffmpeg_restart."""
        entity_ids = service.data.get('entity_id')

        if entity_ids:
            _devices = [device for device in DEVICES
                        if device.entity_id in entity_ids]
        else:
            _devices = DEVICES

        for device in _devices:
            device.restart_ffmpeg()

    hass.services.register(DOMAIN, SERVICE_RESTART,
                           _service_handle_restart,
                           descriptions.get(SERVICE_RESTART),
                           schema=SERVICE_RESTART_SCHEMA)
Ejemplo n.º 3
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Setup a FFmpeg Camera."""
    if not run_test(config.get(CONF_INPUT)):
        return
    add_devices([FFmpegCamera(config)])
Ejemplo n.º 4
0
def setup(hass, config):
    """Setup the OpenAlpr component."""
    engine = config[DOMAIN].get(CONF_ENGINE)
    region = config[DOMAIN].get(CONF_REGION)
    confidence = config[DOMAIN].get(CONF_CONFIDENCE)
    api_key = config[DOMAIN].get(CONF_API_KEY)
    binary = config[DOMAIN].get(CONF_ALPR_BINARY)
    use_render_fffmpeg = False

    component = EntityComponent(_LOGGER, DOMAIN, hass)
    openalpr_device = []

    for device in config[DOMAIN].get(CONF_ENTITIES):
        input_source = device.get(CONF_INPUT)
        render = device.get(CONF_RENDER)

        ##
        # create api
        if engine == ENGINE_LOCAL:
            alpr_api = OpenalprApiLocal(
                confidence=confidence,
                region=region,
                binary=binary,
            )
        else:
            alpr_api = OpenalprApiCloud(
                confidence=confidence,
                region=region,
                api_key=api_key,
            )

        ##
        # Create Alpr device / render engine
        if render == RENDER_FFMPEG:
            use_render_fffmpeg = True
            if not run_test(input_source):
                _LOGGER.error("'%s' is not valid ffmpeg input", input_source)
                continue

            alpr_dev = OpenalprDeviceFFmpeg(
                name=device.get(CONF_NAME),
                interval=device.get(CONF_INTERVAL),
                api=alpr_api,
                input_source=input_source,
                extra_arguments=device.get(CONF_EXTRA_ARGUMENTS),
            )
        else:
            alpr_dev = OpenalprDeviceImage(
                name=device.get(CONF_NAME),
                interval=device.get(CONF_INTERVAL),
                api=alpr_api,
                input_source=input_source,
                username=device.get(CONF_USERNAME),
                password=device.get(CONF_PASSWORD),
            )

        # register shutdown event
        openalpr_device.append(alpr_dev)
        hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, alpr_dev.shutdown)

    component.add_entities(openalpr_device)

    descriptions = load_yaml_config_file(
        os.path.join(os.path.dirname(__file__), 'services.yaml'))

    def _handle_service_scan(service):
        """Handle service for immediately scan."""
        device_list = component.extract_from_service(service)

        for device in device_list:
            device.scan()

    hass.services.register(DOMAIN, SERVICE_SCAN,
                           _handle_service_scan,
                           descriptions[DOMAIN][SERVICE_SCAN],
                           schema=SERVICE_SCAN_SCHEMA)

    # Add restart service only if a device use ffmpeg as render
    if not use_render_fffmpeg:
        return True

    def _handle_service_restart(service):
        """Handle service for restart ffmpeg process."""
        device_list = component.extract_from_service(service)

        for device in device_list:
            device.restart()

    hass.services.register(DOMAIN, SERVICE_RESTART,
                           _handle_service_restart,
                           descriptions[DOMAIN][SERVICE_RESTART],
                           schema=SERVICE_RESTART_SCHEMA)

    return True
Ejemplo n.º 5
0
def setup(hass, config):
    """Setup the OpenAlpr component."""
    engine = config[DOMAIN].get(CONF_ENGINE)
    region = config[DOMAIN].get(CONF_REGION)
    confidence = config[DOMAIN].get(CONF_CONFIDENCE)
    api_key = config[DOMAIN].get(CONF_API_KEY)
    binary = config[DOMAIN].get(CONF_ALPR_BINARY)
    use_render_fffmpeg = False

    component = EntityComponent(_LOGGER, DOMAIN, hass)
    openalpr_device = []

    for device in config[DOMAIN].get(CONF_ENTITIES):
        input_source = device.get(CONF_INPUT)
        render = device.get(CONF_RENDER)

        ##
        # create api
        if engine == ENGINE_LOCAL:
            alpr_api = OpenalprApiLocal(
                confidence=confidence,
                region=region,
                binary=binary,
            )
        else:
            alpr_api = OpenalprApiCloud(
                confidence=confidence,
                region=region,
                api_key=api_key,
            )

        ##
        # Create Alpr device / render engine
        if render == RENDER_FFMPEG:
            use_render_fffmpeg = True
            if not run_test(input_source):
                _LOGGER.error("'%s' is not valid ffmpeg input", input_source)
                continue

            alpr_dev = OpenalprDeviceFFmpeg(
                name=device.get(CONF_NAME),
                interval=device.get(CONF_INTERVAL),
                api=alpr_api,
                input_source=input_source,
                extra_arguments=device.get(CONF_EXTRA_ARGUMENTS),
            )
        else:
            alpr_dev = OpenalprDeviceImage(
                name=device.get(CONF_NAME),
                interval=device.get(CONF_INTERVAL),
                api=alpr_api,
                input_source=input_source,
                username=device.get(CONF_USERNAME),
                password=device.get(CONF_PASSWORD),
            )

        # register shutdown event
        openalpr_device.append(alpr_dev)
        hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, alpr_dev.shutdown)

    component.add_entities(openalpr_device)

    descriptions = load_yaml_config_file(
        os.path.join(os.path.dirname(__file__), 'services.yaml'))

    def _handle_service_scan(service):
        """Handle service for immediately scan."""
        device_list = component.extract_from_service(service)

        for device in device_list:
            device.scan()

    hass.services.register(DOMAIN,
                           SERVICE_SCAN,
                           _handle_service_scan,
                           descriptions[DOMAIN][SERVICE_SCAN],
                           schema=SERVICE_SCAN_SCHEMA)

    # Add restart service only if a device use ffmpeg as render
    if not use_render_fffmpeg:
        return True

    def _handle_service_restart(service):
        """Handle service for restart ffmpeg process."""
        device_list = component.extract_from_service(service)

        for device in device_list:
            device.restart()

    hass.services.register(DOMAIN,
                           SERVICE_RESTART,
                           _handle_service_restart,
                           descriptions[DOMAIN][SERVICE_RESTART],
                           schema=SERVICE_RESTART_SCHEMA)

    return True
Ejemplo n.º 6
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Setup a FFmpeg Camera."""
    if not run_test(config.get(CONF_INPUT)):
        return
    add_devices([FFmpegCamera(config)])