pymammotion 0.5.3__tar.gz → 0.5.5__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 (130) hide show
  1. {pymammotion-0.5.3 → pymammotion-0.5.5}/PKG-INFO +1 -1
  2. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/cloud_gateway.py +6 -6
  3. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/mqtt/properties.py +4 -4
  4. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/devices/mammotion_cloud.py +3 -1
  5. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mqtt/linkkit/linkkit.py +3 -0
  6. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mqtt/mammotion_mqtt.py +3 -3
  7. {pymammotion-0.5.3 → pymammotion-0.5.5}/pyproject.toml +2 -2
  8. {pymammotion-0.5.3 → pymammotion-0.5.5}/LICENSE +0 -0
  9. {pymammotion-0.5.3 → pymammotion-0.5.5}/README.md +0 -0
  10. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/__init__.py +0 -0
  11. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/__init__.py +0 -0
  12. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/client.py +0 -0
  13. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/model/aep_response.py +0 -0
  14. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/model/connect_response.py +0 -0
  15. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  16. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  17. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/model/regions_response.py +0 -0
  18. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  19. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/regions.py +0 -0
  20. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/tea/core.py +0 -0
  21. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/aliyun/tmp_constant.py +0 -0
  22. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/__init__.py +0 -0
  23. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/ble.py +0 -0
  24. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/ble_message.py +0 -0
  25. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/const.py +0 -0
  26. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/data/__init__.py +0 -0
  27. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/data/convert.py +0 -0
  28. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  29. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/data/notifydata.py +0 -0
  30. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/model/__init__.py +0 -0
  31. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  32. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/const.py +0 -0
  33. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/__init__.py +0 -0
  34. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/__init__.py +0 -0
  35. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/account.py +0 -0
  36. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/device.py +0 -0
  37. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/device_config.py +0 -0
  38. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/device_info.py +0 -0
  39. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/device_limits.py +0 -0
  40. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/enums.py +0 -0
  41. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/excute_boarder_params.py +0 -0
  42. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/execute_boarder.py +0 -0
  43. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/generate_route_information.py +0 -0
  44. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/hash_list.py +0 -0
  45. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/location.py +0 -0
  46. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/mowing_modes.py +0 -0
  47. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/rapid_state.py +0 -0
  48. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/raw_data.py +0 -0
  49. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/region_data.py +0 -0
  50. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/report_info.py +0 -0
  51. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/model/work.py +0 -0
  52. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/mqtt/__init__.py +0 -0
  53. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/mqtt/event.py +0 -0
  54. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/mqtt/status.py +0 -0
  55. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/data/state_manager.py +0 -0
  56. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/event/__init__.py +0 -0
  57. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/event/event.py +0 -0
  58. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/__init__.py +0 -0
  59. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/_init_.py +0 -0
  60. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/encryption.py +0 -0
  61. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/http.py +0 -0
  62. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/model/__init__.py +0 -0
  63. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/model/camera_stream.py +0 -0
  64. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/model/http.py +0 -0
  65. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/http/model/response_factory.py +0 -0
  66. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/__init__.py +0 -0
  67. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/__init__.py +0 -0
  68. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  69. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  70. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  71. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  72. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/media.py +0 -0
  73. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  74. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/network.py +0 -0
  75. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  76. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/system.py +0 -0
  77. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/commands/messages/video.py +0 -0
  78. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/control/__init__.py +0 -0
  79. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/control/joystick.py +0 -0
  80. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/devices/__init__.py +0 -0
  81. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/devices/base.py +0 -0
  82. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/devices/mammotion.py +0 -0
  83. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
  84. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mqtt/__init__.py +0 -0
  85. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  86. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  87. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/mqtt/mammotion_future.py +0 -0
  88. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/__init__.py +0 -0
  89. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/basestation.proto +0 -0
  90. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/basestation_pb2.py +0 -0
  91. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/basestation_pb2.pyi +0 -0
  92. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/common.proto +0 -0
  93. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/common_pb2.py +0 -0
  94. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/common_pb2.pyi +0 -0
  95. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/dev_net.proto +0 -0
  96. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/dev_net_pb2.py +0 -0
  97. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  98. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/luba_msg.proto +0 -0
  99. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/luba_msg_pb2.py +0 -0
  100. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  101. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/luba_mul.proto +0 -0
  102. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/luba_mul_pb2.py +0 -0
  103. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  104. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_driver.proto +0 -0
  105. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  106. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  107. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_nav.proto +0 -0
  108. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  109. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  110. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_ota.proto +0 -0
  111. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  112. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  113. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_pept.proto +0 -0
  114. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  115. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  116. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_sys.proto +0 -0
  117. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  118. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  119. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/py.typed +0 -0
  120. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/constant/__init__.py +0 -0
  121. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/constant/device_constant.py +0 -0
  122. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/conversions.py +0 -0
  123. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/datatype_converter.py +0 -0
  124. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/device_config.py +0 -0
  125. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/device_type.py +0 -0
  126. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/map.py +0 -0
  127. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/movement.py +0 -0
  128. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/mur_mur_hash.py +0 -0
  129. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/periodic.py +0 -0
  130. {pymammotion-0.5.3 → pymammotion-0.5.5}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.5.3
3
+ Version: 0.5.5
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -5,6 +5,7 @@ import hashlib
5
5
  import hmac
6
6
  import itertools
7
7
  import json
8
+ from json.decoder import JSONDecodeError
8
9
  from logging import getLogger
9
10
  import random
10
11
  import string
@@ -15,7 +16,6 @@ from aiohttp import ClientSession, ConnectionTimeoutError
15
16
  from alibabacloud_iot_api_gateway.models import CommonParams, Config, IoTApiRequest
16
17
  from alibabacloud_tea_util.client import Client as UtilClient
17
18
  from alibabacloud_tea_util.models import RuntimeOptions
18
- from orjson.orjson import JSONDecodeError
19
19
  from Tea.exceptions import UnretryableException
20
20
 
21
21
  from pymammotion.aliyun.client import Client
@@ -153,7 +153,7 @@ class CloudIOTGateway:
153
153
  return json.loads(response_body_str) if response_body_str is not None else {}
154
154
  except JSONDecodeError:
155
155
  logger.error("Couldn't decode message %s", response_body_str)
156
- return {'code': 22000}
156
+ return {"code": 22000}
157
157
 
158
158
  def sign(self, data):
159
159
  """Generate signature for the given data."""
@@ -691,21 +691,21 @@ class CloudIOTGateway:
691
691
  return self._devices_by_account_response
692
692
 
693
693
  async def send_cloud_command(self, iot_id: str, command: bytes) -> str:
694
-
695
694
  """Sends a cloud command to a specified IoT device.
696
-
695
+
697
696
  This function checks if the IoT token is expired and attempts to refresh it if
698
697
  possible. It then constructs a request using the provided command and sends it
699
698
  to the IoT device via an asynchronous HTTP POST request. The function handles
700
699
  various error codes and exceptions based on the response from the cloud
701
700
  service.
702
-
701
+
703
702
  Args:
704
703
  iot_id (str): The unique identifier of the IoT device.
705
704
  command (bytes): The command to be sent to the IoT device in binary format.
706
-
705
+
707
706
  Returns:
708
707
  str: A unique message ID for the sent command.
708
+
709
709
  """
710
710
  if command is None:
711
711
  raise Exception("Command is missing / None")
@@ -125,13 +125,13 @@ ItemTypes = Union[
125
125
 
126
126
 
127
127
  @dataclass
128
- class Item:
128
+ class Item(DataClassDictMixin):
129
129
  time: int
130
130
  value: int | float | str | dict[str, Any] | ItemTypes # Depending on the type of value
131
131
 
132
132
 
133
133
  @dataclass
134
- class Items:
134
+ class Items(DataClassDictMixin):
135
135
  iotState: Item | None = None
136
136
  extMod: Item | None = None
137
137
  deviceVersionInfo: Item | None = None
@@ -163,12 +163,12 @@ class Items:
163
163
 
164
164
  @dataclass
165
165
  class Params(DataClassORJSONMixin):
166
- deviceType: Literal["LawnMower"]
166
+ deviceType: Literal["LawnMower", "Tracker"]
167
167
  checkFailedData: dict
168
168
  groupIdList: list[str]
169
169
  _tenantId: str
170
170
  groupId: str
171
- categoryKey: Literal["LawnMower"]
171
+ categoryKey: Literal["LawnMower", "Tracker"]
172
172
  batchId: str
173
173
  gmtCreate: int
174
174
  productKey: str
@@ -61,7 +61,9 @@ class MammotionCloud:
61
61
  return self._mqtt_client.is_connected
62
62
 
63
63
  def disconnect(self) -> None:
64
- self._mqtt_client.disconnect()
64
+ """Disconnect the MQTT client."""
65
+ if self.is_connected:
66
+ self._mqtt_client.disconnect()
65
67
 
66
68
  def connect_async(self) -> None:
67
69
  self._mqtt_client.connect_async()
@@ -1352,6 +1352,9 @@ UxeCp6
1352
1352
 
1353
1353
  def connect_async(self):
1354
1354
  self.__link_log.debug("connect_async")
1355
+ if self.__linkkit_state == LinkKit.LinkKitState.CONNECTED:
1356
+ self.__link_log.info("already connected, returning")
1357
+ return
1355
1358
  if self.__linkkit_state not in (LinkKit.LinkKitState.INITIALIZED, LinkKit.LinkKitState.DISCONNECTED):
1356
1359
  raise LinkKit.StateError("not in INITIALIZED or DISCONNECTED state")
1357
1360
  self.__connect_async_req = True
@@ -175,18 +175,18 @@ class MammotionMQTT:
175
175
  )
176
176
  payload = json.loads(payload)
177
177
  iot_id = payload.get("params", {}).get("iotId", "")
178
- if iot_id != "" and self.on_message:
178
+ if iot_id != "" and self.on_message is not None:
179
179
  future = asyncio.run_coroutine_threadsafe(self.on_message(topic, payload, iot_id), self.loop)
180
180
  asyncio.wrap_future(future, loop=self.loop)
181
181
 
182
- def _thing_on_connect(self, session_flag, rc, user_data) -> None:
182
+ def _thing_on_connect(self, userdata, flags, reason_code, properties) -> None:
183
183
  """Is called on thing connect."""
184
184
  self.is_connected = True
185
185
  if self.on_connected is not None:
186
186
  future = asyncio.run_coroutine_threadsafe(self.on_connected(), self.loop)
187
187
  asyncio.wrap_future(future, loop=self.loop)
188
188
 
189
- logger.debug("on_connect, session_flag:%d, rc:%d", session_flag, rc)
189
+ logger.debug("on_connect, session_flag:%d, rc:%d", flags, reason_code)
190
190
 
191
191
  # self._linkkit_client.subscribe_topic(f"/sys/{self._product_key}/{self._device_name}/#")
192
192
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "pymammotion"
7
- version = "0.5.3"
7
+ version = "0.5.5"
8
8
  license = "GPL-3.0"
9
9
  description = ""
10
10
  readme = "README.md"
@@ -66,7 +66,7 @@ autotyping = "^24.3.0"
66
66
  ipython = "^9.0.2"
67
67
 
68
68
  [tool.bumpver]
69
- current_version = "0.5.2"
69
+ current_version = "0.5.5"
70
70
  version_pattern = "MAJOR.MINOR.PATCH"
71
71
  commit_message = "Bump version {old_version} -> {new_version}"
72
72
  commit = true
File without changes
File without changes