pymammotion 0.4.9__tar.gz → 0.4.11b1__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.
Files changed (123) hide show
  1. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/PKG-INFO +1 -1
  2. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/cloud_gateway.py +15 -3
  3. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/hash_list.py +27 -13
  4. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/devices/mammotion_cloud.py +5 -1
  5. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mqtt/mammotion_mqtt.py +25 -0
  6. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pyproject.toml +2 -2
  7. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/LICENSE +0 -0
  8. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/README.md +0 -0
  9. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/__init__.py +0 -0
  10. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/__init__.py +0 -0
  11. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/aep_response.py +0 -0
  12. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/connect_response.py +0 -0
  13. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  14. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  15. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/regions_response.py +0 -0
  16. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  17. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/model/stream_subscription_response.py +0 -0
  18. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/aliyun/tmp_constant.py +0 -0
  19. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/__init__.py +0 -0
  20. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/ble.py +0 -0
  21. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/ble_message.py +0 -0
  22. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/const.py +0 -0
  23. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/data/__init__.py +0 -0
  24. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/data/convert.py +0 -0
  25. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  26. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/data/notifydata.py +0 -0
  27. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/model/__init__.py +0 -0
  28. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  29. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/const.py +0 -0
  30. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/__init__.py +0 -0
  31. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/__init__.py +0 -0
  32. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/account.py +0 -0
  33. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/device.py +0 -0
  34. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/device_config.py +0 -0
  35. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/device_info.py +0 -0
  36. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/device_limits.py +0 -0
  37. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/enums.py +0 -0
  38. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/excute_boarder_params.py +0 -0
  39. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/execute_boarder.py +0 -0
  40. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/generate_route_information.py +0 -0
  41. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/location.py +0 -0
  42. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/mowing_modes.py +0 -0
  43. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/plan.py +0 -0
  44. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/rapid_state.py +0 -0
  45. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/raw_data.py +0 -0
  46. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/region_data.py +0 -0
  47. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/model/report_info.py +0 -0
  48. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/mqtt/__init__.py +0 -0
  49. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/mqtt/event.py +0 -0
  50. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/mqtt/properties.py +0 -0
  51. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/mqtt/status.py +0 -0
  52. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/data/state_manager.py +0 -0
  53. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/event/__init__.py +0 -0
  54. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/event/event.py +0 -0
  55. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/http/_init_.py +0 -0
  56. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/http/encryption.py +0 -0
  57. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/http/http.py +0 -0
  58. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/http/model/http.py +0 -0
  59. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/__init__.py +0 -0
  60. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/__init__.py +0 -0
  61. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  62. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  63. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  64. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  65. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/media.py +0 -0
  66. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  67. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/network.py +0 -0
  68. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  69. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/system.py +0 -0
  70. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/commands/messages/video.py +0 -0
  71. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/control/__init__.py +0 -0
  72. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/control/joystick.py +0 -0
  73. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/devices/__init__.py +0 -0
  74. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/devices/base.py +0 -0
  75. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/devices/mammotion.py +0 -0
  76. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
  77. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mqtt/__init__.py +0 -0
  78. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  79. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  80. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
  81. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/mqtt/mammotion_future.py +0 -0
  82. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/__init__.py +0 -0
  83. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/basestation.proto +0 -0
  84. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/basestation_pb2.py +0 -0
  85. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/basestation_pb2.pyi +0 -0
  86. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/common.proto +0 -0
  87. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/common_pb2.py +0 -0
  88. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/common_pb2.pyi +0 -0
  89. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/dev_net.proto +0 -0
  90. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/dev_net_pb2.py +0 -0
  91. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  92. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/luba_msg.proto +0 -0
  93. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/luba_msg_pb2.py +0 -0
  94. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  95. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/luba_mul.proto +0 -0
  96. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/luba_mul_pb2.py +0 -0
  97. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  98. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_driver.proto +0 -0
  99. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  100. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  101. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_nav.proto +0 -0
  102. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  103. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  104. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_ota.proto +0 -0
  105. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  106. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  107. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_pept.proto +0 -0
  108. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  109. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  110. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_sys.proto +0 -0
  111. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  112. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  113. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/py.typed +0 -0
  114. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/constant/__init__.py +0 -0
  115. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/constant/device_constant.py +0 -0
  116. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/conversions.py +0 -0
  117. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/datatype_converter.py +0 -0
  118. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/device_config.py +0 -0
  119. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/device_type.py +0 -0
  120. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/map.py +0 -0
  121. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/movement.py +0 -0
  122. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/periodic.py +0 -0
  123. {pymammotion-0.4.9 → pymammotion-0.4.11b1}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.4.9
3
+ Version: 0.4.11b1
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -46,6 +46,10 @@ MOVE_HEADERS = (
46
46
  class SetupException(Exception):
47
47
  """Raise when mqtt expires token or token is invalid."""
48
48
 
49
+ def __init__(self, *args: object) -> None:
50
+ super().__init__(args)
51
+ self.iot_id = args[1]
52
+
49
53
 
50
54
  class AuthRefreshException(Exception):
51
55
  """Raise exception when library cannot refresh token."""
@@ -54,6 +58,10 @@ class AuthRefreshException(Exception):
54
58
  class DeviceOfflineException(Exception):
55
59
  """Raise exception when device is offline."""
56
60
 
61
+ def __init__(self, *args: object) -> None:
62
+ super().__init__(args)
63
+ self.iot_id = args[1]
64
+
57
65
 
58
66
  class NoConnectionException(UnretryableException):
59
67
  """Raise exception when device is unreachable."""
@@ -62,6 +70,10 @@ class NoConnectionException(UnretryableException):
62
70
  class GatewayTimeoutException(Exception):
63
71
  """Raise exception when the gateway times out."""
64
72
 
73
+ def __init__(self, *args: object) -> None:
74
+ super().__init__(args)
75
+ self.iot_id = args[1]
76
+
65
77
 
66
78
  class LoginException(Exception):
67
79
  """Raise exception when library cannot log in."""
@@ -696,14 +708,14 @@ class CloudIOTGateway:
696
708
  )
697
709
  if response_body_dict.get("code") == 20056:
698
710
  logger.debug("Gateway timeout.")
699
- raise GatewayTimeoutException(response_body_dict.get("code"))
711
+ raise GatewayTimeoutException(response_body_dict.get("code"), iot_id)
700
712
 
701
713
  if response_body_dict.get("code") == 29003:
702
714
  logger.debug(self._session_by_authcode_response.data.identityId)
703
715
  self.sign_out()
704
- raise SetupException(response_body_dict.get("code"))
716
+ raise SetupException(response_body_dict.get("code"), iot_id)
705
717
  if response_body_dict.get("code") == 6205:
706
- raise DeviceOfflineException(response_body_dict.get("code"))
718
+ raise DeviceOfflineException(response_body_dict.get("code"), iot_id)
707
719
 
708
720
  return message_id
709
721
 
@@ -118,7 +118,7 @@ class HashList(DataClassORJSONMixin):
118
118
  hashlist for all our hashIDs for verification
119
119
  """
120
120
 
121
- root_hash_list: RootHashList = field(default_factory=RootHashList)
121
+ root_hash_lists: list[RootHashList] = field(default_factory=list)
122
122
  area: dict = field(default_factory=dict) # type 0
123
123
  path: dict = field(default_factory=dict) # type 2
124
124
  obstacle: dict = field(default_factory=dict) # type 1
@@ -135,37 +135,51 @@ class HashList(DataClassORJSONMixin):
135
135
 
136
136
  @property
137
137
  def hashlist(self) -> list[int]:
138
- if len(self.root_hash_list.data) == 0:
138
+ if not self.root_hash_lists:
139
139
  return []
140
- return [i for obj in self.root_hash_list.data for i in obj.data_couple]
140
+ # Combine data_couple from all RootHashLists
141
+ return [i for root_list in self.root_hash_lists for obj in root_list.data for i in obj.data_couple]
141
142
 
142
143
  @property
143
144
  def missing_hashlist(self) -> list[int]:
144
145
  """Return missing hashlist."""
146
+ all_hash_ids = set(self.area.keys()).union(
147
+ self.path.keys(), self.obstacle.keys(), self.dump.keys(), self.svg.keys()
148
+ )
145
149
  return [
146
150
  i
147
- for obj in self.root_hash_list.data
151
+ for root_list in self.root_hash_lists
152
+ for obj in root_list.data
148
153
  for i in obj.data_couple
149
- if f"{i}"
150
- not in set(self.area.keys()).union(
151
- self.path.keys(), self.obstacle.keys(), self.dump.keys(), self.svg.keys()
152
- )
154
+ if f"{i}" not in all_hash_ids
153
155
  ]
154
156
 
155
157
  def update_root_hash_list(self, hash_list: NavGetHashListData) -> None:
156
- self.root_hash_list.total_frame = hash_list.total_frame
158
+ target_root_list = next((rhl for rhl in self.root_hash_lists if rhl.total_frame == hash_list.total_frame), None)
157
159
 
158
- for index, obj in enumerate(self.root_hash_list.data):
160
+ if target_root_list is None:
161
+ # Create new RootHashList if none exists for this total_frame
162
+ new_root_list = RootHashList(total_frame=hash_list.total_frame, data=[hash_list])
163
+ self.root_hash_lists.append(new_root_list)
164
+ return
165
+
166
+ for index, obj in enumerate(target_root_list.data):
159
167
  if obj.current_frame == hash_list.current_frame:
160
168
  # Replace the item if current_frame matches
161
- self.root_hash_list.data[index] = hash_list
169
+ target_root_list.data[index] = hash_list
162
170
  return
163
171
 
164
172
  # If no match was found, append the new item
165
- self.root_hash_list.data.append(hash_list)
173
+ target_root_list.data.append(hash_list)
166
174
 
167
175
  def missing_hash_frame(self) -> list[int]:
168
- return self._find_missing_frames(self.root_hash_list)
176
+ """Returns a combined list of all missing frames across all RootHashLists."""
177
+ missing_frames = []
178
+ for root_list in self.root_hash_lists:
179
+ missing = self._find_missing_frames(root_list)
180
+ if missing:
181
+ missing_frames.extend(missing)
182
+ return missing_frames
169
183
 
170
184
  def missing_frame(self, hash_data: NavGetCommDataAck | SvgMessageAckT) -> list[int]:
171
185
  if hash_data.type == PathType.AREA:
@@ -219,6 +219,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
219
219
  """Stop all tasks and disconnect."""
220
220
  if self._ble_sync_task:
221
221
  self._ble_sync_task.cancel()
222
+ # self._mqtt._mqtt_client.unsubscribe()
222
223
  self.stopped = True
223
224
 
224
225
  async def start(self) -> None:
@@ -227,7 +228,10 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
227
228
  await self.run_periodic_sync_task()
228
229
  self.stopped = False
229
230
  if not self.mqtt.is_connected():
230
- 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)
231
235
 
232
236
  async def _ble_sync(self) -> None:
233
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(
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "pymammotion"
7
- version = "0.4.9"
7
+ version = "0.4.11-beta1"
8
8
  license = "GPL-3.0"
9
9
  description = ""
10
10
  readme = "README.md"
@@ -65,7 +65,7 @@ mypy = "^1.11.2"
65
65
  autotyping = "^24.3.0"
66
66
 
67
67
  [tool.bumpver]
68
- current_version = "0.4.9"
68
+ current_version = "0.4.11-beta1"
69
69
  version_pattern = "MAJOR.MINOR.PATCH"
70
70
  commit_message = "Bump version {old_version} -> {new_version}"
71
71
  commit = true
File without changes
File without changes