From 304788935a97a9b12de4889aa3fec7aae68b2560 Mon Sep 17 00:00:00 2001 From: Thomas Rupprecht Date: Sat, 29 Aug 2026 14:18:06 +0200 Subject: [PATCH] Report a sleeping Roborock Q7 job as paused (#180432) Co-authored-by: Claude Opus 5 --- homeassistant/components/roborock/vacuum.py | 3 +++ tests/components/roborock/test_vacuum.py | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/homeassistant/components/roborock/vacuum.py b/homeassistant/components/roborock/vacuum.py index 853572e4ff97..ee8ba8bb4968 100644 --- a/homeassistant/components/roborock/vacuum.py +++ b/homeassistant/components/roborock/vacuum.py @@ -75,6 +75,9 @@ Q7_STATE_CODE_TO_STATE = { WorkStatusMapping.SLEEPING: VacuumActivity.IDLE, WorkStatusMapping.WAITING_FOR_ORDERS: VacuumActivity.IDLE, WorkStatusMapping.PAUSED: VacuumActivity.PAUSED, + # An untouched pause falls asleep after ~10 minutes; the job is kept and + # resumes on the next start, so this is a pause rather than an idle state. + WorkStatusMapping.WORKING_SLEEP: VacuumActivity.PAUSED, WorkStatusMapping.DOCKING: VacuumActivity.RETURNING, WorkStatusMapping.CHARGING: VacuumActivity.DOCKED, WorkStatusMapping.SWEEP_MOPING: VacuumActivity.CLEANING, diff --git a/tests/components/roborock/test_vacuum.py b/tests/components/roborock/test_vacuum.py index 00980de44328..b0afaf43b1a3 100644 --- a/tests/components/roborock/test_vacuum.py +++ b/tests/components/roborock/test_vacuum.py @@ -6,6 +6,7 @@ from unittest.mock import Mock, call import pytest from roborock import RoborockException +from roborock.data import WorkStatusMapping from roborock.data.b01_q10.b01_q10_code_mappings import B01_Q10_DP, YXFanLevel from roborock.roborock_typing import RoborockCommand from syrupy.assertion import SnapshotAssertion @@ -890,6 +891,26 @@ async def test_q7_activity_none_status( assert vacuum.state == "unknown" +async def test_q7_working_sleep_is_paused( + hass: HomeAssistant, + setup_entry: MockConfigEntry, + fake_q7_vacuum: FakeDevice, +) -> None: + """Test a cleaning job that fell asleep is reported as paused.""" + assert fake_q7_vacuum.b01_q7_properties is not None + fake_q7_vacuum.b01_q7_properties._props_data.status = ( + WorkStatusMapping.WORKING_SLEEP + ) + + coordinator = setup_entry.runtime_data.b01_q7[0] + await coordinator.async_refresh() + await hass.async_block_till_done() + + vacuum = hass.states.get(Q7_ENTITY_ID) + assert vacuum + assert vacuum.state == "paused" + + @pytest.fixture(name="q10_vacuum_api", autouse=False) def fake_q10_vacuum_api_fixture( fake_q10_vacuum: FakeDevice,