mirror of
https://github.com/home-assistant/core.git
synced 2025-11-12 20:40:18 +00:00
Reolink conserve battery (#145452)
This commit is contained in:
@@ -19,7 +19,12 @@ from homeassistant.components.reolink import (
|
||||
FIRMWARE_UPDATE_INTERVAL,
|
||||
NUM_CRED_ERRORS,
|
||||
)
|
||||
from homeassistant.components.reolink.const import CONF_BC_PORT, DOMAIN
|
||||
from homeassistant.components.reolink.const import (
|
||||
BATTERY_ALL_WAKE_UPDATE_INTERVAL,
|
||||
BATTERY_PASSIVE_WAKE_UPDATE_INTERVAL,
|
||||
CONF_BC_PORT,
|
||||
DOMAIN,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.const import (
|
||||
CONF_HOST,
|
||||
@@ -1111,6 +1116,76 @@ async def test_privacy_mode_change_callback(
|
||||
assert config_entry.state is ConfigEntryState.NOT_LOADED
|
||||
|
||||
|
||||
async def test_camera_wake_callback(
|
||||
hass: HomeAssistant,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
config_entry: MockConfigEntry,
|
||||
reolink_connect: MagicMock,
|
||||
) -> None:
|
||||
"""Test camera wake callback."""
|
||||
|
||||
class callback_mock_class:
|
||||
callback_func = None
|
||||
|
||||
def register_callback(
|
||||
self, callback_id: str, callback: Callable[[], None], *args, **key_args
|
||||
) -> None:
|
||||
if callback_id == "camera_0_wake":
|
||||
self.callback_func = callback
|
||||
|
||||
callback_mock = callback_mock_class()
|
||||
|
||||
reolink_connect.model = TEST_HOST_MODEL
|
||||
reolink_connect.baichuan.events_active = True
|
||||
reolink_connect.baichuan.subscribe_events.reset_mock(side_effect=True)
|
||||
reolink_connect.baichuan.register_callback = callback_mock.register_callback
|
||||
reolink_connect.sleeping.return_value = True
|
||||
reolink_connect.audio_record.return_value = True
|
||||
reolink_connect.get_states = AsyncMock()
|
||||
|
||||
with (
|
||||
patch("homeassistant.components.reolink.PLATFORMS", [Platform.SWITCH]),
|
||||
patch(
|
||||
"homeassistant.components.reolink.host.time",
|
||||
return_value=BATTERY_ALL_WAKE_UPDATE_INTERVAL,
|
||||
),
|
||||
):
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert config_entry.state is ConfigEntryState.LOADED
|
||||
|
||||
entity_id = f"{Platform.SWITCH}.{TEST_NVR_NAME}_record_audio"
|
||||
assert hass.states.get(entity_id).state == STATE_ON
|
||||
|
||||
reolink_connect.sleeping.return_value = False
|
||||
reolink_connect.get_states.reset_mock()
|
||||
assert reolink_connect.get_states.call_count == 0
|
||||
|
||||
# simulate a TCP push callback signaling the battery camera woke up
|
||||
reolink_connect.audio_record.return_value = False
|
||||
assert callback_mock.callback_func is not None
|
||||
with (
|
||||
patch(
|
||||
"homeassistant.components.reolink.host.time",
|
||||
return_value=BATTERY_ALL_WAKE_UPDATE_INTERVAL
|
||||
+ BATTERY_PASSIVE_WAKE_UPDATE_INTERVAL
|
||||
+ 5,
|
||||
),
|
||||
patch(
|
||||
"homeassistant.components.reolink.time",
|
||||
return_value=BATTERY_ALL_WAKE_UPDATE_INTERVAL
|
||||
+ BATTERY_PASSIVE_WAKE_UPDATE_INTERVAL
|
||||
+ 5,
|
||||
),
|
||||
):
|
||||
callback_mock.callback_func()
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# check that a coordinator update was scheduled.
|
||||
assert reolink_connect.get_states.call_count >= 1
|
||||
assert hass.states.get(entity_id).state == STATE_OFF
|
||||
|
||||
|
||||
async def test_remove(
|
||||
hass: HomeAssistant,
|
||||
reolink_connect: MagicMock,
|
||||
|
||||
Reference in New Issue
Block a user