diff --git a/deebot_client/messages/xml/charge_state.py b/deebot_client/messages/xml/charge_state.py
index 95e510472..6a66a287f 100644
--- a/deebot_client/messages/xml/charge_state.py
+++ b/deebot_client/messages/xml/charge_state.py
@@ -37,16 +37,20 @@ 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
+ # 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
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)