From d0e708d2c5ec6d034f407026c6501586bacba78d Mon Sep 17 00:00:00 2001 From: Felix Steghofer Date: Thu, 6 Sep 2018 17:19:25 +0200 Subject: [PATCH] fixed get_component() missing 1 required positional argument: 'comp_or_platform' --- README.md | 2 +- custom_components/camera/shinobi.py | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3690bb0..c78fed0 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [Shinobi](https://shinobi.video/) is an open source cctv solution. -To enable this component, first copy `custom_components/` inside your Home Assistant config directory and add the Shinobi component and platform, for example in `configuration.yaml`. See https://github.com/moeiscool/Shinobi/wiki/API-Access on how to get your `api_key` and `group_key`. The `ssl` param is optional and defaults to `false`. The white- and blacklist is also optional and defaults to all active monitors being considered. Only one filtering method can be applied at the same time. For now, the name assigned in Shinobi is used to filter cams. +To enable this component, first copy `custom_components/` inside your Home Assistant config directory and add the Shinobi component and platform, for example in `configuration.yaml`. See https://shinobi.video/docs/api on how to get your `api_key` and `group_key`. The `ssl` param is optional and defaults to `false`. The white- and blacklist is also optional and defaults to all active monitors being considered. Only one filtering method can be applied at the same time. For now, the name assigned in Shinobi is used to filter cams. ``` … diff --git a/custom_components/camera/shinobi.py b/custom_components/camera/shinobi.py index 951292c..059644c 100644 --- a/custom_components/camera/shinobi.py +++ b/custom_components/camera/shinobi.py @@ -13,16 +13,19 @@ _LOGGER = logging.getLogger(__name__) DEPENDENCIES = ['shinobi'] DOMAIN = 'shinobi' -shinobi = loader.get_component('shinobi') - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_WHITELIST, default=[]): cv.ensure_list, vol.Optional(CONF_BLACKLIST, default=[]): cv.ensure_list }) +shinobi = None + @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + global shinobi + shinobi = hass.components.shinobi + all_monitors = shinobi.get_all_started_monitors() if not all_monitors: @@ -54,7 +57,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): CONF_MJPEG_URL: shinobi.monitor_stream_url(monitor['mid']), CONF_STILL_IMAGE_URL: shinobi.monitor_still_url(monitor['mid']) } - cameras.append(ShinobiCamera(hass, device_info, monitor)) + cameras.append(ShinobiCamera(hass, shinobi, device_info, monitor)) if not cameras: _LOGGER.warning('No active cameras found') @@ -66,9 +69,10 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): class ShinobiCamera(MjpegCamera): """Representation of a Shinobi Monitor Stream.""" - def __init__(self, hass, device_info, monitor): + def __init__(self, hass, shinobi, device_info, monitor): """Initialize as a subclass of MjpegCamera.""" super().__init__(hass, device_info) + self.shinobi = shinobi self._monitor_id = monitor['mid'] self._is_recording = None @@ -81,13 +85,13 @@ class ShinobiCamera(MjpegCamera): """Update our recording state from the Shinobi API.""" _LOGGER.debug('Updating camera state for monitor {}'.format(self._monitor_id)) - status_response = shinobi.get_monitor_state(self._monitor_id) + status_response = self.shinobi.get_monitor_state(self._monitor_id) if not status_response: _LOGGER.warning('Could not get status for monitor {}'.format(self._monitor_id)) return _LOGGER.debug('Monitor {} is in status {}'.format(self._monitor_id, status_response['mode'])) - self._is_recording = status_response.get('status') == shinobi.SHINOBI_CAM_STATE['RECORDING'] + self._is_recording = status_response.get('status') == self.shinobi.SHINOBI_CAM_STATE['RECORDING'] @property def is_recording(self):