diff --git a/homeassistant/components/unifiprotect/camera.py b/homeassistant/components/unifiprotect/camera.py index f6109e897cf..de7d4107653 100644 --- a/homeassistant/components/unifiprotect/camera.py +++ b/homeassistant/components/unifiprotect/camera.py @@ -162,7 +162,10 @@ class ProtectCamera(ProtectDeviceEntity, Camera): self, width: int | None = None, height: int | None = None ) -> bytes | None: """Return the Camera Image.""" - last_image = await self.device.get_snapshot(width, height) + if self.channel.is_package: + last_image = await self.device.get_package_snapshot(width, height) + else: + last_image = await self.device.get_snapshot(width, height) self._last_image = last_image return self._last_image diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index dfa643833dd..230de8df1a6 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -4,7 +4,7 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/unifiprotect", "requirements": [ - "pyunifiprotect==1.6.3" + "pyunifiprotect==1.7.0" ], "dependencies": [ "http" diff --git a/requirements_all.txt b/requirements_all.txt index 6d4e0cc6040..1399d9c8f7d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2015,7 +2015,7 @@ pytrafikverket==0.1.6.2 pyudev==0.22.0 # homeassistant.components.unifiprotect -pyunifiprotect==1.6.3 +pyunifiprotect==1.7.0 # homeassistant.components.uptimerobot pyuptimerobot==21.11.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index c489ea01363..d93c4917fca 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1240,7 +1240,7 @@ pytrafikverket==0.1.6.2 pyudev==0.22.0 # homeassistant.components.unifiprotect -pyunifiprotect==1.6.3 +pyunifiprotect==1.7.0 # homeassistant.components.uptimerobot pyuptimerobot==21.11.0 diff --git a/tests/components/unifiprotect/test_camera.py b/tests/components/unifiprotect/test_camera.py index 2c150155bf1..362481bfb03 100644 --- a/tests/components/unifiprotect/test_camera.py +++ b/tests/components/unifiprotect/test_camera.py @@ -73,6 +73,44 @@ async def camera_fixture( return (camera_obj, "camera.test_camera_high") +@pytest.fixture(name="camera_package") +async def camera_package_fixture( + hass: HomeAssistant, mock_entry: MockEntityFixture, mock_camera: Camera +): + """Fixture for a single camera for testing the camera platform.""" + + camera_obj = mock_camera.copy(deep=True) + camera_obj._api = mock_entry.api + camera_obj.channels[0]._api = mock_entry.api + camera_obj.channels[1]._api = mock_entry.api + camera_obj.channels[2]._api = mock_entry.api + camera_obj.name = "Test Camera" + camera_obj.feature_flags.has_package_camera = True + camera_obj.channels[0].is_rtsp_enabled = True + camera_obj.channels[0].name = "High" + camera_obj.channels[0].rtsp_alias = "test_high_alias" + camera_obj.channels[1].is_rtsp_enabled = False + camera_obj.channels[2].is_rtsp_enabled = False + package_channel = camera_obj.channels[0].copy(deep=True) + package_channel.is_rtsp_enabled = False + package_channel.name = "Package Camera" + package_channel.id = 3 + package_channel.fps = 2 + package_channel.rtsp_alias = "test_package_alias" + camera_obj.channels.append(package_channel) + + mock_entry.api.bootstrap.cameras = { + camera_obj.id: camera_obj, + } + + await hass.config_entries.async_setup(mock_entry.entry.entry_id) + await hass.async_block_till_done() + + assert_entity_counts(hass, Platform.CAMERA, 3, 2) + + return (camera_obj, "camera.test_camera_package_camera") + + def validate_default_camera_entity( hass: HomeAssistant, camera_obj: ProtectCamera, @@ -383,6 +421,19 @@ async def test_camera_image( mock_entry.api.get_camera_snapshot.assert_called_once() +async def test_package_camera_image( + hass: HomeAssistant, + mock_entry: MockEntityFixture, + camera_package: tuple[Camera, str], +): + """Test retrieving package camera image.""" + + mock_entry.api.get_package_camera_snapshot = AsyncMock() + + await async_get_image(hass, camera_package[1]) + mock_entry.api.get_package_camera_snapshot.assert_called_once() + + async def test_camera_generic_update( hass: HomeAssistant, mock_entry: MockEntityFixture,