pymammotion 0.4.34__tar.gz → 0.4.36__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.34 → pymammotion-0.4.36}/PKG-INFO +1 -1
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/http.py +46 -1
- pymammotion-0.4.34/pymammotion/aliyun/model/stream_subscription_response.py → pymammotion-0.4.36/pymammotion/http/model/camera_stream.py +13 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/navigation.py +1 -1
- pymammotion-0.4.36/pymammotion/mammotion/control/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/mammotion.py +26 -34
- pymammotion-0.4.36/pymammotion/py.typed +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pyproject.toml +2 -2
- {pymammotion-0.4.34 → pymammotion-0.4.36}/LICENSE +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/README.md +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/client.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/cloud_gateway.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/aep_response.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/connect_response.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/regions_response.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/regions.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/tea/core.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/tmp_constant.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/ble.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/ble_message.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/const.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/convert.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/framectrldata.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/notifydata.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/model/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/const.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/account.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device_config.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device_info.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device_limits.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/enums.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/excute_boarder_params.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/execute_boarder.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/generate_route_information.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/hash_list.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/location.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/mowing_modes.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/rapid_state.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/raw_data.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/region_data.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/report_info.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/work.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/event.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/properties.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/status.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/state_manager.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/event/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/event/event.py +0 -0
- {pymammotion-0.4.34/pymammotion/mammotion → pymammotion-0.4.36/pymammotion/http}/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/_init_.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/encryption.py +0 -0
- {pymammotion-0.4.34/pymammotion/mammotion/commands → pymammotion-0.4.36/pymammotion/http/model}/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/model/http.py +0 -0
- {pymammotion-0.4.34/pymammotion/mammotion/commands/messages → pymammotion-0.4.36/pymammotion/mammotion}/__init__.py +0 -0
- {pymammotion-0.4.34/pymammotion/mammotion/control → pymammotion-0.4.36/pymammotion/mammotion/commands}/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/abstract_message.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
- /pymammotion-0.4.34/pymammotion/py.typed → /pymammotion-0.4.36/pymammotion/mammotion/commands/messages/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/driver.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/media.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/network.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/ota.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/system.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/video.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/control/joystick.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/base.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/mammotion_cloud.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/linkkit/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/linkkit/h2client.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/mammotion_future.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/basestation.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/basestation_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/basestation_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/common.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/common_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/common_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/dev_net.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/dev_net_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/dev_net_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_msg.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_msg_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_mul.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_mul_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_driver.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_nav.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_ota.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_pept.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_sys.proto +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/constant/__init__.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/constant/device_constant.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/conversions.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/datatype_converter.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/device_config.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/device_type.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/map.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/movement.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/mur_mur_hash.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/periodic.py +0 -0
- {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/rocker_util.py +0 -0
@@ -3,9 +3,9 @@ from typing import cast
|
|
3
3
|
|
4
4
|
from aiohttp import ClientSession
|
5
5
|
|
6
|
-
from pymammotion.aliyun.model.stream_subscription_response import StreamSubscriptionResponse
|
7
6
|
from pymammotion.const import MAMMOTION_API_DOMAIN, MAMMOTION_CLIENT_ID, MAMMOTION_CLIENT_SECRET, MAMMOTION_DOMAIN
|
8
7
|
from pymammotion.http.encryption import EncryptionUtils
|
8
|
+
from pymammotion.http.model.camera_stream import StreamSubscriptionResponse, VideoResourceResponse
|
9
9
|
from pymammotion.http.model.http import ErrorInfo, LoginResponseData, Response
|
10
10
|
|
11
11
|
|
@@ -108,6 +108,51 @@ 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 get_stream_subscription_mini_or_x_series(
|
112
|
+
self, iot_id: str, is_yuka: bool
|
113
|
+
) -> Response[StreamSubscriptionResponse]:
|
114
|
+
"""Get agora.io data for view camera stream (New models 2025)"""
|
115
|
+
|
116
|
+
# Prepare the payload with cameraStates based on is_yuka flag
|
117
|
+
payload = {"deviceId": iot_id, "mode": 0, "cameraStates": []}
|
118
|
+
|
119
|
+
# Add appropriate cameraStates based on the is_yuka flag
|
120
|
+
if is_yuka:
|
121
|
+
payload["cameraStates"] = [{"cameraState": 1}, {"cameraState": 0}, {"cameraState": 1}]
|
122
|
+
else:
|
123
|
+
payload["cameraStates"] = [{"cameraState": 1}, {"cameraState": 0}, {"cameraState": 0}]
|
124
|
+
|
125
|
+
async with ClientSession(MAMMOTION_API_DOMAIN) as session:
|
126
|
+
async with session.post(
|
127
|
+
"/device-server/v1/stream/token",
|
128
|
+
json=payload,
|
129
|
+
headers={
|
130
|
+
"Authorization": f"{self._headers.get('Authorization', "")}",
|
131
|
+
"Content-Type": "application/json",
|
132
|
+
"User-Agent": "okhttp/3.14.9",
|
133
|
+
},
|
134
|
+
) as resp:
|
135
|
+
data = await resp.json()
|
136
|
+
# TODO catch errors from mismatch like token expire etc
|
137
|
+
# Assuming the data format matches the expected structure
|
138
|
+
return Response[StreamSubscriptionResponse].from_dict(data)
|
139
|
+
|
140
|
+
async def get_video_resource(self, iot_id: str) -> Response[VideoResourceResponse]:
|
141
|
+
"""Get video resource for new models (2025 series)"""
|
142
|
+
async with ClientSession(MAMMOTION_API_DOMAIN) as session:
|
143
|
+
async with session.get(
|
144
|
+
f"/device-server/v1/video-resource/{iot_id}",
|
145
|
+
headers={
|
146
|
+
"Authorization": f"{self._headers.get('Authorization', '')}",
|
147
|
+
"Content-Type": "application/json",
|
148
|
+
"User-Agent": "okhttp/3.14.9",
|
149
|
+
},
|
150
|
+
) as resp:
|
151
|
+
data = await resp.json()
|
152
|
+
# TODO catch errors from mismatch like token expire etc
|
153
|
+
# Assuming the data format matches the expected structure
|
154
|
+
return Response[VideoResourceResponse].from_dict(data)
|
155
|
+
|
111
156
|
async def refresh_login(self, account: str, password: str | None = None) -> Response[LoginResponseData]:
|
112
157
|
if self._password is None and password is not None:
|
113
158
|
self._password = password
|
@@ -16,3 +16,16 @@ class StreamSubscriptionResponse(DataClassORJSONMixin):
|
|
16
16
|
channelName: str
|
17
17
|
token: str
|
18
18
|
uid: int
|
19
|
+
license: str | None = None
|
20
|
+
availableTime: int | None = None
|
21
|
+
|
22
|
+
|
23
|
+
@dataclass
|
24
|
+
class VideoResourceResponse(DataClassORJSONMixin):
|
25
|
+
id: str
|
26
|
+
deviceId: str
|
27
|
+
deviceName: str
|
28
|
+
cycleType: int
|
29
|
+
usageYearMonth: str
|
30
|
+
totalTime: int
|
31
|
+
availableTime: int
|
{pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/navigation.py
RENAMED
@@ -4,7 +4,7 @@ import logging
|
|
4
4
|
import time
|
5
5
|
|
6
6
|
from pymammotion.data.model import GenerateRouteInformation
|
7
|
-
from pymammotion.data.model.
|
7
|
+
from pymammotion.data.model.hash_list import Plan
|
8
8
|
from pymammotion.data.model.region_data import RegionData
|
9
9
|
from pymammotion.mammotion.commands.abstract_message import AbstractMessage
|
10
10
|
from pymammotion.proto import (
|
File without changes
|
@@ -3,7 +3,6 @@
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
5
|
import asyncio
|
6
|
-
from enum import Enum
|
7
6
|
import logging
|
8
7
|
from typing import Any
|
9
8
|
|
@@ -15,31 +14,23 @@ from pymammotion.data.model.device import MowingDevice
|
|
15
14
|
from pymammotion.data.model.enums import ConnectionPreference
|
16
15
|
from pymammotion.data.state_manager import StateManager
|
17
16
|
from pymammotion.http.http import MammotionHTTP
|
17
|
+
from pymammotion.http.model.camera_stream import StreamSubscriptionResponse, VideoResourceResponse
|
18
|
+
from pymammotion.http.model.http import Response
|
18
19
|
from pymammotion.mammotion.devices.mammotion_bluetooth import MammotionBaseBLEDevice
|
19
20
|
from pymammotion.mammotion.devices.mammotion_cloud import MammotionBaseCloudDevice, MammotionCloud
|
20
21
|
from pymammotion.mqtt import MammotionMQTT
|
22
|
+
from pymammotion.utility.device_type import DeviceType
|
21
23
|
|
22
24
|
TIMEOUT_CLOUD_RESPONSE = 10
|
23
25
|
|
24
26
|
_LOGGER = logging.getLogger(__name__)
|
25
27
|
|
26
28
|
|
27
|
-
class ConnectionPreference(Enum):
|
28
|
-
"""Enum for connection preference."""
|
29
|
-
|
30
|
-
EITHER = 0
|
31
|
-
WIFI = 1
|
32
|
-
BLUETOOTH = 2
|
33
|
-
|
34
|
-
|
35
29
|
class MammotionMixedDeviceManager:
|
36
|
-
preference: ConnectionPreference
|
37
|
-
_ble_device: MammotionBaseBLEDevice | None = None
|
38
|
-
_cloud_device: MammotionBaseCloudDevice | None = None
|
39
|
-
|
40
30
|
def __init__(
|
41
31
|
self,
|
42
32
|
name: str,
|
33
|
+
mammotion_http: MammotionHTTP,
|
43
34
|
cloud_device: Device | None = None,
|
44
35
|
ble_device: BLEDevice | None = None,
|
45
36
|
mqtt: MammotionCloud | None = None,
|
@@ -50,6 +41,7 @@ class MammotionMixedDeviceManager:
|
|
50
41
|
self._state_manager.get_device().name = name
|
51
42
|
self.add_ble(cloud_device, ble_device)
|
52
43
|
self.add_cloud(cloud_device, mqtt)
|
44
|
+
self.mammotion_http = mammotion_http
|
53
45
|
self.preference = preference
|
54
46
|
self._state_manager.preference = preference
|
55
47
|
|
@@ -169,19 +161,6 @@ class Mammotion:
|
|
169
161
|
"""Initialize MammotionDevice."""
|
170
162
|
self._login_lock = asyncio.Lock()
|
171
163
|
|
172
|
-
def add_ble_device(
|
173
|
-
self,
|
174
|
-
cloud_device: Device,
|
175
|
-
ble_device: BLEDevice,
|
176
|
-
preference: ConnectionPreference = ConnectionPreference.BLUETOOTH,
|
177
|
-
) -> None:
|
178
|
-
if ble_device:
|
179
|
-
self.device_manager.add_device(
|
180
|
-
MammotionMixedDeviceManager(
|
181
|
-
name=ble_device.name, cloud_device=cloud_device, ble_device=ble_device, preference=preference
|
182
|
-
)
|
183
|
-
)
|
184
|
-
|
185
164
|
async def login_and_initiate_cloud(self, account, password, force: bool = False) -> None:
|
186
165
|
async with self._login_lock:
|
187
166
|
exists: MammotionCloud | None = self.mqtt_list.get(account)
|
@@ -231,6 +210,7 @@ class Mammotion:
|
|
231
210
|
if device.deviceName.startswith(("Luba-", "Yuka-")) and mower_device is None:
|
232
211
|
mixed_device = MammotionMixedDeviceManager(
|
233
212
|
name=device.deviceName,
|
213
|
+
mammotion_http=mqtt_client.cloud_client.mammotion_http,
|
234
214
|
cloud_device=device,
|
235
215
|
mqtt=mqtt_client,
|
236
216
|
preference=ConnectionPreference.WIFI,
|
@@ -315,15 +295,27 @@ class Mammotion:
|
|
315
295
|
return await device.cloud().start_map_sync()
|
316
296
|
# TODO work with both with EITHER
|
317
297
|
|
318
|
-
async def get_stream_subscription(self, name: str):
|
298
|
+
async def get_stream_subscription(self, name: str, iot_id: str) -> Response[StreamSubscriptionResponse] | Any:
|
319
299
|
device = self.get_device_by_name(name)
|
320
|
-
if
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
300
|
+
if DeviceType.is_mini_or_x_series(name):
|
301
|
+
_stream_response = await device.mammotion_http.get_stream_subscription_mini_or_x_series(
|
302
|
+
iot_id, DeviceType.is_yuka(name)
|
303
|
+
)
|
304
|
+
_LOGGER.debug(_stream_response)
|
305
|
+
return _stream_response
|
306
|
+
else:
|
307
|
+
_stream_response = await device.mammotion_http.get_stream_subscription(iot_id)
|
308
|
+
_LOGGER.debug(_stream_response)
|
309
|
+
return _stream_response
|
310
|
+
|
311
|
+
async def get_video_resource(self, name: str, iot_id: str) -> Response[VideoResourceResponse] | None:
|
312
|
+
device = self.get_device_by_name(name)
|
313
|
+
|
314
|
+
if DeviceType.is_mini_or_x_series(name):
|
315
|
+
_video_resource_response = await device.mammotion_http.get_video_resource(iot_id)
|
316
|
+
_LOGGER.debug(_video_resource_response)
|
317
|
+
return _video_resource_response
|
318
|
+
return None
|
327
319
|
|
328
320
|
def mower(self, name: str) -> MowingDevice | None:
|
329
321
|
device = self.get_device_by_name(name)
|
File without changes
|
@@ -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.36"
|
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.36"
|
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.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/dev_by_account_response.py
RENAMED
File without changes
|
{pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/login_by_oauth_response.py
RENAMED
File without changes
|
File without changes
|
{pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/session_by_authcode_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
|
File without changes
|
{pymammotion-0.4.34 → pymammotion-0.4.36}/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
|
{pymammotion-0.4.34/pymammotion/mammotion → pymammotion-0.4.36/pymammotion/http}/__init__.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.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/abstract_message.py
RENAMED
File without changes
|
{pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/mammotion_command.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pymammotion-0.4.34 → pymammotion-0.4.36}/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.34 → pymammotion-0.4.36}/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
|