pymammotion 0.2.38__py3-none-any.whl → 0.2.39__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pymammotion/aliyun/dataclass/regions_response.py +1 -2
- pymammotion/data/model/device.py +19 -23
- pymammotion/data/model/device_config.py +10 -6
- pymammotion/data/model/hash_list.py +17 -7
- pymammotion/data/model/location.py +8 -11
- pymammotion/data/model/region_data.py +6 -2
- pymammotion/data/model/report_info.py +7 -69
- pymammotion/data/mqtt/event.py +1 -1
- pymammotion/data/state_manager.py +3 -3
- pymammotion/mammotion/commands/messages/system.py +11 -10
- pymammotion/mammotion/devices/base.py +0 -4
- pymammotion/mammotion/devices/mammotion.py +4 -2
- pymammotion/proto/mctrl_nav.proto +4 -6
- pymammotion/proto/mctrl_nav.py +2 -3
- pymammotion/proto/mctrl_sys.proto +1 -0
- pymammotion/proto/mctrl_sys.py +1 -0
- {pymammotion-0.2.38.dist-info → pymammotion-0.2.39.dist-info}/METADATA +1 -1
- {pymammotion-0.2.38.dist-info → pymammotion-0.2.39.dist-info}/RECORD +20 -20
- {pymammotion-0.2.38.dist-info → pymammotion-0.2.39.dist-info}/LICENSE +0 -0
- {pymammotion-0.2.38.dist-info → pymammotion-0.2.39.dist-info}/WHEEL +0 -0
@@ -1,7 +1,6 @@
|
|
1
1
|
from dataclasses import dataclass
|
2
2
|
from typing import Optional, TypeVar
|
3
3
|
|
4
|
-
from mashumaro import DataClassDictMixin
|
5
4
|
from mashumaro.config import BaseConfig
|
6
5
|
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
7
6
|
|
@@ -20,7 +19,7 @@ class RegionResponseData(DataClassORJSONMixin):
|
|
20
19
|
|
21
20
|
|
22
21
|
@dataclass
|
23
|
-
class RegionResponse(
|
22
|
+
class RegionResponse(DataClassORJSONMixin):
|
24
23
|
data: RegionResponseData
|
25
24
|
code: int
|
26
25
|
id: Optional[str] = None
|
pymammotion/data/model/device.py
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
"""MowingDevice class to wrap around the betterproto dataclasses."""
|
2
2
|
|
3
|
-
from dataclasses import dataclass
|
3
|
+
from dataclasses import dataclass, field
|
4
|
+
from typing import Optional
|
4
5
|
|
5
6
|
import betterproto
|
7
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
6
8
|
|
7
9
|
from pymammotion.data.model import HashList, RapidState
|
8
10
|
from pymammotion.data.model.device_config import DeviceLimits
|
@@ -28,23 +30,17 @@ from pymammotion.utility.map import CoordinateConverter
|
|
28
30
|
|
29
31
|
|
30
32
|
@dataclass
|
31
|
-
class MowingDevice:
|
33
|
+
class MowingDevice(DataClassORJSONMixin):
|
32
34
|
"""Wraps the betterproto dataclasses, so we can bypass the groups for keeping all data."""
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
self.location = Location()
|
43
|
-
self.report_data = ReportData()
|
44
|
-
self.err_code_list = []
|
45
|
-
self.err_code_list_time = []
|
46
|
-
self.limits = DeviceLimits(30, 70, 0.2, 0.6)
|
47
|
-
self.mowing_state = RapidState()
|
36
|
+
map: HashList = field(default_factory=HashList)
|
37
|
+
location: Location = field(default_factory=Location)
|
38
|
+
mowing_state: RapidState = field(default_factory=RapidState)
|
39
|
+
report_data: ReportData = field(default_factory=ReportData)
|
40
|
+
err_code_list: list = field(default_factory=list)
|
41
|
+
err_code_list_time: Optional[list] = field(default_factory=list)
|
42
|
+
limits: DeviceLimits = field(default_factory=DeviceLimits)
|
43
|
+
device: Optional[LubaMsg] = field(default_factory=LubaMsg)
|
48
44
|
|
49
45
|
@classmethod
|
50
46
|
def from_raw(cls, raw: dict) -> "MowingDevice":
|
@@ -161,7 +157,7 @@ class MowingDevice:
|
|
161
157
|
|
162
158
|
|
163
159
|
@dataclass
|
164
|
-
class DevNetData:
|
160
|
+
class DevNetData(DataClassORJSONMixin):
|
165
161
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
166
162
|
|
167
163
|
net: dict
|
@@ -184,7 +180,7 @@ class DevNetData:
|
|
184
180
|
|
185
181
|
|
186
182
|
@dataclass
|
187
|
-
class SysData:
|
183
|
+
class SysData(DataClassORJSONMixin):
|
188
184
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
189
185
|
|
190
186
|
sys: dict
|
@@ -207,7 +203,7 @@ class SysData:
|
|
207
203
|
|
208
204
|
|
209
205
|
@dataclass
|
210
|
-
class NavData:
|
206
|
+
class NavData(DataClassORJSONMixin):
|
211
207
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
212
208
|
|
213
209
|
nav: dict
|
@@ -230,7 +226,7 @@ class NavData:
|
|
230
226
|
|
231
227
|
|
232
228
|
@dataclass
|
233
|
-
class DriverData:
|
229
|
+
class DriverData(DataClassORJSONMixin):
|
234
230
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
235
231
|
|
236
232
|
driver: dict
|
@@ -253,7 +249,7 @@ class DriverData:
|
|
253
249
|
|
254
250
|
|
255
251
|
@dataclass
|
256
|
-
class MulData:
|
252
|
+
class MulData(DataClassORJSONMixin):
|
257
253
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
258
254
|
|
259
255
|
mul: dict
|
@@ -276,7 +272,7 @@ class MulData:
|
|
276
272
|
|
277
273
|
|
278
274
|
@dataclass
|
279
|
-
class OtaData:
|
275
|
+
class OtaData(DataClassORJSONMixin):
|
280
276
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
281
277
|
|
282
278
|
ota: dict
|
@@ -299,7 +295,7 @@ class OtaData:
|
|
299
295
|
|
300
296
|
|
301
297
|
@dataclass
|
302
|
-
class PeptData:
|
298
|
+
class PeptData(DataClassORJSONMixin):
|
303
299
|
"""Wrapping class around LubaMsg to return a dataclass from the raw dict."""
|
304
300
|
|
305
301
|
pept: dict
|
@@ -1,18 +1,22 @@
|
|
1
1
|
from dataclasses import dataclass, field
|
2
2
|
|
3
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
4
|
+
|
3
5
|
from pymammotion.utility.device_type import DeviceType
|
4
6
|
|
5
7
|
|
6
8
|
@dataclass
|
7
|
-
class DeviceLimits:
|
8
|
-
blade_height_min: int
|
9
|
-
blade_height_max: int
|
10
|
-
working_speed_min: float
|
11
|
-
working_speed_max: float
|
9
|
+
class DeviceLimits(DataClassORJSONMixin):
|
10
|
+
blade_height_min: int = 30
|
11
|
+
blade_height_max: int = 70
|
12
|
+
working_speed_min: float = 0.2
|
13
|
+
working_speed_max: float = 1.2
|
14
|
+
working_path_min: int = 15
|
15
|
+
working_path_max: int = 35
|
12
16
|
|
13
17
|
|
14
18
|
@dataclass
|
15
|
-
class OperationSettings:
|
19
|
+
class OperationSettings(DataClassORJSONMixin):
|
16
20
|
"""Operation settings for a device."""
|
17
21
|
|
18
22
|
is_mow: bool = True
|
@@ -1,6 +1,8 @@
|
|
1
1
|
from dataclasses import dataclass, field
|
2
2
|
from enum import IntEnum
|
3
3
|
|
4
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
5
|
+
|
4
6
|
from pymammotion.proto.mctrl_nav import AreaHashName, NavGetCommDataAck
|
5
7
|
|
6
8
|
|
@@ -13,23 +15,31 @@ class PathType(IntEnum):
|
|
13
15
|
|
14
16
|
|
15
17
|
@dataclass
|
16
|
-
class FrameList:
|
18
|
+
class FrameList(DataClassORJSONMixin):
|
17
19
|
total_frame: int
|
18
20
|
data: list[NavGetCommDataAck]
|
19
21
|
|
20
22
|
|
21
23
|
@dataclass
|
22
|
-
class
|
24
|
+
class AreaHashNameList(DataClassORJSONMixin):
|
25
|
+
"""Wrapper so we can serialize to and from dict."""
|
26
|
+
|
27
|
+
name: str
|
28
|
+
hash: int
|
29
|
+
|
30
|
+
|
31
|
+
@dataclass
|
32
|
+
class HashList(DataClassORJSONMixin):
|
23
33
|
"""stores our map data.
|
24
34
|
[hashID, FrameList].
|
25
35
|
hashlist for all our hashIDs for verification
|
26
36
|
"""
|
27
37
|
|
28
|
-
area: dict # type 0
|
29
|
-
path: dict # type 2
|
30
|
-
obstacle: dict # type 1
|
31
|
-
hashlist: list[int]
|
32
|
-
area_name: list[
|
38
|
+
area: dict = field(default_factory=dict) # type 0
|
39
|
+
path: dict = field(default_factory=dict) # type 2
|
40
|
+
obstacle: dict = field(default_factory=dict) # type 1
|
41
|
+
hashlist: list[int] = field(default_factory=list)
|
42
|
+
area_name: list[AreaHashNameList] = field(default_factory=list)
|
33
43
|
|
34
44
|
def set_hashlist(self, hashlist: list[int]) -> None:
|
35
45
|
self.hashlist = hashlist
|
@@ -1,10 +1,12 @@
|
|
1
1
|
"""Contains RTK models for robot location and RTK positions."""
|
2
2
|
|
3
|
-
from dataclasses import dataclass
|
3
|
+
from dataclasses import dataclass, field
|
4
|
+
|
5
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
4
6
|
|
5
7
|
|
6
8
|
@dataclass
|
7
|
-
class Point:
|
9
|
+
class Point(DataClassORJSONMixin):
|
8
10
|
"""Returns a lat long."""
|
9
11
|
|
10
12
|
latitude: float = 0.0
|
@@ -23,17 +25,12 @@ class Dock(Point):
|
|
23
25
|
|
24
26
|
|
25
27
|
@dataclass
|
26
|
-
class Location:
|
28
|
+
class Location(DataClassORJSONMixin):
|
27
29
|
"""Stores/retrieves RTK GPS data."""
|
28
30
|
|
29
|
-
device: Point
|
30
|
-
RTK: Point
|
31
|
-
dock: Dock
|
31
|
+
device: Point = field(default_factory=Point)
|
32
|
+
RTK: Point = field(default_factory=Point)
|
33
|
+
dock: Dock = field(default_factory=Dock)
|
32
34
|
position_type: int = 0
|
33
35
|
orientation: int = 0 # 360 degree rotation +-
|
34
36
|
work_zone: int = 0
|
35
|
-
|
36
|
-
def __init__(self) -> None:
|
37
|
-
self.device = Point()
|
38
|
-
self.RTK = Point()
|
39
|
-
self.dock = Dock()
|
@@ -1,7 +1,11 @@
|
|
1
|
-
from
|
1
|
+
from dataclasses import dataclass
|
2
|
+
from typing import Optional
|
2
3
|
|
4
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
3
5
|
|
4
|
-
|
6
|
+
|
7
|
+
@dataclass
|
8
|
+
class RegionData(DataClassORJSONMixin):
|
5
9
|
def __init__(self) -> None:
|
6
10
|
self.hash: Optional[int] = None
|
7
11
|
self.action: int = 0
|
@@ -1,23 +1,17 @@
|
|
1
1
|
from dataclasses import asdict, dataclass, field
|
2
2
|
|
3
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
4
|
+
|
3
5
|
|
4
6
|
@dataclass
|
5
|
-
class ConnectData:
|
7
|
+
class ConnectData(DataClassORJSONMixin):
|
6
8
|
connect_type: int = 0
|
7
9
|
ble_rssi: int = 0
|
8
10
|
wifi_rssi: int = 0
|
9
11
|
|
10
|
-
@classmethod
|
11
|
-
def from_dict(cls, data: dict) -> "ConnectData":
|
12
|
-
return cls(
|
13
|
-
connect_type=data.get("connect_type", 0),
|
14
|
-
ble_rssi=data.get("ble_rssi", 0),
|
15
|
-
wifi_rssi=data.get("wifi_rssi", 0),
|
16
|
-
)
|
17
|
-
|
18
12
|
|
19
13
|
@dataclass
|
20
|
-
class DeviceData:
|
14
|
+
class DeviceData(DataClassORJSONMixin):
|
21
15
|
sys_status: int = 0
|
22
16
|
charge_state: int = 0
|
23
17
|
battery_val: int = 0
|
@@ -25,58 +19,27 @@ class DeviceData:
|
|
25
19
|
last_status: int = 0
|
26
20
|
sys_time_stamp: str = ""
|
27
21
|
|
28
|
-
@classmethod
|
29
|
-
def from_dict(cls, data: dict):
|
30
|
-
return cls(
|
31
|
-
sys_status=data.get("sys_status", 0),
|
32
|
-
charge_state=data.get("charge_state", 0),
|
33
|
-
battery_val=data.get("battery_val", 0),
|
34
|
-
sensor_status=data.get("sensor_status", 0),
|
35
|
-
last_status=data.get("last_status", 0),
|
36
|
-
sys_time_stamp=data.get("sys_time_stamp", ""),
|
37
|
-
)
|
38
|
-
|
39
22
|
|
40
23
|
@dataclass
|
41
|
-
class RTKData:
|
24
|
+
class RTKData(DataClassORJSONMixin):
|
42
25
|
status: int = 0
|
43
26
|
pos_level: int = 0
|
44
27
|
gps_stars: int = 0
|
45
28
|
dis_status: str = ""
|
46
29
|
co_view_stars: int = 0
|
47
30
|
|
48
|
-
@classmethod
|
49
|
-
def from_dict(cls, data: dict):
|
50
|
-
return cls(
|
51
|
-
status=data.get("status", 0),
|
52
|
-
pos_level=data.get("pos_level", 0),
|
53
|
-
gps_stars=data.get("gps_stars", 0),
|
54
|
-
dis_status=data.get("dis_status", ""),
|
55
|
-
co_view_stars=data.get("co_view_stars", 0),
|
56
|
-
)
|
57
|
-
|
58
31
|
|
59
32
|
@dataclass
|
60
|
-
class LocationData:
|
33
|
+
class LocationData(DataClassORJSONMixin):
|
61
34
|
real_pos_x: int = 0
|
62
35
|
real_pos_y: int = 0
|
63
36
|
real_toward: int = 0
|
64
37
|
pos_type: int = 0
|
65
38
|
bol_hash: str = ""
|
66
39
|
|
67
|
-
@classmethod
|
68
|
-
def from_dict(cls, data: dict):
|
69
|
-
return cls(
|
70
|
-
real_pos_x=data.get("real_pos_x", 0),
|
71
|
-
real_pos_y=data.get("real_pos_y", 0),
|
72
|
-
real_toward=data.get("real_toward", 0),
|
73
|
-
pos_type=data.get("pos_type", 0),
|
74
|
-
bol_hash=data.get("bol_hash", ""),
|
75
|
-
)
|
76
|
-
|
77
40
|
|
78
41
|
@dataclass
|
79
|
-
class WorkData:
|
42
|
+
class WorkData(DataClassORJSONMixin):
|
80
43
|
path: int = 0
|
81
44
|
path_hash: str = ""
|
82
45
|
progress: int = 0
|
@@ -98,31 +61,6 @@ class WorkData:
|
|
98
61
|
nav_edit_status: int = 0
|
99
62
|
knife_height: int = 0
|
100
63
|
|
101
|
-
@classmethod
|
102
|
-
def from_dict(cls, data: dict):
|
103
|
-
return cls(
|
104
|
-
path=data.get("path", 0),
|
105
|
-
path_hash=data.get("path_hash", ""),
|
106
|
-
progress=data.get("progress", 0),
|
107
|
-
area=data.get("area", 0),
|
108
|
-
bp_info=data.get("bp_info", 0),
|
109
|
-
bp_hash=data.get("bp_hash", ""),
|
110
|
-
bp_pos_x=data.get("bp_pos_x", 0),
|
111
|
-
bp_pos_y=data.get("bp_pos_y", 0),
|
112
|
-
real_path_num=data.get("real_path_num", ""),
|
113
|
-
path_pos_x=data.get("path_pos_x", 0),
|
114
|
-
path_pos_y=data.get("path_pos_y", 0),
|
115
|
-
ub_zone_hash=data.get("ub_zone_hash", ""),
|
116
|
-
ub_path_hash=data.get("ub_path_hash", ""),
|
117
|
-
init_cfg_hash=data.get("init_cfg_hash", ""),
|
118
|
-
ub_ecode_hash=data.get("ub_ecode_hash", ""),
|
119
|
-
nav_run_mode=data.get("nav_run_mode", 0),
|
120
|
-
test_mode_status=data.get("test_mode_status", 0),
|
121
|
-
man_run_speed=data.get("man_run_speed", 0),
|
122
|
-
nav_edit_status=data.get("nav_edit_status", 0),
|
123
|
-
knife_height=data.get("knife_height", 0),
|
124
|
-
)
|
125
|
-
|
126
64
|
|
127
65
|
@dataclass
|
128
66
|
class ReportData:
|
pymammotion/data/mqtt/event.py
CHANGED
@@ -154,7 +154,7 @@ class ThingEventMessage(DataClassORJSONMixin):
|
|
154
154
|
params_obj = DeviceWarningEventParams.from_dict(params_dict)
|
155
155
|
elif identifier == "device_config_req_event":
|
156
156
|
params_obj = payload.get("params", {})
|
157
|
-
elif identifier == "device_notification_event":
|
157
|
+
elif identifier == "device_notification_event" or identifier == "device_warning_code_event":
|
158
158
|
params_obj = DeviceNotificationEventParams.from_dict(params_dict)
|
159
159
|
else:
|
160
160
|
raise ValueError(f"Unknown identifier: {identifier} {params_dict}")
|
@@ -5,6 +5,7 @@ from typing import Any, Awaitable, Callable, Optional
|
|
5
5
|
import betterproto
|
6
6
|
|
7
7
|
from pymammotion.data.model.device import MowingDevice
|
8
|
+
from pymammotion.data.model.hash_list import AreaHashNameList
|
8
9
|
from pymammotion.proto.luba_msg import LubaMsg
|
9
10
|
from pymammotion.proto.mctrl_nav import AppGetAllAreaHashName, NavGetCommDataAck, NavGetHashListAck
|
10
11
|
|
@@ -65,7 +66,8 @@ class StateManager:
|
|
65
66
|
await self.get_commondata_ack_callback(common_data)
|
66
67
|
case "toapp_all_hash_name":
|
67
68
|
hash_names: AppGetAllAreaHashName = nav_msg[1]
|
68
|
-
|
69
|
+
converted_list = [AreaHashNameList(name=item.name, hash=item.hash) for item in hash_names.hashnames]
|
70
|
+
self._device.map.area_name = converted_list
|
69
71
|
|
70
72
|
async def _update_sys_data(self, message) -> None:
|
71
73
|
"""Update system."""
|
@@ -75,8 +77,6 @@ class StateManager:
|
|
75
77
|
self._device.buffer(sys_msg[1])
|
76
78
|
case "toapp_report_data":
|
77
79
|
self._device.update_report_data(sys_msg[1])
|
78
|
-
if self.queue_command_callback:
|
79
|
-
await self.queue_command_callback("get_report_cfg", stop=True)
|
80
80
|
case "mow_to_app_info":
|
81
81
|
self._device.mow_info(sys_msg[1])
|
82
82
|
case "system_tard_state_tunnel":
|
@@ -227,7 +227,7 @@ class MessageSystem(AbstractMessage, ABC):
|
|
227
227
|
return self.send_order_msg_sys(build)
|
228
228
|
|
229
229
|
def get_report_cfg(
|
230
|
-
self, timeout: int = 10000, period: int = 1000, no_change_period: int =
|
230
|
+
self, timeout: int = 10000, period: int = 1000, no_change_period: int = 2000, stop: bool = False
|
231
231
|
):
|
232
232
|
mctlsys = MctlSys(
|
233
233
|
todev_report_cfg=ReportInfoCfg(
|
@@ -239,15 +239,16 @@ class MessageSystem(AbstractMessage, ABC):
|
|
239
239
|
)
|
240
240
|
)
|
241
241
|
|
242
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_CONNECT
|
243
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_RTK
|
244
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_DEV_LOCAL
|
245
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_WORK
|
246
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_DEV_STA
|
247
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_MAINTAIN
|
248
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_VISION_POINT
|
249
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_VIO
|
250
|
-
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_VISION_STATISTIC
|
242
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_CONNECT)
|
243
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_RTK)
|
244
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_DEV_LOCAL)
|
245
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_WORK)
|
246
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_DEV_STA)
|
247
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_MAINTAIN)
|
248
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_VISION_POINT)
|
249
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_VIO)
|
250
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_VISION_STATISTIC)
|
251
|
+
mctlsys.todev_report_cfg.sub.append(RptInfoType.RIT_BASESTATION)
|
251
252
|
|
252
253
|
lubaMsg = LubaMsg()
|
253
254
|
lubaMsg.msgtype = MsgCmdType.MSG_CMD_TYPE_EMBED_SYS
|
@@ -205,10 +205,6 @@ class MammotionBaseDevice:
|
|
205
205
|
|
206
206
|
if self._cloud_device:
|
207
207
|
await self.queue_command("get_area_name_list", device_id=self._cloud_device.iotId)
|
208
|
-
elif has_field(self._mower.net.toapp_wifi_iot_status):
|
209
|
-
await self.queue_command(
|
210
|
-
"get_area_name_list", device_id=self._mower.net.toapp_wifi_iot_status.devicename
|
211
|
-
)
|
212
208
|
except Exception:
|
213
209
|
"""Do nothing for now."""
|
214
210
|
|
@@ -177,7 +177,7 @@ class Mammotion:
|
|
177
177
|
return
|
178
178
|
|
179
179
|
self.cloud_client = cloud_client
|
180
|
-
|
180
|
+
mammotion_cloud = MammotionCloud(
|
181
181
|
MammotionMQTT(
|
182
182
|
region_id=cloud_client.region_response.data.regionId,
|
183
183
|
product_key=cloud_client.aep_response.data.productKey,
|
@@ -189,7 +189,9 @@ class Mammotion:
|
|
189
189
|
),
|
190
190
|
cloud_client,
|
191
191
|
)
|
192
|
-
self.
|
192
|
+
self.mqtt_list[account] = mammotion_cloud
|
193
|
+
self.add_cloud_devices(mammotion_cloud)
|
194
|
+
|
193
195
|
loop = asyncio.get_running_loop()
|
194
196
|
await loop.run_in_executor(None, self.mqtt_list[account].connect_async)
|
195
197
|
|
@@ -141,7 +141,7 @@ message NavGetCommData {
|
|
141
141
|
int32 subCmd = 2;
|
142
142
|
int32 action = 3;
|
143
143
|
int32 type = 4;
|
144
|
-
|
144
|
+
fixed64 Hash = 5;
|
145
145
|
int64 paternalHashA = 6;
|
146
146
|
int64 paternalHashB = 7;
|
147
147
|
int32 totalFrame = 8;
|
@@ -434,7 +434,7 @@ message NavTaskCtrlAck {
|
|
434
434
|
|
435
435
|
message NavMapNameMsg {
|
436
436
|
int32 rw = 1; // Represents RW field
|
437
|
-
|
437
|
+
fixed64 hash = 2; // Represents HASH field
|
438
438
|
string name = 3; // Represents NAME field
|
439
439
|
int32 result = 4; // Represents RESULT field
|
440
440
|
string device_id = 5; // Represents DEVICEID field
|
@@ -469,10 +469,8 @@ message SvgMessageAckT {
|
|
469
469
|
}
|
470
470
|
|
471
471
|
message AreaHashName {
|
472
|
-
|
473
|
-
|
474
|
-
string name = 1; // Replace with actual field definitions
|
475
|
-
int64 hash = 2; // Replace with actual field definitions
|
472
|
+
string name = 2;
|
473
|
+
fixed64 hash = 1;
|
476
474
|
}
|
477
475
|
|
478
476
|
message AppGetAllAreaHashName {
|
pymammotion/proto/mctrl_nav.py
CHANGED
@@ -525,9 +525,8 @@ class SvgMessageAckT(betterproto.Message):
|
|
525
525
|
|
526
526
|
@dataclass
|
527
527
|
class AreaHashName(betterproto.Message):
|
528
|
-
|
529
|
-
|
530
|
-
hash: int = betterproto.int64_field(2)
|
528
|
+
name: str = betterproto.string_field(2)
|
529
|
+
hash: int = betterproto.fixed64_field(1)
|
531
530
|
|
532
531
|
|
533
532
|
@dataclass
|
pymammotion/proto/mctrl_sys.py
CHANGED
@@ -6,7 +6,7 @@ pymammotion/aliyun/dataclass/aep_response.py,sha256=8f6GIP58ve8gd6AL3HBoXxsy0n2q
|
|
6
6
|
pymammotion/aliyun/dataclass/connect_response.py,sha256=Yz-fEbDzgGPTo5Of2oAjmFkSv08T7ze80pQU4k-gKIU,824
|
7
7
|
pymammotion/aliyun/dataclass/dev_by_account_response.py,sha256=gskum11h9HPf4lKjLJKVrsxRl5BHaHJP2TPrI09SUYs,1032
|
8
8
|
pymammotion/aliyun/dataclass/login_by_oauth_response.py,sha256=IXSLZ6XnOliOnyXo5Bh0ErqFjA11puACh_9NH0sSJGQ,1262
|
9
|
-
pymammotion/aliyun/dataclass/regions_response.py,sha256=
|
9
|
+
pymammotion/aliyun/dataclass/regions_response.py,sha256=TBBWKF9j5iWjX4YbvMBHNDOnr0cEhbdfgApgCyJZhVg,651
|
10
10
|
pymammotion/aliyun/dataclass/session_by_authcode_response.py,sha256=qW0pnnRXfyEuMbb9ORc013sYqZwO8z4i_h_SfSaA_bw,419
|
11
11
|
pymammotion/aliyun/tmp_constant.py,sha256=M4Hq_lrGB3LZdX6R2XohRPFoK1NDnNV-pTJwJcJ9838,6650
|
12
12
|
pymammotion/bluetooth/__init__.py,sha256=LAl8jqZ1fPh-3mLmViNQsP3s814C1vsocYUa6oSaXt0,36
|
@@ -21,24 +21,24 @@ pymammotion/const.py,sha256=lWRxvTVdXnNHuxqvRkjO5ziK0Ic-fZMM6J2dbe5M6Nc,385
|
|
21
21
|
pymammotion/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
22
|
pymammotion/data/model/__init__.py,sha256=aSyroxYQQS-WMRi6WmWm2js4wLa9nmsi160gx9tts4o,323
|
23
23
|
pymammotion/data/model/account.py,sha256=vJM-KTf2q6eBfVC-UlNHBSmJvqHiCawZ40vnuhXhaz8,140
|
24
|
-
pymammotion/data/model/device.py,sha256=
|
25
|
-
pymammotion/data/model/device_config.py,sha256=
|
24
|
+
pymammotion/data/model/device.py,sha256=OGOVm3h-jTfL-hpCE07o2tLRk34i0rRO-hFjY8AHQRw,11472
|
25
|
+
pymammotion/data/model/device_config.py,sha256=_DlpxqrybTfkPFxV-gPjNzIte0AKA_Oa_JRmDcVmLdk,2823
|
26
26
|
pymammotion/data/model/enums.py,sha256=EpKmO8yVUZyEnTY4yH0DMMVKYNQM42zpW1maUu0i3IE,1582
|
27
27
|
pymammotion/data/model/excute_boarder_params.py,sha256=9CpUqrygcle1C_1hDW-riLmm4map4ZbE842NXjcomEI,1394
|
28
28
|
pymammotion/data/model/execute_boarder.py,sha256=9rd_h4fbcsXxgnLOd2rO2hWyD1abnTGc47QTEpp8DD0,1103
|
29
29
|
pymammotion/data/model/generate_route_information.py,sha256=MkUBoqGtCAKmiVQ4Q1pEoDVHZs5uLIo7vhfWT4nGbtY,801
|
30
|
-
pymammotion/data/model/hash_list.py,sha256=
|
31
|
-
pymammotion/data/model/location.py,sha256=
|
30
|
+
pymammotion/data/model/hash_list.py,sha256=efUSelsj39IArxV_GEN7niM2fsVa1OL8ZjToxStHSQ4,3395
|
31
|
+
pymammotion/data/model/location.py,sha256=PwmITejfI4pm7PI4rzqSuuHetwle6IJr_CV95435s2M,871
|
32
32
|
pymammotion/data/model/mowing_modes.py,sha256=5TrHSijUyPtIDWpNtgzx_vFQukRJWRz4gIrUaXggKPw,827
|
33
33
|
pymammotion/data/model/plan.py,sha256=mcadkSL7fQXy0iJ0q786I3GEQY4i6kmQXfW6Ri69lcQ,2906
|
34
34
|
pymammotion/data/model/rapid_state.py,sha256=BdJFD_DlhrVneg-PqEruqCoMty-CR7q_9Qna-hk1yd8,1171
|
35
|
-
pymammotion/data/model/region_data.py,sha256=
|
36
|
-
pymammotion/data/model/report_info.py,sha256=
|
35
|
+
pymammotion/data/model/region_data.py,sha256=OTV15vRyn9JORXsQPjWMNF1ZujuNhsOKl25KeqwMObA,3007
|
36
|
+
pymammotion/data/model/report_info.py,sha256=IRVpsuEHg8zTrFIqrKUFMTz_y0u5GuWIRqf1V8mb0Fk,2226
|
37
37
|
pymammotion/data/mqtt/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
38
|
-
pymammotion/data/mqtt/event.py,sha256=
|
38
|
+
pymammotion/data/mqtt/event.py,sha256=plt53w3kHulB_MfbkxK9j7AfdQ5ahVU2s4kiQMoLio4,4612
|
39
39
|
pymammotion/data/mqtt/properties.py,sha256=HkBPghr26L9_b4QaOi1DtPgb0UoPIOGSe9wb3kgnM6Y,2815
|
40
40
|
pymammotion/data/mqtt/status.py,sha256=zqnlo-MzejEQZszl0i0Wucoc3E76x6UtI9JLxoBnu54,1067
|
41
|
-
pymammotion/data/state_manager.py,sha256=
|
41
|
+
pymammotion/data/state_manager.py,sha256=c-O9TRmQ1ZkDjgBZqY72DeKJsaiyK8K3pl8Adg1cR7w,3657
|
42
42
|
pymammotion/event/__init__.py,sha256=mgATR6vPHACNQ-0zH5fi7NdzeTCDV1CZyaWPmtUusi8,115
|
43
43
|
pymammotion/event/event.py,sha256=UzYnxV5DfvMDK3E06UvSzvzuBbaXOOUwO6xYt_zn9To,2034
|
44
44
|
pymammotion/http/_init_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -54,13 +54,13 @@ pymammotion/mammotion/commands/messages/media.py,sha256=ps0l06CXy5Ej--gTNCsyKttw
|
|
54
54
|
pymammotion/mammotion/commands/messages/navigation.py,sha256=4rXBL-mViWc38K6x1w5O-GjwV8UWS5xZXkf4aHYjs8A,23684
|
55
55
|
pymammotion/mammotion/commands/messages/network.py,sha256=gD7NKVKg8U2KNbPvgOxvTJXbznWdpdPQo9jBsQSx4OI,8027
|
56
56
|
pymammotion/mammotion/commands/messages/ota.py,sha256=XkeuWBZtpYMMBze6r8UN7dJXbe2FxUNGNnjwBpXJKM0,1240
|
57
|
-
pymammotion/mammotion/commands/messages/system.py,sha256=
|
57
|
+
pymammotion/mammotion/commands/messages/system.py,sha256=8GefmJ-8dGdJjpNcq1ke6A__ETFV49Q8TJo4bpOxnaE,10907
|
58
58
|
pymammotion/mammotion/commands/messages/video.py,sha256=_8lJsU4sLm2CGnc7RDkueA0A51Ysui6x7SqFnhX8O2g,1007
|
59
59
|
pymammotion/mammotion/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
60
60
|
pymammotion/mammotion/control/joystick.py,sha256=QfBVxM_gxpWsZAGO90whtgxCI2tIZ3TTad9wHIPsU9s,5640
|
61
61
|
pymammotion/mammotion/devices/__init__.py,sha256=f2qQFPgLGmV85W2hSlMUh5BYuht9o_Ar_JEAAMD4fsE,102
|
62
|
-
pymammotion/mammotion/devices/base.py,sha256=
|
63
|
-
pymammotion/mammotion/devices/mammotion.py,sha256=
|
62
|
+
pymammotion/mammotion/devices/base.py,sha256=jUSmwUJ-Vy9jazy8A7J3ByN6NXMV9HoMWJBekJ19Ed4,11002
|
63
|
+
pymammotion/mammotion/devices/mammotion.py,sha256=JnT5q5z9AxPI71WBu4kwdJwpYoWCJ_WkU315Cy1bPQM,11701
|
64
64
|
pymammotion/mammotion/devices/mammotion_bluetooth.py,sha256=sgGeyQeAeA3lQodcalRYS4nDNAzjfFs9SddIB1kadvw,17355
|
65
65
|
pymammotion/mammotion/devices/mammotion_cloud.py,sha256=dk49VY9yHO3d-Nb17y-D4YIURs2FTLMzWHUYrxBYhtw,10116
|
66
66
|
pymammotion/mqtt/__init__.py,sha256=Ocs5e-HLJvTuDpVXyECEsWIvwsUaxzj7lZ9mSYutNDY,105
|
@@ -91,8 +91,8 @@ pymammotion/proto/mctrl_driver.proto,sha256=I0BncdAa3laeqT17Sn95r_1HuBD3dSc9IVu9
|
|
91
91
|
pymammotion/proto/mctrl_driver.py,sha256=sseY2MxUtaQZvg7fvbA_gNvtqx9MVDW_rvUcfA2CWVs,2971
|
92
92
|
pymammotion/proto/mctrl_driver_pb2.py,sha256=bfLwZb5Hehb6OIkgFrZMkQ0oTBXoOBxpruszKz-UM1U,3785
|
93
93
|
pymammotion/proto/mctrl_driver_pb2.pyi,sha256=9_rcQELsSeOfeIQMTEFIpeXICpDe3arQeA4kAYWNSWw,5860
|
94
|
-
pymammotion/proto/mctrl_nav.proto,sha256=
|
95
|
-
pymammotion/proto/mctrl_nav.py,sha256=
|
94
|
+
pymammotion/proto/mctrl_nav.proto,sha256=TAJHfzgMRmT2IW0ciVJYAQDkfinRXoFEJGkk0VobSjU,12380
|
95
|
+
pymammotion/proto/mctrl_nav.py,sha256=xTsPmwhV_AwfoFWTGqpz2W4rVR7tHTHwNU4rS8QBLdc,24884
|
96
96
|
pymammotion/proto/mctrl_nav_pb2.py,sha256=LAHfEmGfNVZCN6vuLSZF6s2wd1Qk-siaWe4mdPWPdxc,24213
|
97
97
|
pymammotion/proto/mctrl_nav_pb2.pyi,sha256=qmGYfKh2o63e5ppl9QIWnwDbmGVUVOf7EqhC9ApE5fg,51336
|
98
98
|
pymammotion/proto/mctrl_ota.proto,sha256=4iHr-v1R0QiNndCnv3b6mhXiERLukB67ZzhTgt1iMc0,629
|
@@ -103,8 +103,8 @@ pymammotion/proto/mctrl_pept.proto,sha256=HBTRiP1XJB5w9hT1V38aePPREpePBk5jkjupu_
|
|
103
103
|
pymammotion/proto/mctrl_pept.py,sha256=utMtbXsCwGS14YggTqUdVIbTZsR0w49B6gKU8jHzbJg,1332
|
104
104
|
pymammotion/proto/mctrl_pept_pb2.py,sha256=QqQ1BXo_EBs7cLmQGtRbnNy0rRxvaqtrGfKxXS8R5A8,2134
|
105
105
|
pymammotion/proto/mctrl_pept_pb2.pyi,sha256=gr0lxUPqhyEnDdni9vpIQnAIhqAGtHlv1rFeb5EJnMY,2840
|
106
|
-
pymammotion/proto/mctrl_sys.proto,sha256=
|
107
|
-
pymammotion/proto/mctrl_sys.py,sha256=
|
106
|
+
pymammotion/proto/mctrl_sys.proto,sha256=_E9XeZyW1vhY8S0HxPcEjMKmuhULTonm8Q3Y0X3Qxaw,10222
|
107
|
+
pymammotion/proto/mctrl_sys.py,sha256=UJMQVXMjXVksp4O_eD_bUNPFM4ijvdSuma-sOIUsNUw,19138
|
108
108
|
pymammotion/proto/mctrl_sys_pb2.py,sha256=DYemb514mlC7c27t-k1YqqBif0xxhLmnIWk8rXtSj1c,21497
|
109
109
|
pymammotion/proto/mctrl_sys_pb2.pyi,sha256=Dj_1UM86kZ5MfcVyNC76Z0gKrfl5YFsVWP2b-bKoZvk,38912
|
110
110
|
pymammotion/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -117,7 +117,7 @@ pymammotion/utility/map.py,sha256=GYscVMg2cX3IPlNpCBNHDW0S55yS1WGRf1iHnNZ7TfQ,22
|
|
117
117
|
pymammotion/utility/movement.py,sha256=N75oAoAgFydqoaOedYIxGUHmuTCtPzAOtb-d_29tpfI,615
|
118
118
|
pymammotion/utility/periodic.py,sha256=MbeSb9cfhxzYmdT_RiE0dZe3H9IfbQW_zSqhmSX2RUc,3321
|
119
119
|
pymammotion/utility/rocker_util.py,sha256=6tX7sS87qoQC_tsxbx3NLL-HgS08wtzXiZkhDiz7uo0,7179
|
120
|
-
pymammotion-0.2.
|
121
|
-
pymammotion-0.2.
|
122
|
-
pymammotion-0.2.
|
123
|
-
pymammotion-0.2.
|
120
|
+
pymammotion-0.2.39.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
121
|
+
pymammotion-0.2.39.dist-info/METADATA,sha256=mYLEfzJfTdktiGpXX9Jjd6cPgEK9p7jrdPYuHRLqUGM,4052
|
122
|
+
pymammotion-0.2.39.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
123
|
+
pymammotion-0.2.39.dist-info/RECORD,,
|
File without changes
|
File without changes
|