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.
Files changed (129) hide show
  1. {pymammotion-0.4.34 → pymammotion-0.4.36}/PKG-INFO +1 -1
  2. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/http.py +46 -1
  3. pymammotion-0.4.34/pymammotion/aliyun/model/stream_subscription_response.py → pymammotion-0.4.36/pymammotion/http/model/camera_stream.py +13 -0
  4. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/navigation.py +1 -1
  5. pymammotion-0.4.36/pymammotion/mammotion/control/__init__.py +0 -0
  6. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/mammotion.py +26 -34
  7. pymammotion-0.4.36/pymammotion/py.typed +0 -0
  8. {pymammotion-0.4.34 → pymammotion-0.4.36}/pyproject.toml +2 -2
  9. {pymammotion-0.4.34 → pymammotion-0.4.36}/LICENSE +0 -0
  10. {pymammotion-0.4.34 → pymammotion-0.4.36}/README.md +0 -0
  11. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/__init__.py +0 -0
  12. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/__init__.py +0 -0
  13. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/client.py +0 -0
  14. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/cloud_gateway.py +0 -0
  15. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/aep_response.py +0 -0
  16. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/connect_response.py +0 -0
  17. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  18. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  19. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/regions_response.py +0 -0
  20. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  21. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/regions.py +0 -0
  22. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/tea/core.py +0 -0
  23. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/aliyun/tmp_constant.py +0 -0
  24. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/__init__.py +0 -0
  25. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/ble.py +0 -0
  26. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/ble_message.py +0 -0
  27. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/const.py +0 -0
  28. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/__init__.py +0 -0
  29. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/convert.py +0 -0
  30. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  31. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/data/notifydata.py +0 -0
  32. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/model/__init__.py +0 -0
  33. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  34. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/const.py +0 -0
  35. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/__init__.py +0 -0
  36. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/__init__.py +0 -0
  37. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/account.py +0 -0
  38. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device.py +0 -0
  39. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device_config.py +0 -0
  40. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device_info.py +0 -0
  41. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/device_limits.py +0 -0
  42. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/enums.py +0 -0
  43. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/excute_boarder_params.py +0 -0
  44. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/execute_boarder.py +0 -0
  45. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/generate_route_information.py +0 -0
  46. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/hash_list.py +0 -0
  47. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/location.py +0 -0
  48. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/mowing_modes.py +0 -0
  49. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/rapid_state.py +0 -0
  50. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/raw_data.py +0 -0
  51. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/region_data.py +0 -0
  52. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/report_info.py +0 -0
  53. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/model/work.py +0 -0
  54. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/__init__.py +0 -0
  55. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/event.py +0 -0
  56. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/properties.py +0 -0
  57. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/mqtt/status.py +0 -0
  58. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/data/state_manager.py +0 -0
  59. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/event/__init__.py +0 -0
  60. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/event/event.py +0 -0
  61. {pymammotion-0.4.34/pymammotion/mammotion → pymammotion-0.4.36/pymammotion/http}/__init__.py +0 -0
  62. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/_init_.py +0 -0
  63. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/encryption.py +0 -0
  64. {pymammotion-0.4.34/pymammotion/mammotion/commands → pymammotion-0.4.36/pymammotion/http/model}/__init__.py +0 -0
  65. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/http/model/http.py +0 -0
  66. {pymammotion-0.4.34/pymammotion/mammotion/commands/messages → pymammotion-0.4.36/pymammotion/mammotion}/__init__.py +0 -0
  67. {pymammotion-0.4.34/pymammotion/mammotion/control → pymammotion-0.4.36/pymammotion/mammotion/commands}/__init__.py +0 -0
  68. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  69. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  70. /pymammotion-0.4.34/pymammotion/py.typed → /pymammotion-0.4.36/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  71. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  72. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/media.py +0 -0
  73. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/network.py +0 -0
  74. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  75. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/system.py +0 -0
  76. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/commands/messages/video.py +0 -0
  77. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/control/joystick.py +0 -0
  78. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/__init__.py +0 -0
  79. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/base.py +0 -0
  80. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
  81. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mammotion/devices/mammotion_cloud.py +0 -0
  82. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/__init__.py +0 -0
  83. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  84. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  85. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
  86. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/mammotion_future.py +0 -0
  87. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
  88. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/__init__.py +0 -0
  89. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/basestation.proto +0 -0
  90. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/basestation_pb2.py +0 -0
  91. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/basestation_pb2.pyi +0 -0
  92. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/common.proto +0 -0
  93. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/common_pb2.py +0 -0
  94. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/common_pb2.pyi +0 -0
  95. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/dev_net.proto +0 -0
  96. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/dev_net_pb2.py +0 -0
  97. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  98. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_msg.proto +0 -0
  99. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_msg_pb2.py +0 -0
  100. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  101. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_mul.proto +0 -0
  102. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_mul_pb2.py +0 -0
  103. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  104. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_driver.proto +0 -0
  105. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  106. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  107. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_nav.proto +0 -0
  108. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  109. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  110. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_ota.proto +0 -0
  111. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  112. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  113. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_pept.proto +0 -0
  114. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  115. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  116. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_sys.proto +0 -0
  117. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  118. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  119. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/constant/__init__.py +0 -0
  120. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/constant/device_constant.py +0 -0
  121. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/conversions.py +0 -0
  122. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/datatype_converter.py +0 -0
  123. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/device_config.py +0 -0
  124. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/device_type.py +0 -0
  125. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/map.py +0 -0
  126. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/movement.py +0 -0
  127. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/mur_mur_hash.py +0 -0
  128. {pymammotion-0.4.34 → pymammotion-0.4.36}/pymammotion/utility/periodic.py +0 -0
  129. {pymammotion-0.4.34 → pymammotion-0.4.36}/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.34
3
+ Version: 0.4.36
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -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
@@ -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.plan import Plan
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 (
@@ -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 device.preference is ConnectionPreference.WIFI:
321
- if device.has_cloud():
322
- _stream_response = await device.cloud().mqtt.cloud_client.mammotion_http.get_stream_subscription(
323
- device.cloud().iot_id
324
- )
325
- _LOGGER.debug(_stream_response)
326
- return _stream_response
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.34"
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.34"
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