pymammotion 0.0.45__tar.gz → 0.0.47__tar.gz

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.

Potentially problematic release.


This version of pymammotion might be problematic. Click here for more details.

Files changed (108) hide show
  1. {pymammotion-0.0.45 → pymammotion-0.0.47}/PKG-INFO +1 -1
  2. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/hash_list.py +9 -6
  3. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/state_manager.py +9 -10
  4. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/devices/mammotion.py +39 -13
  5. {pymammotion-0.0.45 → pymammotion-0.0.47}/pyproject.toml +2 -2
  6. {pymammotion-0.0.45 → pymammotion-0.0.47}/LICENSE +0 -0
  7. {pymammotion-0.0.45 → pymammotion-0.0.47}/README.md +0 -0
  8. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/__init__.py +0 -0
  9. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/__init__.py +0 -0
  10. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/cloud_gateway.py +0 -0
  11. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/cloud_service.py +0 -0
  12. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/dataclass/aep_response.py +0 -0
  13. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/dataclass/connect_response.py +0 -0
  14. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/dataclass/dev_by_account_response.py +0 -0
  15. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/dataclass/login_by_oauth_response.py +0 -0
  16. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/dataclass/regions_response.py +0 -0
  17. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/dataclass/session_by_authcode_response.py +0 -0
  18. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/aliyun/tmp_constant.py +0 -0
  19. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/__init__.py +0 -0
  20. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/ble.py +0 -0
  21. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/ble_message.py +0 -0
  22. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/const.py +0 -0
  23. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/data/__init__.py +0 -0
  24. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/data/convert.py +0 -0
  25. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  26. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/bluetooth/data/notifydata.py +0 -0
  27. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/const.py +0 -0
  28. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/__init__.py +0 -0
  29. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/__init__.py +0 -0
  30. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/device.py +0 -0
  31. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/enums.py +0 -0
  32. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/excute_boarder_params.py +0 -0
  33. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/execute_boarder.py +0 -0
  34. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/generate_route_information.py +0 -0
  35. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/location.py +0 -0
  36. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/mowing_modes.py +0 -0
  37. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/plan.py +0 -0
  38. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/rapid_state.py +0 -0
  39. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/model/region_data.py +0 -0
  40. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/mqtt/__init__.py +0 -0
  41. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/mqtt/event.py +0 -0
  42. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/mqtt/properties.py +0 -0
  43. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/data/mqtt/status.py +0 -0
  44. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/event/__init__.py +0 -0
  45. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/event/event.py +0 -0
  46. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/http/_init_.py +0 -0
  47. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/http/http.py +0 -0
  48. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/__init__.py +0 -0
  49. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/__init__.py +0 -0
  50. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  51. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  52. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  53. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  54. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/media.py +0 -0
  55. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  56. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/network.py +0 -0
  57. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  58. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/system.py +0 -0
  59. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/commands/messages/video.py +0 -0
  60. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/control/__init__.py +0 -0
  61. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/control/joystick.py +0 -0
  62. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mammotion/devices/__init__.py +0 -0
  63. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mqtt/__init__.py +0 -0
  64. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
  65. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/__init__.py +0 -0
  66. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/common.proto +0 -0
  67. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/common.py +0 -0
  68. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/common_pb2.py +0 -0
  69. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/common_pb2.pyi +0 -0
  70. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/dev_net.proto +0 -0
  71. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/dev_net.py +0 -0
  72. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/dev_net_pb2.py +0 -0
  73. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  74. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_msg.proto +0 -0
  75. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_msg.py +0 -0
  76. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_msg_pb2.py +0 -0
  77. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  78. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_mul.proto +0 -0
  79. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_mul.py +0 -0
  80. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_mul_pb2.py +0 -0
  81. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  82. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_driver.proto +0 -0
  83. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_driver.py +0 -0
  84. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  85. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  86. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_nav.proto +0 -0
  87. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_nav.py +0 -0
  88. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  89. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  90. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_ota.proto +0 -0
  91. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_ota.py +0 -0
  92. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  93. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  94. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_pept.proto +0 -0
  95. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_pept.py +0 -0
  96. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  97. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  98. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_sys.proto +0 -0
  99. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_sys.py +0 -0
  100. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  101. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  102. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/py.typed +0 -0
  103. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/utility/constant/__init__.py +0 -0
  104. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/utility/constant/device_constant.py +0 -0
  105. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/utility/datatype_converter.py +0 -0
  106. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/utility/device_type.py +0 -0
  107. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/utility/periodic.py +0 -0
  108. {pymammotion-0.0.45 → pymammotion-0.0.47}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pymammotion
3
- Version: 0.0.45
3
+ Version: 0.0.47
4
4
  Summary:
5
5
  License: GNU-3.0
6
6
  Author: Michael Arthur
@@ -19,21 +19,24 @@ class HashList:
19
19
  path: dict # type 2
20
20
  obstacle: dict # type 1
21
21
 
22
- def update(self, hash_data: NavGetCommDataAck):
22
+ def update(self, hash_data: NavGetCommDataAck) -> bool:
23
23
  """Update the map data."""
24
24
  if hash_data.type == 0:
25
- self._add_hash_data(self.area, hash_data)
25
+ return self._add_hash_data(self.area, hash_data)
26
26
 
27
27
  if hash_data.type == 1:
28
- self._add_hash_data(self.obstacle, hash_data)
28
+ return self._add_hash_data(self.obstacle, hash_data)
29
29
 
30
30
  if hash_data.type == 2:
31
- self._add_hash_data(self.path, hash_data)
31
+ return self._add_hash_data(self.path, hash_data)
32
32
 
33
33
  @staticmethod
34
- def _add_hash_data(hash_dict: dict, hash_data: NavGetCommDataAck) -> None:
34
+ def _add_hash_data(hash_dict: dict, hash_data: NavGetCommDataAck) -> bool:
35
35
  if hash_dict.get(hash_data.hash) is None:
36
36
  hash_dict[hash_data.hash] = FrameList(total_frame=hash_data.total_frame, data=[hash_data])
37
+ return True
37
38
 
38
39
  if hash_data not in hash_dict[hash_data.hash].data:
39
- hash_dict[hash_data.hash].data.append(hash_data)
40
+ hash_dict[hash_data.hash].data.append(hash_data)
41
+ return True
42
+ return False
@@ -5,6 +5,7 @@ import betterproto
5
5
  from pymammotion.data.model.device import MowingDevice
6
6
  from pymammotion.event.event import DataEvent
7
7
  from pymammotion.proto.luba_msg import LubaMsg
8
+ from pymammotion.proto.mctrl_nav import NavGetCommDataAck
8
9
 
9
10
 
10
11
  class StateManager:
@@ -50,25 +51,23 @@ class StateManager:
50
51
  nav_msg = betterproto.which_one_of(message.nav, "SubNavMsg")
51
52
  match nav_msg[0]:
52
53
  case "toapp_gethash_ack":
53
- # call callback to handle this data
54
- print(nav_msg[1])
54
+ self._device.map.obstacle = dict()
55
+ self._device.map.area = dict()
56
+ self._device.map.path = dict()
55
57
  await self.gethash_ack_callback.data_event(nav_msg[1])
56
58
  case "toapp_get_commondata_ack":
57
- # callback to additional method
58
- print(nav_msg[1])
59
- self._device.map.update(nav_msg[1])
60
- await self.get_commondata_ack_callback.data_event(nav_msg[1])
59
+ common_data: NavGetCommDataAck = nav_msg[1]
60
+ updated = self._device.map.update(common_data)
61
+ if updated:
62
+ await self.get_commondata_ack_callback.data_event(common_data)
61
63
 
62
64
  def _update_sys_data(self, message):
63
65
  """Update system."""
64
66
  sys_msg = betterproto.which_one_of(message.sys, "SubSysMsg")
65
67
  match sys_msg[0]:
66
68
  case "system_update_buf":
67
- # call callback to handle this data
68
- print(sys_msg[1])
69
69
  self._device.buffer(sys_msg[1])
70
70
  case "toapp_report_data":
71
- # data for sensors
72
71
  pass
73
72
 
74
73
  def _update_driver_data(self, message):
@@ -81,4 +80,4 @@ class StateManager:
81
80
  pass
82
81
 
83
82
  def _update_ota_data(self, message):
84
- pass
83
+ pass
@@ -79,6 +79,21 @@ def slashescape(err):
79
79
  codecs.register_error("slashescape", slashescape)
80
80
 
81
81
 
82
+ def find_next_integer(lst: list[int], current_int: int) -> int | None:
83
+ try:
84
+ # Find the index of the current integer
85
+ current_index = lst.index(current_int)
86
+
87
+ # Check if there is a next integer in the list
88
+ if current_index + 1 < len(lst):
89
+ return lst[current_index + 1]
90
+ else:
91
+ return None # Or raise an exception or handle it in some other way
92
+ except ValueError:
93
+ # Handle the case where current_int is not in the list
94
+ return None # Or raise an exception or handle it in some other way
95
+
96
+
82
97
  def _handle_timeout(fut: asyncio.Future[None]) -> None:
83
98
  """Handle a timeout."""
84
99
  if not fut.done():
@@ -143,30 +158,41 @@ class MammotionBaseDevice:
143
158
 
144
159
  async def datahash_response(self, hash_ack: NavGetHashListAck):
145
160
  """Handle datahash responses."""
146
- for data_hash in hash_ack.data_couple:
161
+ result_hash = 0
162
+ while hash_ack.data_couple[0] != result_hash:
163
+ data = await self._send_command_with_args("synchronize_hash_data", hash_num=hash_ack.data_couple[0])
164
+ msg = LubaMsg().parse(data)
165
+ if betterproto.serialized_on_wire(msg.nav.toapp_get_commondata_ack):
166
+ result_hash = msg.nav.toapp_get_commondata_ack.hash
167
+
168
+ async def commdata_response(self, common_data: NavGetCommDataAck):
169
+ """Handle common data responses."""
170
+ total_frame = common_data.total_frame
171
+ current_frame = common_data.current_frame
172
+
173
+ if total_frame == current_frame:
174
+ # get next in hash ack list
175
+
176
+ data_hash = find_next_integer(self.luba_msg.nav.toapp_gethash_ack.data_couple, common_data.hash)
177
+ if data_hash is None:
178
+ return
147
179
  result_hash = 0
148
180
  while data_hash != result_hash:
149
181
  data = await self._send_command_with_args("synchronize_hash_data", hash_num=data_hash)
150
182
  msg = LubaMsg().parse(data)
151
183
  if betterproto.serialized_on_wire(msg.nav.toapp_get_commondata_ack):
152
184
  result_hash = msg.nav.toapp_get_commondata_ack.hash
153
- else:
154
- await asyncio.sleep(0.5)
155
-
156
- async def commdata_response(self, common_data: NavGetCommDataAck):
157
- """Handle common data responses."""
158
- # TODO check if the hash exists and whether or not to call get regional
159
- total_frame = common_data.total_frame
160
- current_frame = 1
161
- while current_frame <= total_frame:
185
+ else:
186
+ # check if we have the data already first
162
187
  region_data = RegionData()
163
- region_data.hash = common_data.data_hash
188
+ region_data.hash = common_data.hash
164
189
  region_data.action = common_data.action
165
190
  region_data.type = common_data.type
166
191
  region_data.total_frame = total_frame
167
192
  region_data.current_frame = current_frame
168
193
  await self._send_command_with_args("get_regional_data", regional_data=region_data)
169
- current_frame += 1
194
+
195
+
170
196
 
171
197
  def _update_raw_data(self, data: bytes) -> None:
172
198
  """Update raw and model data from notifications."""
@@ -242,7 +268,7 @@ class MammotionBaseDevice:
242
268
  return self._raw_data
243
269
 
244
270
  @property
245
- def luba_msg(self) -> LubaMsg:
271
+ def luba_msg(self) -> MowingDevice:
246
272
  """Get the LubaMsg of the device."""
247
273
  return self._luba_msg
248
274
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pymammotion"
3
- version = "0.0.45"
3
+ version = "0.0.47"
4
4
  license = "GNU-3.0"
5
5
  description = ""
6
6
  readme = "README.md"
@@ -49,7 +49,7 @@ pre-commit = "^3.7.1"
49
49
 
50
50
 
51
51
  [tool.bumpver]
52
- current_version = "0.0.42"
52
+ current_version = "0.0.47"
53
53
  version_pattern = "MAJOR.MINOR.PATCH"
54
54
  commit_message = "Bump version {old_version} -> {new_version}"
55
55
  commit = true
File without changes
File without changes