Skip to content

Commit 68b0f61

Browse files
ha-newbieedenhaus
andauthored
Add support for DEEBOT T50 OMNI (fd60kt) (#1285)
Co-authored-by: Robert Resch <[email protected]>
1 parent a311e67 commit 68b0f61

File tree

2 files changed

+282
-0
lines changed

2 files changed

+282
-0
lines changed

deebot_client/commands/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@ class StationAction(IntEnum):
3636
EMPTY_DUSTBIN = 1
3737
DRY_MOP = 2
3838
CLEAN_BASE = 3
39+
WASH_MOP = 4

deebot_client/hardware/fd60kt.py

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

0 commit comments

Comments
 (0)