From 05a1e11db225860d6aae3aa8ed9657d8eb8da7f6 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Tue, 23 Feb 2016 12:01:51 -0800 Subject: [PATCH] Filter out AirCam models in UVC camera platform The older (unsupported AirCam) models behave differently and also apparently suffer some under the last release of the NVR that supported them. Since they are EOL and not supported by current software, filter them out so we don't break while trying to extract an image from them. --- homeassistant/components/camera/uvc.py | 5 +++++ tests/components/camera/test_uvc.py | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/homeassistant/components/camera/uvc.py b/homeassistant/components/camera/uvc.py index 5a84c535540..e34b0e26859 100644 --- a/homeassistant/components/camera/uvc.py +++ b/homeassistant/components/camera/uvc.py @@ -47,6 +47,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None): _LOGGER.error('Unable to connect to NVR: %s', str(ex)) return False + # Filter out airCam models, which are not supported in the latest + # version of UnifiVideo and which are EOL by Ubiquiti + cameras = [camera for camera in cameras + if 'airCam' not in nvrconn.get_camera(camera['uuid'])['model']] + add_devices([UnifiVideoCamera(nvrconn, camera['uuid'], camera['name']) diff --git a/tests/components/camera/test_uvc.py b/tests/components/camera/test_uvc.py index 1c87945cff2..199fec4cc04 100644 --- a/tests/components/camera/test_uvc.py +++ b/tests/components/camera/test_uvc.py @@ -27,10 +27,19 @@ class TestUVCSetup(unittest.TestCase): fake_cameras = [ {'uuid': 'one', 'name': 'Front'}, {'uuid': 'two', 'name': 'Back'}, + {'uuid': 'three', 'name': 'Old AirCam'}, ] + + def fake_get_camera(uuid): + if uuid == 'three': + return {'model': 'airCam'} + else: + return {'model': 'UVC'} + hass = mock.MagicMock() add_devices = mock.MagicMock() mock_remote.return_value.index.return_value = fake_cameras + mock_remote.return_value.get_camera.side_effect = fake_get_camera self.assertTrue(uvc.setup_platform(hass, config, add_devices)) mock_remote.assert_called_once_with('foo', 123, 'secret') add_devices.assert_called_once_with([ @@ -54,6 +63,7 @@ class TestUVCSetup(unittest.TestCase): hass = mock.MagicMock() add_devices = mock.MagicMock() mock_remote.return_value.index.return_value = fake_cameras + mock_remote.return_value.get_camera.return_value = {'model': 'UVC'} self.assertTrue(uvc.setup_platform(hass, config, add_devices)) mock_remote.assert_called_once_with('foo', 7080, 'secret') add_devices.assert_called_once_with([