Skip to content

Commit 833849e

Browse files
shinerblueedenhaus
andauthored
Add support for GOAT A3000 LiDAR Pro (51rcxt) (#1538)
* Add support for GOAT A3000 LiDAR Pro (51rcxt) Device details: - Device name: GOAT A3000 LiDAR Pro - Class: 51rcxt - Model: GOAT_INT_A2600_LIDAR_PLUS_NA - UILogicId: goatl_ww_h_goat2plus - Product category: GOATBOT Uses the same GOAT mower capabilities as all other supported GOAT models (G1, O500, O1200 LiDAR Pro, A3000 LiDAR, etc.). * Apply suggestion from @edenhaus --------- Co-authored-by: Robert Resch <robert@resch.dev>
1 parent 082d155 commit 833849e

1 file changed

Lines changed: 141 additions & 0 deletions

File tree

deebot_client/hardware/51rcxt.py

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
"""GOAT A3000 LiDAR Pro."""
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+
CapabilitySet,
14+
CapabilitySetEnable,
15+
CapabilitySettings,
16+
CapabilityStats,
17+
DeviceType,
18+
)
19+
from deebot_client.commands.json import (
20+
GetBorderSwitch,
21+
GetChildLock,
22+
GetCrossMapBorderWarning,
23+
GetCutDirection,
24+
GetMoveUpWarning,
25+
GetSafeProtect,
26+
SetBorderSwitch,
27+
SetChildLock,
28+
SetCrossMapBorderWarning,
29+
SetCutDirection,
30+
SetMoveUpWarning,
31+
SetSafeProtect,
32+
)
33+
from deebot_client.commands.json.advanced_mode import GetAdvancedMode, SetAdvancedMode
34+
from deebot_client.commands.json.battery import GetBattery
35+
from deebot_client.commands.json.charge import Charge
36+
from deebot_client.commands.json.charge_state import GetChargeState
37+
from deebot_client.commands.json.clean import CleanV2, GetCleanInfoV2
38+
from deebot_client.commands.json.custom import CustomCommand
39+
from deebot_client.commands.json.error import GetError
40+
from deebot_client.commands.json.life_span import GetLifeSpan, ResetLifeSpan
41+
from deebot_client.commands.json.network import GetNetInfo
42+
from deebot_client.commands.json.play_sound import PlaySound
43+
from deebot_client.commands.json.stats import GetStats, GetTotalStats
44+
from deebot_client.commands.json.true_detect import GetTrueDetect, SetTrueDetect
45+
from deebot_client.commands.json.volume import GetVolume, SetVolume
46+
from deebot_client.const import DataType
47+
from deebot_client.events import (
48+
AdvancedModeEvent,
49+
AvailabilityEvent,
50+
BatteryEvent,
51+
BorderSwitchEvent,
52+
ChildLockEvent,
53+
CrossMapBorderWarningEvent,
54+
CustomCommandEvent,
55+
CutDirectionEvent,
56+
ErrorEvent,
57+
LifeSpan,
58+
LifeSpanEvent,
59+
MoveUpWarningEvent,
60+
NetworkInfoEvent,
61+
ReportStatsEvent,
62+
SafeProtectEvent,
63+
StateEvent,
64+
StatsEvent,
65+
TotalStatsEvent,
66+
TrueDetectEvent,
67+
VolumeEvent,
68+
)
69+
from deebot_client.models import StaticDeviceInfo
70+
71+
72+
def get_device_info() -> StaticDeviceInfo:
73+
"""Get device info for this model."""
74+
return StaticDeviceInfo(
75+
DataType.JSON,
76+
Capabilities(
77+
device_type=DeviceType.MOWER,
78+
availability=CapabilityEvent(
79+
AvailabilityEvent, [GetBattery(is_available_check=True)]
80+
),
81+
battery=CapabilityEvent(BatteryEvent, [GetBattery()]),
82+
charge=CapabilityExecute(Charge),
83+
clean=CapabilityClean(
84+
action=CapabilityCleanAction(command=CleanV2),
85+
),
86+
custom=CapabilityCustomCommand(
87+
event=CustomCommandEvent, get=[], set=CustomCommand
88+
),
89+
error=CapabilityEvent(ErrorEvent, [GetError()]),
90+
life_span=CapabilityLifeSpan(
91+
types=(LifeSpan.BLADE, LifeSpan.LENS_BRUSH),
92+
event=LifeSpanEvent,
93+
get=[
94+
GetLifeSpan(
95+
[
96+
LifeSpan.BLADE,
97+
LifeSpan.LENS_BRUSH,
98+
]
99+
)
100+
],
101+
reset=ResetLifeSpan,
102+
),
103+
network=CapabilityEvent(NetworkInfoEvent, [GetNetInfo()]),
104+
play_sound=CapabilityExecute(PlaySound),
105+
settings=CapabilitySettings(
106+
advanced_mode=CapabilitySetEnable(
107+
AdvancedModeEvent, [GetAdvancedMode()], SetAdvancedMode
108+
),
109+
border_switch=CapabilitySetEnable(
110+
BorderSwitchEvent, [GetBorderSwitch()], SetBorderSwitch
111+
),
112+
cut_direction=CapabilitySet(
113+
CutDirectionEvent, [GetCutDirection()], SetCutDirection
114+
),
115+
child_lock=CapabilitySetEnable(
116+
ChildLockEvent, [GetChildLock()], SetChildLock
117+
),
118+
moveup_warning=CapabilitySetEnable(
119+
MoveUpWarningEvent, [GetMoveUpWarning()], SetMoveUpWarning
120+
),
121+
cross_map_border_warning=CapabilitySetEnable(
122+
CrossMapBorderWarningEvent,
123+
[GetCrossMapBorderWarning()],
124+
SetCrossMapBorderWarning,
125+
),
126+
safe_protect=CapabilitySetEnable(
127+
SafeProtectEvent, [GetSafeProtect()], SetSafeProtect
128+
),
129+
true_detect=CapabilitySetEnable(
130+
TrueDetectEvent, [GetTrueDetect()], SetTrueDetect
131+
),
132+
volume=CapabilitySet(VolumeEvent, [GetVolume()], SetVolume),
133+
),
134+
state=CapabilityEvent(StateEvent, [GetChargeState(), GetCleanInfoV2()]),
135+
stats=CapabilityStats(
136+
clean=CapabilityEvent(StatsEvent, [GetStats()]),
137+
report=CapabilityEvent(ReportStatsEvent, []),
138+
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
139+
),
140+
),
141+
)

0 commit comments

Comments
 (0)