Skip to content

Commit 4e3f527

Browse files
committed
Add definition for 2pv572
1 parent 4cc81d1 commit 4e3f527

4 files changed

Lines changed: 137 additions & 6 deletions

File tree

deebot_client/capabilities.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,9 @@ class CapabilityMap:
175175
clear: CapabilityExecute[[]] | None = None
176176
major: CapabilityEvent[MajorMapEvent]
177177
minor: CapabilityExecute[[str, int]]
178-
multi_state: CapabilitySetEnable[MultimapStateEvent]
178+
multi_state: CapabilitySetEnable[MultimapStateEvent] | None = None
179179
position: CapabilityEvent[PositionsEvent]
180-
relocation: CapabilityExecute[[]]
180+
relocation: CapabilityExecute[[]] | None = None
181181
rooms: CapabilityEvent[RoomsEvent]
182182
trace: CapabilityEvent[MapTraceEvent]
183183

@@ -213,7 +213,7 @@ class CapabilitySettings:
213213
sweep_mode: CapabilitySetEnable[SweepModeEvent] | None = None
214214
true_detect: CapabilitySetEnable[TrueDetectEvent] | None = None
215215
voice_assistant: CapabilitySetEnable[VoiceAssistantStateEvent] | None = None
216-
volume: CapabilitySet[VolumeEvent, [int]]
216+
volume: CapabilitySet[VolumeEvent, [int]] | None = None
217217

218218

219219
@dataclass(frozen=True, kw_only=True)

deebot_client/commands/xml/map.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,12 @@ class PullMP(XmlCommandWithMessageHandling):
239239

240240
NAME = "PullMP"
241241

242-
def __init__(self, *, piece_index: int) -> None:
242+
def __init__(
243+
self,
244+
map_id: str, # pylint: disable=unused-argument # noqa: ARG002
245+
piece_index: int,
246+
) -> None:
247+
"""Declare the map_id argument not to break compatibility with CapabilityMap."""
243248
self._piece_index = piece_index
244249
super().__init__({"pid": str(piece_index)})
245250

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
"""2pv572 Capabilities."""
2+
3+
from __future__ import annotations
4+
5+
from deebot_client.capabilities import (
6+
Capabilities,
7+
CapabilityClean,
8+
CapabilityCleanAction,
9+
CapabilityCustomCommand,
10+
CapabilityEvent,
11+
CapabilityExecute,
12+
CapabilityLifeSpan,
13+
CapabilityMap,
14+
CapabilitySettings,
15+
CapabilitySetTypes,
16+
CapabilityStats,
17+
DeviceType,
18+
)
19+
from deebot_client.commands.json import GetNetInfoLegacy
20+
from deebot_client.commands.json.custom import CustomCommand
21+
from deebot_client.commands.xml import (
22+
Charge,
23+
Clean,
24+
CleanArea,
25+
GetBatteryInfo,
26+
GetChargerPos,
27+
GetCleanLogs,
28+
GetCleanSpeed,
29+
GetCleanState,
30+
GetError,
31+
GetLifeSpan,
32+
GetMapM,
33+
GetMapSt,
34+
GetPos,
35+
GetTrM,
36+
PlaySound,
37+
PullMP,
38+
ResetLifeSpan,
39+
SetCleanSpeed,
40+
)
41+
from deebot_client.commands.xml.charge_state import GetChargeState
42+
from deebot_client.commands.xml.stats import GetCleanSum
43+
from deebot_client.const import DataType
44+
from deebot_client.events import (
45+
AvailabilityEvent,
46+
BatteryEvent,
47+
CleanLogEvent,
48+
CustomCommandEvent,
49+
ErrorEvent,
50+
FanSpeedEvent,
51+
FanSpeedLevel,
52+
LifeSpan,
53+
LifeSpanEvent,
54+
NetworkInfoEvent,
55+
ReportStatsEvent,
56+
RoomsEvent,
57+
StateEvent,
58+
StatsEvent,
59+
TotalStatsEvent,
60+
)
61+
from deebot_client.events.map import (
62+
CachedMapInfoEvent,
63+
MajorMapEvent,
64+
MapChangedEvent,
65+
MapTraceEvent,
66+
PositionsEvent,
67+
)
68+
from deebot_client.models import StaticDeviceInfo
69+
from deebot_client.util import short_name
70+
71+
from . import DEVICES
72+
73+
DEVICES[short_name(__name__)] = StaticDeviceInfo(
74+
DataType.XML,
75+
Capabilities(
76+
availability=CapabilityEvent(AvailabilityEvent, []),
77+
battery=CapabilityEvent(BatteryEvent, [GetBatteryInfo()]),
78+
charge=CapabilityExecute(Charge),
79+
clean=CapabilityClean(
80+
action=CapabilityCleanAction(command=Clean, area=CleanArea),
81+
log=CapabilityEvent(CleanLogEvent, [GetCleanLogs()]),
82+
),
83+
custom=CapabilityCustomCommand(
84+
event=CustomCommandEvent, get=[], set=CustomCommand
85+
),
86+
device_type=DeviceType.VACUUM,
87+
error=CapabilityEvent(ErrorEvent, [GetError()]),
88+
fan_speed=CapabilitySetTypes(
89+
event=FanSpeedEvent,
90+
get=[GetCleanSpeed()],
91+
set=SetCleanSpeed,
92+
types=(
93+
FanSpeedLevel.NORMAL,
94+
FanSpeedLevel.MAX,
95+
),
96+
),
97+
life_span=CapabilityLifeSpan(
98+
types=(LifeSpan.BRUSH, LifeSpan.SIDE_BRUSH, LifeSpan.DUST_CASE_HEAP),
99+
event=LifeSpanEvent,
100+
get=[
101+
GetLifeSpan(LifeSpan.BRUSH),
102+
GetLifeSpan(LifeSpan.SIDE_BRUSH),
103+
GetLifeSpan(LifeSpan.DUST_CASE_HEAP),
104+
],
105+
reset=ResetLifeSpan,
106+
),
107+
map=CapabilityMap(
108+
cached_info=CapabilityEvent(CachedMapInfoEvent, [GetMapSt()]),
109+
changed=CapabilityEvent(MapChangedEvent, []),
110+
major=CapabilityEvent(MajorMapEvent, [GetMapM()]),
111+
minor=CapabilityExecute(PullMP),
112+
position=CapabilityEvent(PositionsEvent, [GetPos(), GetChargerPos()]),
113+
rooms=CapabilityEvent(RoomsEvent, [GetMapSt()]),
114+
trace=CapabilityEvent(MapTraceEvent, [GetTrM()]),
115+
),
116+
network=CapabilityEvent(NetworkInfoEvent, [GetNetInfoLegacy()]),
117+
play_sound=CapabilityExecute(PlaySound),
118+
state=CapabilityEvent(StateEvent, [GetChargeState(), GetCleanState()]),
119+
stats=CapabilityStats(
120+
clean=CapabilityEvent(StatsEvent, []),
121+
report=CapabilityEvent(ReportStatsEvent, []),
122+
total=CapabilityEvent(TotalStatsEvent, [GetCleanSum()]),
123+
),
124+
settings=CapabilitySettings(),
125+
),
126+
)

tests/commands/xml/test_map.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ async def test_PullM_error(xml: str) -> None:
219219
async def test_PullMP(xml: str, expected_event: MinorMapEvent) -> None:
220220
json = get_request_xml(xml)
221221
await assert_command(
222-
PullMP(piece_index=1),
222+
PullMP(map_id="unused", piece_index=1),
223223
json,
224224
expected_event,
225225
command_result=CommandResult(
@@ -239,7 +239,7 @@ async def test_PullMP(xml: str, expected_event: MinorMapEvent) -> None:
239239
async def test_PullMP_error(xml: str) -> None:
240240
json = get_request_xml(xml)
241241
await assert_command(
242-
PullMP(piece_index=1),
242+
PullMP(map_id="unused", piece_index=1),
243243
json,
244244
None,
245245
command_result=CommandResult(HandlingState.ANALYSE_LOGGED),

0 commit comments

Comments
 (0)