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.
- pymammotion/aliyun/cloud_gateway.py +20 -3
- pymammotion/data/model/mowing_modes.py +7 -0
- pymammotion/data/model/report_info.py +1 -1
- pymammotion/data/mqtt/status.py +1 -1
- pymammotion/mammotion/devices/mammotion_cloud.py +7 -2
- pymammotion/mqtt/mammotion_mqtt.py +25 -0
- pymammotion/proto/mctrl_nav.proto +1 -1
- {pymammotion-0.4.8.dist-info → pymammotion-0.4.10.dist-info}/METADATA +1 -1
- {pymammotion-0.4.8.dist-info → pymammotion-0.4.10.dist-info}/RECORD +11 -11
- {pymammotion-0.4.8.dist-info → pymammotion-0.4.10.dist-info}/LICENSE +0 -0
- {pymammotion-0.4.8.dist-info → pymammotion-0.4.10.dist-info}/WHEEL +0 -0
@@ -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
|
|
@@ -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(
|
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()))
|
pymammotion/data/mqtt/status.py
CHANGED
@@ -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
|
-
|
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(
|
@@ -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=
|
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=
|
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=
|
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=
|
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
|
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=
|
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=
|
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.
|
121
|
-
pymammotion-0.4.
|
122
|
-
pymammotion-0.4.
|
123
|
-
pymammotion-0.4.
|
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,,
|
File without changes
|
File without changes
|