diff --git a/deebot_client/events/__init__.py b/deebot_client/events/__init__.py index cafa9c798..45771b9f2 100644 --- a/deebot_client/events/__init__.py +++ b/deebot_client/events/__init__.py @@ -155,6 +155,8 @@ class LifeSpan(StrEnumWithXml): STATION_FILTER = "spHeap", "SpHeap" WATER_SINK = "waterSink", "WaterSink" MOP_WASHING_TRAY = "mopWashingTray", "mopWashingTray" + WEED_ROPE = "weedRope", "WeedRope" + TRIMMER_BRUSH = "trimmerBrush", "TrimmerBrush" @dataclass(frozen=True) diff --git a/deebot_client/hardware/2i0fns.py b/deebot_client/hardware/2i0fns.py index 28514679f..12a49a2dc 120000 --- a/deebot_client/hardware/2i0fns.py +++ b/deebot_client/hardware/2i0fns.py @@ -1 +1,148 @@ -5xu9h3.py \ No newline at end of file +"""DEEBOT GOAT O1200 LiDAR (2i0fns) Capabilities.""" + +from __future__ import annotations + +from deebot_client.capabilities import ( + Capabilities, + CapabilityClean, + CapabilityCleanAction, + CapabilityCustomCommand, + CapabilityEvent, + CapabilityExecute, + CapabilityLifeSpan, + CapabilitySet, + CapabilitySetEnable, + CapabilitySettings, + CapabilityStats, + DeviceType, +) +from deebot_client.commands.json import ( + GetBorderSwitch, + GetChildLock, + GetCrossMapBorderWarning, + GetCutDirection, + GetMoveUpWarning, + GetSafeProtect, + SetBorderSwitch, + SetChildLock, + SetCrossMapBorderWarning, + SetCutDirection, + SetMoveUpWarning, + SetSafeProtect, +) +from deebot_client.commands.json.advanced_mode import GetAdvancedMode, SetAdvancedMode +from deebot_client.commands.json.battery import GetBattery +from deebot_client.commands.json.charge import Charge +from deebot_client.commands.json.charge_state import GetChargeState +from deebot_client.commands.json.clean import CleanV2, GetCleanInfoV2 +from deebot_client.commands.json.custom import CustomCommand +from deebot_client.commands.json.error import GetError +from deebot_client.commands.json.life_span import GetLifeSpan, ResetLifeSpan +from deebot_client.commands.json.network import GetNetInfo +from deebot_client.commands.json.play_sound import PlaySound +from deebot_client.commands.json.stats import GetStats, GetTotalStats +from deebot_client.commands.json.true_detect import GetTrueDetect, SetTrueDetect +from deebot_client.commands.json.volume import GetVolume, SetVolume +from deebot_client.const import DataType +from deebot_client.events import ( + AdvancedModeEvent, + AvailabilityEvent, + BatteryEvent, + BorderSwitchEvent, + ChildLockEvent, + CrossMapBorderWarningEvent, + CustomCommandEvent, + CutDirectionEvent, + ErrorEvent, + LifeSpan, + LifeSpanEvent, + MoveUpWarningEvent, + NetworkInfoEvent, + ReportStatsEvent, + SafeProtectEvent, + StateEvent, + StatsEvent, + TotalStatsEvent, + TrueDetectEvent, + VolumeEvent, +) +from deebot_client.models import StaticDeviceInfo + + +def get_device_info() -> StaticDeviceInfo: + """Get device info for this model.""" + return StaticDeviceInfo( + DataType.JSON, + Capabilities( + device_type=DeviceType.MOWER, + availability=CapabilityEvent( + AvailabilityEvent, [GetBattery(is_available_check=True)] + ), + battery=CapabilityEvent(BatteryEvent, [GetBattery()]), + charge=CapabilityExecute(Charge), + clean=CapabilityClean( + action=CapabilityCleanAction(command=CleanV2), + ), + custom=CapabilityCustomCommand( + event=CustomCommandEvent, get=[], set=CustomCommand + ), + error=CapabilityEvent(ErrorEvent, [GetError()]), + life_span=CapabilityLifeSpan( + types=( + LifeSpan.BLADE, + LifeSpan.LENS_BRUSH, + LifeSpan.WEED_ROPE, + LifeSpan.TRIMMER_BRUSH, + ), + event=LifeSpanEvent, + get=[ + GetLifeSpan( + [ + LifeSpan.BLADE, + LifeSpan.LENS_BRUSH, + LifeSpan.WEED_ROPE, + LifeSpan.TRIMMER_BRUSH, + ] + ) + ], + reset=ResetLifeSpan, + ), + network=CapabilityEvent(NetworkInfoEvent, [GetNetInfo()]), + play_sound=CapabilityExecute(PlaySound), + settings=CapabilitySettings( + advanced_mode=CapabilitySetEnable( + AdvancedModeEvent, [GetAdvancedMode()], SetAdvancedMode + ), + border_switch=CapabilitySetEnable( + BorderSwitchEvent, [GetBorderSwitch()], SetBorderSwitch + ), + cut_direction=CapabilitySet( + CutDirectionEvent, [GetCutDirection()], SetCutDirection + ), + child_lock=CapabilitySetEnable( + ChildLockEvent, [GetChildLock()], SetChildLock + ), + moveup_warning=CapabilitySetEnable( + MoveUpWarningEvent, [GetMoveUpWarning()], SetMoveUpWarning + ), + cross_map_border_warning=CapabilitySetEnable( + CrossMapBorderWarningEvent, + [GetCrossMapBorderWarning()], + SetCrossMapBorderWarning, + ), + safe_protect=CapabilitySetEnable( + SafeProtectEvent, [GetSafeProtect()], SetSafeProtect + ), + true_detect=CapabilitySetEnable( + TrueDetectEvent, [GetTrueDetect()], SetTrueDetect + ), + volume=CapabilitySet(VolumeEvent, [GetVolume()], SetVolume), + ), + state=CapabilityEvent(StateEvent, [GetChargeState(), GetCleanInfoV2()]), + stats=CapabilityStats( + clean=CapabilityEvent(StatsEvent, [GetStats()]), + report=CapabilityEvent(ReportStatsEvent, []), + total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]), + ), + ), + )