Reolink auto add new cameras/chimes (#126268)

pull/127459/head
starkillerOG 2024-10-03 16:51:27 +02:00 committed by GitHub
parent e15ae6bea3
commit 85ae66d276
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 29 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import logging
from reolink_aio.api import RETRY_ATTEMPTS
from reolink_aio.exceptions import CredentialsInvalidError, ReolinkError
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import EVENT_HOMEASSISTANT_STOP, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
@ -102,6 +103,12 @@ async def async_setup_entry(
async with asyncio.timeout(host.api.timeout * (RETRY_ATTEMPTS + 2)):
await host.renew()
if host.api.new_devices and config_entry.state == ConfigEntryState.LOADED:
# Their are new cameras/chimes connected, reload to add them.
hass.async_create_task(
hass.config_entries.async_reload(config_entry.entry_id)
)
async def async_check_firmware_update() -> None:
"""Check for firmware updates."""
async with asyncio.timeout(host.api.timeout * (RETRY_ATTEMPTS + 2)):

View File

@ -80,6 +80,7 @@ def reolink_connect_class() -> Generator[MagicMock]:
host_mock.protocol = "rtsp"
host_mock.channels = [0]
host_mock.stream_channels = [0]
host_mock.new_devices = False
host_mock.sw_version_update_required = False
host_mock.hardware_version = "IPC_00000"
host_mock.sw_version = "v1.0.0.0.0.0000"

View File

@ -600,3 +600,24 @@ async def test_firmware_repair_issue(
await hass.async_block_till_done()
assert (DOMAIN, "firmware_update_host") in issue_registry.issues
async def test_new_device_discovered(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
reolink_connect: MagicMock,
config_entry: MockConfigEntry,
) -> None:
"""Test the entry is reloaded when a new camera or chime is detected."""
with patch("homeassistant.components.reolink.PLATFORMS", [Platform.SWITCH]):
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert reolink_connect.logout.call_count == 0
reolink_connect.new_devices = True
freezer.tick(DEVICE_UPDATE_INTERVAL)
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert reolink_connect.logout.call_count == 1