Fix polling pause in Husqvarna Automower (#167397)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Thomas55555
2026-04-06 12:51:42 +02:00
committed by GitHub
parent f1d309779e
commit d3ca5132fc
2 changed files with 6 additions and 44 deletions

View File

@@ -184,10 +184,8 @@ class AutomowerDataUpdateCoordinator(DataUpdateCoordinator[MowerDictionary]):
)
def _should_poll(self) -> bool:
"""Return True if at least one mower is connected and at least one is not OFF."""
return any(mower.metadata.connected for mower in self.data.values()) and any(
mower.mower.state != MowerStates.OFF for mower in self.data.values()
)
"""Return True if at least one mower is not OFF."""
return any(mower.mower.state != MowerStates.OFF for mower in self.data.values())
async def _pong_watchdog(self) -> None:
"""Watchdog to check for pong messages."""

View File

@@ -516,27 +516,12 @@ async def test_add_and_remove_work_area(
)
@pytest.mark.parametrize(
("mower1_connected", "mower1_state", "mower2_connected", "mower2_state"),
[
(True, MowerStates.OFF, False, MowerStates.OFF), # False
(False, MowerStates.PAUSED, False, MowerStates.OFF), # False
(False, MowerStates.OFF, True, MowerStates.OFF), # False
(False, MowerStates.OFF, False, MowerStates.PAUSED), # False
(True, MowerStates.OFF, True, MowerStates.OFF), # False
(False, MowerStates.OFF, False, MowerStates.OFF), # False
],
)
async def test_dynamic_polling(
hass: HomeAssistant,
mock_automower_client,
mock_config_entry,
freezer: FrozenDateTimeFactory,
values: dict[str, MowerAttributes],
mower1_connected: bool,
mower1_state: MowerStates,
mower2_connected: bool,
mower2_state: MowerStates,
) -> None:
"""Test that the ws_ready_callback triggers an attempt to start the Watchdog task.
@@ -579,10 +564,8 @@ async def test_dynamic_polling(
assert mock_automower_client.get_status.call_count == 2
# websocket is still active, but mowers are inactive -> no polling required
poll_values[TEST_MOWER_ID].metadata.connected = mower1_connected
poll_values[TEST_MOWER_ID].mower.state = mower1_state
poll_values["1234"].metadata.connected = mower2_connected
poll_values["1234"].mower.state = mower2_state
poll_values[TEST_MOWER_ID].mower.state = MowerStates.OFF
poll_values["1234"].mower.state = MowerStates.OFF
mock_automower_client.get_status.return_value = poll_values
freezer.tick(SCAN_INTERVAL)
@@ -608,9 +591,7 @@ async def test_dynamic_polling(
# websocket is still active, and mowers are active -> polling required
mock_automower_client.get_status.reset_mock()
assert mock_automower_client.get_status.call_count == 0
poll_values[TEST_MOWER_ID].metadata.connected = True
poll_values[TEST_MOWER_ID].mower.state = MowerStates.PAUSED
poll_values["1234"].metadata.connected = False
poll_values["1234"].mower.state = MowerStates.OFF
websocket_values = deepcopy(poll_values)
callback_holder["data_cb"](websocket_values)
@@ -623,17 +604,6 @@ async def test_dynamic_polling(
assert mock_automower_client.get_status.call_count == 2
@pytest.mark.parametrize(
("mower1_connected", "mower1_state", "mower2_connected", "mower2_state"),
[
(True, MowerStates.OFF, False, MowerStates.OFF), # False
(False, MowerStates.PAUSED, False, MowerStates.OFF), # False
(False, MowerStates.OFF, True, MowerStates.OFF), # False
(False, MowerStates.OFF, False, MowerStates.PAUSED), # False
(True, MowerStates.OFF, True, MowerStates.OFF), # False
(False, MowerStates.OFF, False, MowerStates.OFF), # False
],
)
async def test_websocket_watchdog(
hass: HomeAssistant,
mock_automower_client,
@@ -641,10 +611,6 @@ async def test_websocket_watchdog(
freezer: FrozenDateTimeFactory,
entity_registry: er.EntityRegistry,
values: dict[str, MowerAttributes],
mower1_connected: bool,
mower1_state: MowerStates,
mower2_connected: bool,
mower2_state: MowerStates,
) -> None:
"""Test that the ws_ready_callback triggers an attempt to start the Watchdog task.
@@ -686,10 +652,8 @@ async def test_websocket_watchdog(
assert mock_automower_client.get_status.call_count == 2
# websocket is still active, but mowers are inactive -> no polling required
poll_values[TEST_MOWER_ID].metadata.connected = mower1_connected
poll_values[TEST_MOWER_ID].mower.state = mower1_state
poll_values["1234"].metadata.connected = mower2_connected
poll_values["1234"].mower.state = mower2_state
poll_values[TEST_MOWER_ID].mower.state = MowerStates.OFF
poll_values["1234"].mower.state = MowerStates.OFF
mock_automower_client.get_status.return_value = poll_values
freezer.tick(SCAN_INTERVAL)