Skip to content

Commit f3d5d58

Browse files
genelee26edenhaus
andauthored
Add Deebot X5 PRO OMNI support (#1473)
Co-authored-by: Robert Resch <robert@resch.dev>
1 parent b0dc44f commit f3d5d58

1 file changed

Lines changed: 291 additions & 0 deletions

File tree

deebot_client/hardware/mxse7w.py

Lines changed: 291 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,291 @@
1+
"""Deebot DEEBOT X5 PRO OMNI 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+
CapabilityExecuteTypes,
13+
CapabilityLifeSpan,
14+
CapabilityMap,
15+
CapabilitySet,
16+
CapabilitySetEnable,
17+
CapabilitySettings,
18+
CapabilitySetTypes,
19+
CapabilityStation,
20+
CapabilityStats,
21+
CapabilityWater,
22+
DeviceType,
23+
)
24+
from deebot_client.commands import StationAction
25+
from deebot_client.commands.json import station_action
26+
from deebot_client.commands.json.advanced_mode import GetAdvancedMode, SetAdvancedMode
27+
from deebot_client.commands.json.auto_empty import GetAutoEmpty, SetAutoEmpty
28+
from deebot_client.commands.json.battery import GetBattery
29+
from deebot_client.commands.json.carpet import (
30+
GetCarpetAutoFanBoost,
31+
SetCarpetAutoFanBoost,
32+
)
33+
from deebot_client.commands.json.charge import Charge
34+
from deebot_client.commands.json.charge_state import GetChargeState
35+
from deebot_client.commands.json.child_lock import GetChildLock, SetChildLock
36+
from deebot_client.commands.json.clean import CleanAreaV2, CleanV2
37+
from deebot_client.commands.json.clean_count import GetCleanCount, SetCleanCount
38+
from deebot_client.commands.json.clean_logs import GetCleanLogs
39+
from deebot_client.commands.json.clean_preference import (
40+
GetCleanPreference,
41+
SetCleanPreference,
42+
)
43+
from deebot_client.commands.json.continuous_cleaning import (
44+
GetContinuousCleaning,
45+
SetContinuousCleaning,
46+
)
47+
from deebot_client.commands.json.custom import CustomCommand
48+
from deebot_client.commands.json.efficiency import GetEfficiencyMode, SetEfficiencyMode
49+
from deebot_client.commands.json.error import GetError
50+
from deebot_client.commands.json.fan_speed import GetFanSpeed, SetFanSpeed
51+
from deebot_client.commands.json.life_span import GetLifeSpan, ResetLifeSpan
52+
from deebot_client.commands.json.map import (
53+
GetCachedMapInfo,
54+
GetMajorMap,
55+
GetMapInfoV2,
56+
GetMapSetV2,
57+
GetMapTrace,
58+
GetMinorMap,
59+
SetMajorMap,
60+
)
61+
from deebot_client.commands.json.multimap_state import (
62+
GetMultimapState,
63+
SetMultimapState,
64+
)
65+
from deebot_client.commands.json.network import GetNetInfo
66+
from deebot_client.commands.json.ota import GetOta, SetOta
67+
from deebot_client.commands.json.play_sound import PlaySound
68+
from deebot_client.commands.json.pos import GetPos
69+
from deebot_client.commands.json.relocation import SetRelocationState
70+
from deebot_client.commands.json.stats import GetStats, GetTotalStats
71+
from deebot_client.commands.json.sweep_mode import GetSweepMode, SetSweepMode
72+
from deebot_client.commands.json.true_detect import GetTrueDetect, SetTrueDetect
73+
from deebot_client.commands.json.voice_assistant_state import (
74+
GetVoiceAssistantState,
75+
SetVoiceAssistantState,
76+
)
77+
from deebot_client.commands.json.volume import GetVolume, SetVolume
78+
from deebot_client.commands.json.water_info import GetWaterInfo, SetWaterInfo
79+
from deebot_client.commands.json.work_mode import GetWorkMode, SetWorkMode
80+
from deebot_client.commands.json.work_state import GetWorkState
81+
from deebot_client.const import DataType
82+
from deebot_client.events import (
83+
AdvancedModeEvent,
84+
AvailabilityEvent,
85+
BatteryEvent,
86+
CachedMapInfoEvent,
87+
CarpetAutoFanBoostEvent,
88+
ChildLockEvent,
89+
CleanCountEvent,
90+
CleanLogEvent,
91+
CleanPreferenceEvent,
92+
ContinuousCleaningEvent,
93+
CustomCommandEvent,
94+
EfficiencyModeEvent,
95+
ErrorEvent,
96+
FanSpeedEvent,
97+
FanSpeedLevel,
98+
LifeSpan,
99+
LifeSpanEvent,
100+
MajorMapEvent,
101+
MapChangedEvent,
102+
MapTraceEvent,
103+
MultimapStateEvent,
104+
NetworkInfoEvent,
105+
OtaEvent,
106+
PositionsEvent,
107+
ReportStatsEvent,
108+
RoomsEvent,
109+
StateEvent,
110+
StationEvent,
111+
StatsEvent,
112+
SweepModeEvent,
113+
TotalStatsEvent,
114+
TrueDetectEvent,
115+
VoiceAssistantStateEvent,
116+
VolumeEvent,
117+
WorkMode,
118+
WorkModeEvent,
119+
auto_empty,
120+
water_info,
121+
)
122+
from deebot_client.events.auto_empty import AutoEmptyEvent
123+
from deebot_client.events.efficiency_mode import EfficiencyMode
124+
from deebot_client.models import StaticDeviceInfo
125+
126+
127+
def get_device_info() -> StaticDeviceInfo:
128+
"""Get device info for this model."""
129+
return StaticDeviceInfo(
130+
DataType.JSON,
131+
Capabilities(
132+
device_type=DeviceType.VACUUM,
133+
availability=CapabilityEvent(
134+
AvailabilityEvent, [GetBattery(is_available_check=True)]
135+
),
136+
battery=CapabilityEvent(BatteryEvent, [GetBattery()]),
137+
charge=CapabilityExecute(Charge),
138+
clean=CapabilityClean(
139+
action=CapabilityCleanAction(command=CleanV2, area=CleanAreaV2),
140+
continuous=CapabilitySetEnable(
141+
ContinuousCleaningEvent,
142+
[GetContinuousCleaning()],
143+
SetContinuousCleaning,
144+
),
145+
count=CapabilitySet(CleanCountEvent, [GetCleanCount()], SetCleanCount),
146+
log=CapabilityEvent(CleanLogEvent, [GetCleanLogs()]),
147+
preference=CapabilitySetEnable(
148+
CleanPreferenceEvent, [GetCleanPreference()], SetCleanPreference
149+
),
150+
work_mode=CapabilitySetTypes(
151+
event=WorkModeEvent,
152+
get=[GetWorkMode()],
153+
set=SetWorkMode,
154+
types=(
155+
WorkMode.MOP,
156+
WorkMode.MOP_AFTER_VACUUM,
157+
WorkMode.VACUUM,
158+
WorkMode.VACUUM_AND_MOP,
159+
),
160+
),
161+
),
162+
custom=CapabilityCustomCommand(
163+
event=CustomCommandEvent, get=[], set=CustomCommand
164+
),
165+
error=CapabilityEvent(ErrorEvent, [GetError()]),
166+
fan_speed=CapabilitySetTypes(
167+
event=FanSpeedEvent,
168+
get=[GetFanSpeed()],
169+
set=SetFanSpeed,
170+
types=(
171+
FanSpeedLevel.QUIET,
172+
FanSpeedLevel.NORMAL,
173+
FanSpeedLevel.MAX,
174+
FanSpeedLevel.MAX_PLUS,
175+
),
176+
),
177+
life_span=CapabilityLifeSpan(
178+
types=(
179+
LifeSpan.BRUSH,
180+
LifeSpan.FILTER,
181+
LifeSpan.HAND_FILTER,
182+
LifeSpan.SIDE_BRUSH,
183+
LifeSpan.UNIT_CARE,
184+
LifeSpan.CLEANING_SOLUTION,
185+
LifeSpan.SEWAGE_BOX,
186+
),
187+
event=LifeSpanEvent,
188+
get=[
189+
GetLifeSpan(
190+
[
191+
LifeSpan.BRUSH,
192+
LifeSpan.FILTER,
193+
LifeSpan.HAND_FILTER,
194+
LifeSpan.SIDE_BRUSH,
195+
LifeSpan.CLEANING_SOLUTION,
196+
LifeSpan.SEWAGE_BOX,
197+
]
198+
)
199+
],
200+
reset=ResetLifeSpan,
201+
),
202+
map=CapabilityMap(
203+
cached_info=CapabilityEvent(CachedMapInfoEvent, [GetCachedMapInfo()]),
204+
changed=CapabilityEvent(MapChangedEvent, []),
205+
info=CapabilityExecute(GetMapInfoV2),
206+
major=CapabilitySet(MajorMapEvent, [GetMajorMap()], SetMajorMap),
207+
minor=CapabilityExecute(GetMinorMap),
208+
multi_state=CapabilitySetEnable(
209+
MultimapStateEvent, [GetMultimapState()], SetMultimapState
210+
),
211+
position=CapabilityEvent(PositionsEvent, [GetPos()]),
212+
relocation=CapabilityExecute(SetRelocationState),
213+
rooms=CapabilityEvent(RoomsEvent, [GetCachedMapInfo()]),
214+
set=CapabilityExecute(GetMapSetV2),
215+
trace=CapabilityEvent(MapTraceEvent, [GetMapTrace()]),
216+
),
217+
network=CapabilityEvent(NetworkInfoEvent, [GetNetInfo()]),
218+
play_sound=CapabilityExecute(PlaySound),
219+
settings=CapabilitySettings(
220+
advanced_mode=CapabilitySetEnable(
221+
AdvancedModeEvent, [GetAdvancedMode()], SetAdvancedMode
222+
),
223+
carpet_auto_fan_boost=CapabilitySetEnable(
224+
CarpetAutoFanBoostEvent,
225+
[GetCarpetAutoFanBoost()],
226+
SetCarpetAutoFanBoost,
227+
),
228+
child_lock=CapabilitySetEnable(
229+
ChildLockEvent, [GetChildLock()], SetChildLock
230+
),
231+
efficiency_mode=CapabilitySetTypes(
232+
event=EfficiencyModeEvent,
233+
get=[GetEfficiencyMode()],
234+
set=SetEfficiencyMode,
235+
types=(
236+
EfficiencyMode.ENERGY_EFFICIENT_MODE,
237+
EfficiencyMode.STANDARD_MODE,
238+
),
239+
),
240+
ota=CapabilitySetEnable(OtaEvent, [GetOta()], SetOta),
241+
sweep_mode=CapabilitySetEnable(
242+
SweepModeEvent, [GetSweepMode()], SetSweepMode
243+
),
244+
true_detect=CapabilitySetEnable(
245+
TrueDetectEvent, [GetTrueDetect()], SetTrueDetect
246+
),
247+
voice_assistant=CapabilitySetEnable(
248+
VoiceAssistantStateEvent,
249+
[GetVoiceAssistantState()],
250+
SetVoiceAssistantState,
251+
),
252+
volume=CapabilitySet(VolumeEvent, [GetVolume()], SetVolume),
253+
),
254+
state=CapabilityEvent(StateEvent, [GetChargeState(), GetWorkState()]),
255+
station=CapabilityStation(
256+
action=CapabilityExecuteTypes(
257+
station_action.StationAction, types=(StationAction.EMPTY_DUSTBIN,)
258+
),
259+
auto_empty=CapabilitySetTypes(
260+
event=AutoEmptyEvent,
261+
get=[GetAutoEmpty()],
262+
set=SetAutoEmpty,
263+
types=(
264+
auto_empty.Frequency.AUTO,
265+
auto_empty.Frequency.SMART,
266+
),
267+
),
268+
state=CapabilityEvent(StationEvent, [GetWorkState()]),
269+
),
270+
stats=CapabilityStats(
271+
clean=CapabilityEvent(StatsEvent, [GetStats()]),
272+
report=CapabilityEvent(ReportStatsEvent, []),
273+
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
274+
),
275+
water=CapabilityWater(
276+
amount=CapabilitySetTypes(
277+
event=water_info.WaterAmountEvent,
278+
get=[GetWaterInfo()],
279+
set=SetWaterInfo,
280+
types=(
281+
water_info.WaterAmount.LOW,
282+
water_info.WaterAmount.MEDIUM,
283+
water_info.WaterAmount.HIGH,
284+
),
285+
),
286+
mop_attached=CapabilityEvent(
287+
water_info.MopAttachedEvent, [GetWaterInfo()]
288+
),
289+
),
290+
),
291+
)

0 commit comments

Comments
 (0)