From 6f84bce83c47395b85b06080f1e2bd0e505cf101 Mon Sep 17 00:00:00 2001 From: Giovanni Condello Date: Thu, 8 May 2025 20:07:15 +0200 Subject: [PATCH 1/2] ChargeState IDLE should not produce any events --- deebot_client/messages/xml/charge_state.py | 8 +++++--- tests/commands/xml/test_charge_state.py | 11 +++++++---- tests/messages/xml/test_charge_state.py | 6 +++--- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/deebot_client/messages/xml/charge_state.py b/deebot_client/messages/xml/charge_state.py index 95e510472..c31e5ae83 100644 --- a/deebot_client/messages/xml/charge_state.py +++ b/deebot_client/messages/xml/charge_state.py @@ -37,16 +37,18 @@ def _parse_xml(cls, event_bus: EventBus, xml: Element) -> HandlingResult: if (charge := xml.find("charge")) is not None and ( charge_type := charge.attrib["type"] ) is not None: + status: None | State = None match charge_type.lower(): case "slotcharging" | "slot_charging" | "wirecharging": status = State.DOCKED case "idle": - status = State.IDLE + pass case "going": status = State.RETURNING case _: status = State.ERROR - event_bus.notify(StateEvent(status)) - return HandlingResult.success() + if status: + event_bus.notify(StateEvent(status)) + return HandlingResult.success() return HandlingResult.analyse() diff --git a/tests/commands/xml/test_charge_state.py b/tests/commands/xml/test_charge_state.py index 926ac3ae5..2a3c6e9e9 100644 --- a/tests/commands/xml/test_charge_state.py +++ b/tests/commands/xml/test_charge_state.py @@ -21,11 +21,10 @@ ("state", "expected_event"), [ ("SlotCharging", StateEvent(State.DOCKED)), - ("Idle", StateEvent(State.IDLE)), ("Going", StateEvent(State.RETURNING)), ("unknown state returned", StateEvent(State.ERROR)), ], - ids=["slot_charging", "idle", "going", "unknown"], + ids=["slot_charging", "going", "unknown"], ) async def test_get_charge_state(state: str, expected_event: Event) -> None: json = get_request_xml(f"") @@ -34,8 +33,12 @@ async def test_get_charge_state(state: str, expected_event: Event) -> None: @pytest.mark.parametrize( "xml", - ["", ""], - ids=["error", "no_state"], + [ + "", + "", + "", + ], + ids=["error", "no_state", "idle"], ) async def test_get_charge_state_error(xml: str) -> None: json = get_request_xml(xml) diff --git a/tests/messages/xml/test_charge_state.py b/tests/messages/xml/test_charge_state.py index b7c4bea93..896070638 100644 --- a/tests/messages/xml/test_charge_state.py +++ b/tests/messages/xml/test_charge_state.py @@ -13,11 +13,10 @@ ("state", "expected_event"), [ ("SlotCharging", StateEvent(State.DOCKED)), - ("Idle", StateEvent(State.IDLE)), ("Going", StateEvent(State.RETURNING)), ("unknown state returned", StateEvent(State.ERROR)), ], - ids=["slot_charging", "idle", "going", "unknown"], + ids=["slot_charging", "going", "unknown"], ) async def test_charge_state(state: str, expected_event: Event) -> None: xml_message = f'' @@ -28,8 +27,9 @@ async def test_charge_state(state: str, expected_event: Event) -> None: "xml_message", [ '', + '', ], - ids=["missing_payload"], + ids=["missing_payload", "idle"], ) async def test_charge_state_error(xml_message: str) -> None: assert_message_failure(ChargeState, xml_message, HandlingState.ANALYSE_LOGGED) From e6eccfaedd8d9280622853549a341d04f0006623 Mon Sep 17 00:00:00 2001 From: Giovanni Condello Date: Thu, 8 May 2025 20:11:05 +0200 Subject: [PATCH 2/2] Add some explanatory comments --- deebot_client/messages/xml/charge_state.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deebot_client/messages/xml/charge_state.py b/deebot_client/messages/xml/charge_state.py index c31e5ae83..6a66a287f 100644 --- a/deebot_client/messages/xml/charge_state.py +++ b/deebot_client/messages/xml/charge_state.py @@ -42,6 +42,8 @@ def _parse_xml(cls, event_bus: EventBus, xml: Element) -> HandlingResult: case "slotcharging" | "slot_charging" | "wirecharging": status = State.DOCKED case "idle": + # Bot reports IDLE while not on the charger (e.g. while cleaning) + # We ignore this state since it will conflict with the actual cleaning state pass case "going": status = State.RETURNING