pymammotion 0.4.19__tar.gz → 0.4.21__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.
- {pymammotion-0.4.19 → pymammotion-0.4.21}/PKG-INFO +1 -1
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/http/http.py +6 -2
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/devices/base.py +9 -6
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/devices/mammotion.py +3 -2
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pyproject.toml +2 -2
- {pymammotion-0.4.19 → pymammotion-0.4.21}/LICENSE +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/README.md +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/client.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/cloud_gateway.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/aep_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/connect_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/regions_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/stream_subscription_response.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/tea/core.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/tmp_constant.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/ble.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/ble_message.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/const.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/data/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/data/convert.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/data/framectrldata.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/data/notifydata.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/model/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/const.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/account.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/device.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/device_config.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/device_info.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/device_limits.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/enums.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/excute_boarder_params.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/execute_boarder.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/generate_route_information.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/hash_list.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/location.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/mowing_modes.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/plan.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/rapid_state.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/raw_data.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/region_data.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/report_info.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/mqtt/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/mqtt/event.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/mqtt/properties.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/mqtt/status.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/state_manager.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/event/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/event/event.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/http/_init_.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/http/encryption.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/http/model/http.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/abstract_message.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/driver.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/media.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/network.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/ota.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/system.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/video.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/control/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/control/joystick.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/devices/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/devices/mammotion_cloud.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mqtt/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mqtt/linkkit/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mqtt/linkkit/h2client.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mqtt/mammotion_future.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/basestation.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/basestation_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/basestation_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/common.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/common_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/common_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/dev_net.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/dev_net_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/dev_net_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/luba_msg.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/luba_msg_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/luba_mul.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/luba_mul_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_driver.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_nav.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_ota.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_pept.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_sys.proto +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/py.typed +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/constant/__init__.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/constant/device_constant.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/conversions.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/datatype_converter.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/device_config.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/device_type.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/map.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/movement.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/periodic.py +0 -0
- {pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/utility/rocker_util.py +0 -0
@@ -108,8 +108,12 @@ class MammotionHTTP:
|
|
108
108
|
# Assuming the data format matches the expected structure
|
109
109
|
return Response[StreamSubscriptionResponse].from_dict(data)
|
110
110
|
|
111
|
-
async def refresh_login(self) -> Response[LoginResponseData]:
|
112
|
-
|
111
|
+
async def refresh_login(self, account: str, password: str | None = None) -> Response[LoginResponseData]:
|
112
|
+
if self._password is None and password is not None:
|
113
|
+
self._password = password
|
114
|
+
if self._password is None:
|
115
|
+
raise ValueError("Password is required for refresh login")
|
116
|
+
return await self.login(account, self._password)
|
113
117
|
|
114
118
|
async def login(self, account: str, password: str) -> Response[LoginResponseData]:
|
115
119
|
self.account = account
|
@@ -218,29 +218,32 @@ class MammotionBaseDevice:
|
|
218
218
|
|
219
219
|
await self.queue_command("read_plan", sub_cmd=2, plan_index=0)
|
220
220
|
|
221
|
-
|
222
|
-
await self.queue_command("get_all_boundary_hash_list", sub_cmd=0)
|
223
|
-
|
224
|
-
for hash, frame in self.mower.map.area.items():
|
221
|
+
for hash, frame in list(self.mower.map.area.items()):
|
225
222
|
missing_frames = self.mower.map.find_missing_frames(frame)
|
226
223
|
if len(missing_frames) > 0:
|
227
224
|
del self.mower.map.area[hash]
|
228
225
|
|
229
|
-
for hash, frame in self.mower.map.path.items():
|
226
|
+
for hash, frame in list(self.mower.map.path.items()):
|
230
227
|
missing_frames = self.mower.map.find_missing_frames(frame)
|
231
228
|
if len(missing_frames) > 0:
|
232
229
|
del self.mower.map.path[hash]
|
233
230
|
|
234
|
-
for hash, frame in self.mower.map.obstacle.items():
|
231
|
+
for hash, frame in list(self.mower.map.obstacle.items()):
|
235
232
|
missing_frames = self.mower.map.find_missing_frames(frame)
|
236
233
|
if len(missing_frames) > 0:
|
237
234
|
del self.mower.map.obstacle[hash]
|
238
235
|
|
236
|
+
# don't know why but total frame on svg is wrong
|
239
237
|
# for hash, frame in self.mower.map.svg.items():
|
240
238
|
# missing_frames = self.mower.map.find_missing_frames(frame)
|
241
239
|
# if len(missing_frames) > 0:
|
242
240
|
# del self.mower.map.svg[hash]
|
243
241
|
|
242
|
+
if len(self.mower.map.root_hash_lists) == 0:
|
243
|
+
await self.queue_command("get_all_boundary_hash_list", sub_cmd=0)
|
244
|
+
# add a small delay to allow result to come through if it does.
|
245
|
+
await asyncio.sleep(1)
|
246
|
+
|
244
247
|
if len(self.mower.map.missing_hashlist()) > 0:
|
245
248
|
data_hash = self.mower.map.missing_hashlist().pop()
|
246
249
|
await self.queue_command("synchronize_hash_data", hash_num=data_hash)
|
@@ -187,14 +187,15 @@ class Mammotion:
|
|
187
187
|
cloud_client = await self.login(account, password)
|
188
188
|
await self.initiate_cloud_connection(account, cloud_client)
|
189
189
|
|
190
|
-
async def refresh_login(self, account: str) -> None:
|
190
|
+
async def refresh_login(self, account: str, password: str | None = None) -> None:
|
191
191
|
async with self._login_lock:
|
192
192
|
exists: MammotionCloud | None = self.mqtt_list.get(account)
|
193
193
|
if not exists:
|
194
194
|
return
|
195
195
|
mammotion_http = exists.cloud_client.mammotion_http
|
196
|
-
await mammotion_http.refresh_login()
|
196
|
+
await mammotion_http.refresh_login(account, password)
|
197
197
|
await self.connect_iot(mammotion_http, exists.cloud_client)
|
198
|
+
|
198
199
|
if not exists.is_connected():
|
199
200
|
loop = asyncio.get_running_loop()
|
200
201
|
await loop.run_in_executor(None, exists.connect_async)
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "pymammotion"
|
7
|
-
version = "0.4.
|
7
|
+
version = "0.4.21"
|
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.4.
|
69
|
+
current_version = "0.4.21"
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/dev_by_account_response.py
RENAMED
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/login_by_oauth_response.py
RENAMED
File without changes
|
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/session_by_authcode_response.py
RENAMED
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/aliyun/model/stream_subscription_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/data/model/generate_route_information.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/abstract_message.py
RENAMED
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/mammotion_command.py
RENAMED
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/navigation.py
RENAMED
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/commands/messages/network.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pymammotion-0.4.19 → pymammotion-0.4.21}/pymammotion/mammotion/devices/mammotion_bluetooth.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|