pymammotion 0.4.8__py3-none-any.whl → 0.4.10__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.
@@ -16,6 +16,7 @@ from alibabacloud_iot_api_gateway.client import Client
16
16
  from alibabacloud_iot_api_gateway.models import CommonParams, Config, IoTApiRequest
17
17
  from alibabacloud_tea_util.client import Client as UtilClient
18
18
  from alibabacloud_tea_util.models import RuntimeOptions
19
+ from Tea.exceptions import UnretryableException
19
20
 
20
21
  from pymammotion.aliyun.model.aep_response import AepResponse
21
22
  from pymammotion.aliyun.model.connect_response import ConnectResponse
@@ -45,6 +46,10 @@ MOVE_HEADERS = (
45
46
  class SetupException(Exception):
46
47
  """Raise when mqtt expires token or token is invalid."""
47
48
 
49
+ def __init__(self, *args: object) -> None:
50
+ super().__init__(args)
51
+ self.iot_id = args[1]
52
+
48
53
 
49
54
  class AuthRefreshException(Exception):
50
55
  """Raise exception when library cannot refresh token."""
@@ -53,10 +58,22 @@ class AuthRefreshException(Exception):
53
58
  class DeviceOfflineException(Exception):
54
59
  """Raise exception when device is offline."""
55
60
 
61
+ def __init__(self, *args: object) -> None:
62
+ super().__init__(args)
63
+ self.iot_id = args[1]
64
+
65
+
66
+ class NoConnectionException(UnretryableException):
67
+ """Raise exception when device is unreachable."""
68
+
56
69
 
57
70
  class GatewayTimeoutException(Exception):
58
71
  """Raise exception when the gateway times out."""
59
72
 
73
+ def __init__(self, *args: object) -> None:
74
+ super().__init__(args)
75
+ self.iot_id = args[1]
76
+
60
77
 
61
78
  class LoginException(Exception):
62
79
  """Raise exception when library cannot log in."""
@@ -691,14 +708,14 @@ class CloudIOTGateway:
691
708
  )
692
709
  if response_body_dict.get("code") == 20056:
693
710
  logger.debug("Gateway timeout.")
694
- raise GatewayTimeoutException(response_body_dict.get("code"))
711
+ raise GatewayTimeoutException(response_body_dict.get("code"), iot_id)
695
712
 
696
713
  if response_body_dict.get("code") == 29003:
697
714
  logger.debug(self._session_by_authcode_response.data.identityId)
698
715
  self.sign_out()
699
- raise SetupException(response_body_dict.get("code"))
716
+ raise SetupException(response_body_dict.get("code"), iot_id)
700
717
  if response_body_dict.get("code") == 6205:
701
- raise DeviceOfflineException(response_body_dict.get("code"))
718
+ raise DeviceOfflineException(response_body_dict.get("code"), iot_id)
702
719
 
703
720
  return message_id
704
721
 
@@ -44,6 +44,13 @@ class TraversalMode(IntEnum):
44
44
  follow_perimeter = 1
45
45
 
46
46
 
47
+ class TurningMode(IntEnum):
48
+ """Turning mode on corners."""
49
+
50
+ multipoint = 0
51
+ zero_turn = 1
52
+
53
+
47
54
  class DetectionStrategy(IntEnum):
48
55
  """Matches up with ultra_wave."""
49
56
 
@@ -140,6 +140,6 @@ class ReportData(DataClassORJSONMixin):
140
140
  self.dev = DeviceData.from_dict(data.get("dev", self.dev.to_dict()))
141
141
  self.rtk = RTKData.from_dict(data.get("rtk", self.rtk.to_dict()))
142
142
  self.maintenance = Maintain.from_dict(data.get("maintain", self.maintenance.to_dict()))
143
- self.vision_info = VisionInfo.from_dict(data.get("vio_to_app_info", VisionInfo(0, 0, 0, 0, 0, 0, 0).to_dict()))
143
+ self.vision_info = VisionInfo.from_dict(data.get("vio_to_app_info", VisionInfo().to_dict()))
144
144
  self.locations = locations
145
145
  self.work = WorkData.from_dict(data.get("work", self.work.to_dict()))
@@ -8,7 +8,7 @@ from mashumaro.mixins.orjson import DataClassORJSONMixin
8
8
  @dataclass
9
9
  class GroupIdListItem(DataClassORJSONMixin):
10
10
  groupId: str
11
- groupType: Literal["ISOLATION"]
11
+ groupType: Literal["ISOLATION", "ILOP_APP"]
12
12
 
13
13
 
14
14
  # are there other values?
@@ -8,6 +8,7 @@ import logging
8
8
  from typing import Any, cast
9
9
 
10
10
  import betterproto
11
+ from Tea.exceptions import UnretryableException
11
12
 
12
13
  from pymammotion import CloudIOTGateway, MammotionMQTT
13
14
  from pymammotion.aliyun.cloud_gateway import DeviceOfflineException
@@ -201,7 +202,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
201
202
  try:
202
203
  if self.on_ready_callback:
203
204
  await self.on_ready_callback()
204
- except DeviceOfflineException:
205
+ except (DeviceOfflineException, UnretryableException):
205
206
  _LOGGER.debug("Device is offline")
206
207
 
207
208
  async def on_disconnect(self) -> None:
@@ -218,6 +219,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
218
219
  """Stop all tasks and disconnect."""
219
220
  if self._ble_sync_task:
220
221
  self._ble_sync_task.cancel()
222
+ # self._mqtt._mqtt_client.unsubscribe()
221
223
  self.stopped = True
222
224
 
223
225
  async def start(self) -> None:
@@ -226,7 +228,10 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
226
228
  await self.run_periodic_sync_task()
227
229
  self.stopped = False
228
230
  if not self.mqtt.is_connected():
229
- self.mqtt.connect_async()
231
+ loop = asyncio.get_running_loop()
232
+ await loop.run_in_executor(None, self.mqtt.connect_async)
233
+ # else:
234
+ # self.mqtt._mqtt_client.thing_on_thing_enable(None)
230
235
 
231
236
  async def _ble_sync(self) -> None:
232
237
  command_bytes = self._commands.send_todev_ble_sync(3)
@@ -142,6 +142,31 @@ class MammotionMQTT:
142
142
  # command = MammotionCommand(device_name="Luba")
143
143
  # self._cloud_client.send_cloud_command(command.get_report_cfg())
144
144
 
145
+ def unsubscribe(self) -> None:
146
+ self._linkkit_client.unsubscribe_topic(
147
+ f"/sys/{self._product_key}/{self._device_name}/app/down/account/bind_reply"
148
+ )
149
+ self._linkkit_client.unsubscribe_topic(
150
+ f"/sys/{self._product_key}/{self._device_name}/app/down/thing/event/property/post_reply"
151
+ )
152
+ self._linkkit_client.unsubscribe_topic(
153
+ f"/sys/{self._product_key}/{self._device_name}/app/down/thing/wifi/status/notify"
154
+ )
155
+ self._linkkit_client.unsubscribe_topic(
156
+ f"/sys/{self._product_key}/{self._device_name}/app/down/thing/wifi/connect/event/notify"
157
+ )
158
+ self._linkkit_client.unsubscribe_topic(
159
+ f"/sys/{self._product_key}/{self._device_name}/app/down/_thing/event/notify"
160
+ )
161
+ self._linkkit_client.unsubscribe_topic(f"/sys/{self._product_key}/{self._device_name}/app/down/thing/events")
162
+ self._linkkit_client.unsubscribe_topic(f"/sys/{self._product_key}/{self._device_name}/app/down/thing/status")
163
+ self._linkkit_client.unsubscribe_topic(
164
+ f"/sys/{self._product_key}/{self._device_name}/app/down/thing/properties"
165
+ )
166
+ self._linkkit_client.unsubscribe_topic(
167
+ f"/sys/{self._product_key}/{self._device_name}/app/down/thing/model/down_raw"
168
+ )
169
+
145
170
  def _thing_on_topic_message(self, topic, payload, qos, user_data) -> None:
146
171
  """Is called when thing topic comes in."""
147
172
  logger.debug(
@@ -141,7 +141,7 @@ message NavGetCommData {
141
141
  int32 subCmd = 2;
142
142
  int32 action = 3;
143
143
  int32 type = 4;
144
- fixed64 hash = 5;
144
+ int64 hash = 5;
145
145
  int64 paternalHashA = 6;
146
146
  int64 paternalHashB = 7;
147
147
  int32 totalFrame = 8;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.4.8
3
+ Version: 0.4.10
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -1,6 +1,6 @@
1
1
  pymammotion/__init__.py,sha256=u1OHuD8Uj0qCOH4I7Lt5d7T-TPt1R0pY-bv8S6UfVxM,1587
2
2
  pymammotion/aliyun/__init__.py,sha256=T1lkX7TRYiL4nqYanG4l4MImV-SlavSbuooC-W-uUGw,29
3
- pymammotion/aliyun/cloud_gateway.py,sha256=bLTFivD7qpNXjzpM85Tao2y2urHXah5PZOdLc3iQ1nw,26099
3
+ pymammotion/aliyun/cloud_gateway.py,sha256=mafX63IuRhbSLNv5WjwhbDY4HJGHRCYAMJseVOQebJE,26605
4
4
  pymammotion/aliyun/model/aep_response.py,sha256=EY4uMTJ4F9rvbcXnAOc5YKi7q__9kIVgfDwfyr65Gk0,421
5
5
  pymammotion/aliyun/model/connect_response.py,sha256=Yz-fEbDzgGPTo5Of2oAjmFkSv08T7ze80pQU4k-gKIU,824
6
6
  pymammotion/aliyun/model/dev_by_account_response.py,sha256=P9yYy4Z2tLkJSqXA_5XGaCUliSSVa5ILl7VoMtL_tCA,977
@@ -33,16 +33,16 @@ pymammotion/data/model/execute_boarder.py,sha256=9rd_h4fbcsXxgnLOd2rO2hWyD1abnTG
33
33
  pymammotion/data/model/generate_route_information.py,sha256=pgjqURwmEIzjCMbl4Z5JDDkfxyUAdry1KhPfyir3-mU,777
34
34
  pymammotion/data/model/hash_list.py,sha256=1mwL715Q-OizowBDDPk1n_mYDZgb7kz24cIfzKu0QUM,7892
35
35
  pymammotion/data/model/location.py,sha256=PwmITejfI4pm7PI4rzqSuuHetwle6IJr_CV95435s2M,871
36
- pymammotion/data/model/mowing_modes.py,sha256=D9Tm8tRbVlu6i12-Lf3fp5KPG_qHnUvu273C6BGyJqc,975
36
+ pymammotion/data/model/mowing_modes.py,sha256=bBbRhDe-imZsXDR0TN0emQv6BiIkAlXJFb5isPEjgDk,1078
37
37
  pymammotion/data/model/plan.py,sha256=wGlcJT-w0EdbWK9jI838TCOm_MABFg7WoR664VB8RWg,2880
38
38
  pymammotion/data/model/rapid_state.py,sha256=mIdhAG_LZXpVcybxqTLgLXkNOmVmDTn04B9PGIDA8Ls,1251
39
39
  pymammotion/data/model/raw_data.py,sha256=x2xuqVC8CQuV3ui3QK4G5EqRET9EsNljHLHR11ByYgo,6471
40
40
  pymammotion/data/model/region_data.py,sha256=VokMRqB_o4OFL1TWAM90Fvm-1z4jcYrw3X2o760qpx4,2949
41
- pymammotion/data/model/report_info.py,sha256=iYTESR5qFseSZ9nS9udNOE76xDVxKaWWXfLPuFjztq8,3827
41
+ pymammotion/data/model/report_info.py,sha256=3nXBFRfdKWnZj4YfBcrPwhBRpq58ICMQlrESfI1tTMg,3808
42
42
  pymammotion/data/mqtt/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
43
43
  pymammotion/data/mqtt/event.py,sha256=r14gzZVxmlGVAwFdZQ1CUsMZFHHwRKnbt2VHnjugP28,5123
44
44
  pymammotion/data/mqtt/properties.py,sha256=pX5JRVmmpVO04CSPm5xAGcSWA_OeLd0JnBagLsfiSEc,3755
45
- pymammotion/data/mqtt/status.py,sha256=DuNC3JdewLPKNqNHx76_FPXRvheYSiM-CdiVTCCYY8s,1079
45
+ pymammotion/data/mqtt/status.py,sha256=SgdrpE1Uldb01hybO6hYhgU1Sp1eILghC0UhMZMHrdQ,1091
46
46
  pymammotion/data/state_manager.py,sha256=H3xHcLorw4xBtDAhyigl5rd1SYkLaSTBB9qQ6XQV9SM,8646
47
47
  pymammotion/event/__init__.py,sha256=mgATR6vPHACNQ-0zH5fi7NdzeTCDV1CZyaWPmtUusi8,115
48
48
  pymammotion/event/event.py,sha256=bj2RirSIRyBs0QvkcrOtwZWUX_8F3m1sySuHVyKmZLs,2143
@@ -68,13 +68,13 @@ pymammotion/mammotion/devices/__init__.py,sha256=f2qQFPgLGmV85W2hSlMUh5BYuht9o_A
68
68
  pymammotion/mammotion/devices/base.py,sha256=Klkmvo56VgAX_zqen__lhbRb41k2U9HEHzA7t9FoZjc,10333
69
69
  pymammotion/mammotion/devices/mammotion.py,sha256=Zz2tUIdGA-jFSHLM3aO8tBMvVl7sBIBiqC9Kg7f-lm8,13190
70
70
  pymammotion/mammotion/devices/mammotion_bluetooth.py,sha256=oNDwtDKsdsG62frehBCg6xmwF3CD3VJ32iUwQcAjzKo,19576
71
- pymammotion/mammotion/devices/mammotion_cloud.py,sha256=-mUZkLP5vgApG-5r3GIRUNmjCGwas11H5u2JhrI0X3U,13929
71
+ pymammotion/mammotion/devices/mammotion_cloud.py,sha256=ckTsfCjyCF_asXmACb7UgkPGUSdz9PqxlFdX1YPF7js,14208
72
72
  pymammotion/mqtt/__init__.py,sha256=Ocs5e-HLJvTuDpVXyECEsWIvwsUaxzj7lZ9mSYutNDY,105
73
73
  pymammotion/mqtt/linkkit/__init__.py,sha256=ENgc3ynd2kd9gMQR3-kgmCu6Ed9Y6XCIzU0zFReUlkk,80
74
74
  pymammotion/mqtt/linkkit/h2client.py,sha256=w9Nvi_nY4CLD_fw-pHtYChwQf7e2TiAGeqkY_sF4cf0,19659
75
75
  pymammotion/mqtt/linkkit/linkkit.py,sha256=NzFpdtfxNHQ6xNu-POyp45fTK7AWUAWV7RavFevX4m4,132772
76
76
  pymammotion/mqtt/mammotion_future.py,sha256=_OWqKOlUGl2yT1xOsXFQYpGd-1zQ63OxqXgy7KRQgYc,710
77
- pymammotion/mqtt/mammotion_mqtt.py,sha256=dQuGz-dQnOYI7vz_v5Kn9nHcizs-S0E2lZzJlZVkG5Y,8867
77
+ pymammotion/mqtt/mammotion_mqtt.py,sha256=urqhTIXabJ8QGAkArPZZQAm7CJQiA00912mviotTSds,10194
78
78
  pymammotion/proto/__init__.py,sha256=BLOSkNGEVbDJGtg9wYi0ziO3_tl3CIBRU3Sf9pmjuKU,72202
79
79
  pymammotion/proto/basestation.proto,sha256=_x5gAz3FkZXS1jtq4GgZgaDCuRU-UV-7HTFdsfQ3zbo,1034
80
80
  pymammotion/proto/basestation_pb2.py,sha256=PTVlHcDLQeRV6qv7ZPjGke9MF68mpqoUeJA0Sw_AoT0,2776
@@ -94,7 +94,7 @@ pymammotion/proto/luba_mul_pb2.pyi,sha256=f_lR1S7kkvwq67t7WO0SPG84dljA7fM3iCEz4x
94
94
  pymammotion/proto/mctrl_driver.proto,sha256=I0BncdAa3laeqT17Sn95r_1HuBD3dSc9IVu9U3o0fU4,1385
95
95
  pymammotion/proto/mctrl_driver_pb2.py,sha256=bfLwZb5Hehb6OIkgFrZMkQ0oTBXoOBxpruszKz-UM1U,3785
96
96
  pymammotion/proto/mctrl_driver_pb2.pyi,sha256=9_rcQELsSeOfeIQMTEFIpeXICpDe3arQeA4kAYWNSWw,5860
97
- pymammotion/proto/mctrl_nav.proto,sha256=bNnMQOp0lz61Xc4hiOCWGIcHF0BLk6wtfbLc7BHqn1Y,12459
97
+ pymammotion/proto/mctrl_nav.proto,sha256=VC7lVfEfwDaj1o17CSnJRfAtxYy4wSEtOmfCZqN7050,12457
98
98
  pymammotion/proto/mctrl_nav_pb2.py,sha256=Tx1aIZlee6mt22zViX1Em6mDoI4IvY9fS0aDHBG3QQ8,24390
99
99
  pymammotion/proto/mctrl_nav_pb2.pyi,sha256=MKc6uXAhEpKE_b28wC7I09DefoDtF2ciKsfCW8uCcgk,51655
100
100
  pymammotion/proto/mctrl_ota.proto,sha256=4iHr-v1R0QiNndCnv3b6mhXiERLukB67ZzhTgt1iMc0,629
@@ -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.4.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
121
- pymammotion-0.4.8.dist-info/METADATA,sha256=uevomcw376FSWbXFrvPFolzgZTYXtN0XTCz9ZQiVUys,3884
122
- pymammotion-0.4.8.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
123
- pymammotion-0.4.8.dist-info/RECORD,,
120
+ pymammotion-0.4.10.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
121
+ pymammotion-0.4.10.dist-info/METADATA,sha256=Cd1drp-O7IQPcZRlk7EV6fQfONwNW1xqRYjE2I2mYAE,3885
122
+ pymammotion-0.4.10.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
123
+ pymammotion-0.4.10.dist-info/RECORD,,