pymammotion 0.5.14__py3-none-any.whl → 0.5.16__py3-none-any.whl
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.
- pymammotion/aliyun/cloud_gateway.py +45 -1
- pymammotion/aliyun/model/thing_response.py +12 -0
- pymammotion/data/model/device.py +17 -0
- pymammotion/data/mqtt/status.py +1 -1
- pymammotion/http/http.py +24 -7
- pymammotion/http/model/rtk.py +16 -0
- pymammotion/mammotion/commands/messages/basestation.py +43 -0
- pymammotion/mammotion/commands/messages/media.py +1 -1
- pymammotion/proto/__init__.py +1 -0
- {pymammotion-0.5.14.dist-info → pymammotion-0.5.16.dist-info}/METADATA +1 -1
- {pymammotion-0.5.14.dist-info → pymammotion-0.5.16.dist-info}/RECORD +13 -10
- {pymammotion-0.5.14.dist-info → pymammotion-0.5.16.dist-info}/LICENSE +0 -0
- {pymammotion-0.5.14.dist-info → pymammotion-0.5.16.dist-info}/WHEEL +0 -0
|
@@ -25,6 +25,7 @@ from pymammotion.aliyun.model.dev_by_account_response import ListingDevByAccount
|
|
|
25
25
|
from pymammotion.aliyun.model.login_by_oauth_response import LoginByOAuthResponse
|
|
26
26
|
from pymammotion.aliyun.model.regions_response import RegionResponse
|
|
27
27
|
from pymammotion.aliyun.model.session_by_authcode_response import SessionByAuthCodeResponse
|
|
28
|
+
from pymammotion.aliyun.model.thing_response import ThingPropertiesResponse
|
|
28
29
|
from pymammotion.aliyun.regions import region_mappings
|
|
29
30
|
from pymammotion.const import ALIYUN_DOMAIN, APP_KEY, APP_SECRET, APP_VERSION
|
|
30
31
|
from pymammotion.http.http import MammotionHTTP
|
|
@@ -771,7 +772,7 @@ class CloudIOTGateway:
|
|
|
771
772
|
str(response_body_dict.get("message")),
|
|
772
773
|
)
|
|
773
774
|
if response_body_dict.get("code") == 22000:
|
|
774
|
-
logger.error(response)
|
|
775
|
+
logger.error(response.body)
|
|
775
776
|
raise FailedRequestException(iot_id)
|
|
776
777
|
if response_body_dict.get("code") == 20056:
|
|
777
778
|
logger.debug("Gateway timeout.")
|
|
@@ -786,6 +787,49 @@ class CloudIOTGateway:
|
|
|
786
787
|
|
|
787
788
|
return message_id
|
|
788
789
|
|
|
790
|
+
async def get_device_properties(self, iot_id: str) -> ThingPropertiesResponse:
|
|
791
|
+
"""List bindings by account."""
|
|
792
|
+
config = Config(
|
|
793
|
+
app_key=self._app_key,
|
|
794
|
+
app_secret=self._app_secret,
|
|
795
|
+
domain=self._region_response.data.apiGatewayEndpoint,
|
|
796
|
+
)
|
|
797
|
+
|
|
798
|
+
client = Client(config)
|
|
799
|
+
|
|
800
|
+
# build request
|
|
801
|
+
request = CommonParams(
|
|
802
|
+
api_ver="1.0.0",
|
|
803
|
+
language="en-US",
|
|
804
|
+
iot_token=self._session_by_authcode_response.data.iotToken,
|
|
805
|
+
)
|
|
806
|
+
body = IoTApiRequest(
|
|
807
|
+
id=str(uuid.uuid4()),
|
|
808
|
+
params={
|
|
809
|
+
"iotId": f"{iot_id}",
|
|
810
|
+
},
|
|
811
|
+
request=request,
|
|
812
|
+
version="1.0",
|
|
813
|
+
)
|
|
814
|
+
|
|
815
|
+
# send request
|
|
816
|
+
response = await client.async_do_request("/thing/properties/get", "https", "POST", None, body, RuntimeOptions())
|
|
817
|
+
logger.debug(response.status_message)
|
|
818
|
+
logger.debug(response.headers)
|
|
819
|
+
logger.debug(response.status_code)
|
|
820
|
+
logger.debug(response.body)
|
|
821
|
+
|
|
822
|
+
# Decode the response body
|
|
823
|
+
response_body_str = response.body.decode("utf-8")
|
|
824
|
+
|
|
825
|
+
# Load the JSON string into a dictionary
|
|
826
|
+
response_body_dict = self.parse_json_response(response_body_str)
|
|
827
|
+
|
|
828
|
+
if int(response_body_dict.get("code")) != 200:
|
|
829
|
+
raise Exception("Error in getting properties: " + response_body_dict["msg"])
|
|
830
|
+
|
|
831
|
+
return ThingPropertiesResponse.from_dict(response_body_dict)
|
|
832
|
+
|
|
789
833
|
@property
|
|
790
834
|
def devices_by_account_response(self):
|
|
791
835
|
return self._devices_by_account_response
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
|
4
|
+
|
|
5
|
+
from pymammotion.data.mqtt.properties import Items
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class ThingPropertiesResponse(DataClassORJSONMixin):
|
|
10
|
+
code: int
|
|
11
|
+
data: Items | None
|
|
12
|
+
id: str | None = None
|
pymammotion/data/model/device.py
CHANGED
|
@@ -151,3 +151,20 @@ class MowingDevice(DataClassORJSONMixin):
|
|
|
151
151
|
self.device_firmwares.rtk_version = mod.version
|
|
152
152
|
case 103:
|
|
153
153
|
self.device_firmwares.lora_version = mod.version
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@dataclass
|
|
157
|
+
class RTKDevice(DataClassORJSONMixin):
|
|
158
|
+
name: str
|
|
159
|
+
iot_id: str
|
|
160
|
+
product_key: str
|
|
161
|
+
online: bool = True
|
|
162
|
+
lat: float = 0.0
|
|
163
|
+
lon: float = 0.0
|
|
164
|
+
lora: str = ""
|
|
165
|
+
wifi_rssi: int = 0
|
|
166
|
+
device_version: str = ""
|
|
167
|
+
lora_version: str = ""
|
|
168
|
+
wifi_sta_mac: str = ""
|
|
169
|
+
bt_mac: str = ""
|
|
170
|
+
update_check: CheckDeviceVersion = field(default_factory=CheckDeviceVersion)
|
pymammotion/data/mqtt/status.py
CHANGED
|
@@ -30,7 +30,7 @@ class Params(DataClassORJSONMixin):
|
|
|
30
30
|
activeTime: int
|
|
31
31
|
ip: str
|
|
32
32
|
aliyunCommodityCode: Literal["iothub_senior"]
|
|
33
|
-
categoryKey: Literal["LawnMower"]
|
|
33
|
+
categoryKey: Literal["LawnMower", "Tracker"]
|
|
34
34
|
nodeType: Literal["DEVICE"]
|
|
35
35
|
productKey: str
|
|
36
36
|
statusLast: int
|
pymammotion/http/http.py
CHANGED
|
@@ -8,6 +8,7 @@ from pymammotion.http.encryption import EncryptionUtils
|
|
|
8
8
|
from pymammotion.http.model.camera_stream import StreamSubscriptionResponse, VideoResourceResponse
|
|
9
9
|
from pymammotion.http.model.http import CheckDeviceVersion, ErrorInfo, LoginResponseData, Response
|
|
10
10
|
from pymammotion.http.model.response_factory import response_factory
|
|
11
|
+
from pymammotion.http.model.rtk import RTK
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
class MammotionHTTP:
|
|
@@ -209,6 +210,22 @@ class MammotionHTTP:
|
|
|
209
210
|
# Assuming the data format matches the expected structure
|
|
210
211
|
return response_factory(Response[str], data)
|
|
211
212
|
|
|
213
|
+
async def get_rtk_devices(self) -> Response[list[RTK]]:
|
|
214
|
+
"""Fetches stream subscription data from agora.io for a given IoT device."""
|
|
215
|
+
async with ClientSession(MAMMOTION_API_DOMAIN) as session:
|
|
216
|
+
async with session.get(
|
|
217
|
+
"/device-server/v1/rtk/devices",
|
|
218
|
+
headers={
|
|
219
|
+
**self._headers,
|
|
220
|
+
"Authorization": f"Bearer {self.login_info.access_token}",
|
|
221
|
+
"Content-Type": "application/json",
|
|
222
|
+
"User-Agent": "okhttp/4.9.3",
|
|
223
|
+
},
|
|
224
|
+
) as resp:
|
|
225
|
+
data = await resp.json()
|
|
226
|
+
|
|
227
|
+
return response_factory(Response[list[RTK]], data)
|
|
228
|
+
|
|
212
229
|
async def refresh_login(self, account: str, password: str | None = None) -> Response[LoginResponseData]:
|
|
213
230
|
if self._password is None and password is not None:
|
|
214
231
|
self._password = password
|
|
@@ -229,13 +246,13 @@ class MammotionHTTP:
|
|
|
229
246
|
"Decrypt-Type": "3",
|
|
230
247
|
"Ec-Version": "v1",
|
|
231
248
|
},
|
|
232
|
-
params=
|
|
233
|
-
username
|
|
234
|
-
password
|
|
235
|
-
client_id
|
|
236
|
-
client_secret
|
|
237
|
-
grant_type
|
|
238
|
-
|
|
249
|
+
params={
|
|
250
|
+
"username": self.encryption_utils.encryption_by_aes(account),
|
|
251
|
+
"password": self.encryption_utils.encryption_by_aes(password),
|
|
252
|
+
"client_id": self.encryption_utils.encryption_by_aes(MAMMOTION_CLIENT_ID),
|
|
253
|
+
"client_secret": self.encryption_utils.encryption_by_aes(MAMMOTION_CLIENT_SECRET),
|
|
254
|
+
"grant_type": self.encryption_utils.encryption_by_aes("password"),
|
|
255
|
+
},
|
|
239
256
|
) as resp:
|
|
240
257
|
if resp.status != 200:
|
|
241
258
|
print(resp.json())
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""RTK device information."""
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
|
|
4
|
+
from mashumaro import field_options
|
|
5
|
+
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class RTK(DataClassORJSONMixin):
|
|
10
|
+
"""RTK device information."""
|
|
11
|
+
|
|
12
|
+
device_id: str = field(metadata=field_options(alias="deviceId"))
|
|
13
|
+
device_name: str = field(metadata=field_options(alias="deviceName"))
|
|
14
|
+
product_key: str = field(metadata=field_options(alias="productKey"))
|
|
15
|
+
status: int
|
|
16
|
+
lora: str
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""RTK protobuf commands."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC
|
|
4
|
+
from logging import getLogger
|
|
5
|
+
import time
|
|
6
|
+
|
|
7
|
+
from pymammotion.mammotion.commands.abstract_message import AbstractMessage
|
|
8
|
+
from pymammotion.proto import (
|
|
9
|
+
AppToBaseMqttRtkT,
|
|
10
|
+
BaseStation,
|
|
11
|
+
LubaMsg,
|
|
12
|
+
MsgAttr,
|
|
13
|
+
MsgCmdType,
|
|
14
|
+
MsgDevice,
|
|
15
|
+
RequestBasestationInfoT,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
logger = getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class MessageBasestation(AbstractMessage, ABC):
|
|
22
|
+
def send_order_msg_basestation(self, driver) -> bytes:
|
|
23
|
+
return LubaMsg(
|
|
24
|
+
msgtype=MsgCmdType.BASESTATION,
|
|
25
|
+
sender=MsgDevice.DEV_MOBILEAPP,
|
|
26
|
+
rcver=self.get_msg_device(MsgCmdType.BASESTATION, MsgDevice.DEV_MAINCTL),
|
|
27
|
+
msgattr=MsgAttr.REQ,
|
|
28
|
+
timestamp=round(time.time() * 1000),
|
|
29
|
+
seqs=self.seqs.increment_and_get() & 255,
|
|
30
|
+
version=1,
|
|
31
|
+
subtype=self.user_account,
|
|
32
|
+
driver=driver,
|
|
33
|
+
).SerializeToString()
|
|
34
|
+
|
|
35
|
+
def basestation_info(self) -> bytes:
|
|
36
|
+
"""Build and send a request to get basestation info (request_type=1)."""
|
|
37
|
+
base = BaseStation(to_dev=RequestBasestationInfoT(request_type=1))
|
|
38
|
+
return self.send_order_msg_basestation(base)
|
|
39
|
+
|
|
40
|
+
def set_base_net_rtk_switch(self, rtk_switch: int) -> bytes:
|
|
41
|
+
"""Set RTK switch via app_to_base_mqtt_rtk_t."""
|
|
42
|
+
base = BaseStation(app_to_base_mqtt_rtk_msg=AppToBaseMqttRtkT(rtk_switch=rtk_switch))
|
|
43
|
+
return self.send_order_msg_basestation(base)
|
|
@@ -81,7 +81,7 @@ class MessageMedia(AbstractMessage, ABC):
|
|
|
81
81
|
manual off: false, id=1127, power_ctrl=2
|
|
82
82
|
"""
|
|
83
83
|
ids = 1125 if manual_ctrl else 1127
|
|
84
|
-
manual_light_ctrl = LampManualCtrlSta.
|
|
84
|
+
manual_light_ctrl = LampManualCtrlSta.manual_power_on if manual_ctrl else LampManualCtrlSta.manual_power_off
|
|
85
85
|
return self.send_order_msg_media(
|
|
86
86
|
SocMul(set_lamp=SetHeadlamp(set_ids=ids, lamp_power_ctrl=2, lamp_manual_ctrl=manual_light_ctrl))
|
|
87
87
|
)
|
pymammotion/proto/__init__.py
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
pymammotion/__init__.py,sha256=H-U94bNLp0LPC6hkRopVEUlUsZSR97n7WfKGPjK1GMg,1638
|
|
2
2
|
pymammotion/aliyun/__init__.py,sha256=T1lkX7TRYiL4nqYanG4l4MImV-SlavSbuooC-W-uUGw,29
|
|
3
3
|
pymammotion/aliyun/client.py,sha256=GCpAnLOVWW_W0c8UvdRpWVzZH5oLto8JZnb82stJi-8,9662
|
|
4
|
-
pymammotion/aliyun/cloud_gateway.py,sha256=
|
|
4
|
+
pymammotion/aliyun/cloud_gateway.py,sha256=Qhzs3UtkAnVQljf4qtFiOdd4bz04oHzJT-ZPvnM2CdQ,31250
|
|
5
5
|
pymammotion/aliyun/model/aep_response.py,sha256=EY4uMTJ4F9rvbcXnAOc5YKi7q__9kIVgfDwfyr65Gk0,421
|
|
6
6
|
pymammotion/aliyun/model/connect_response.py,sha256=Yz-fEbDzgGPTo5Of2oAjmFkSv08T7ze80pQU4k-gKIU,824
|
|
7
7
|
pymammotion/aliyun/model/dev_by_account_response.py,sha256=P9yYy4Z2tLkJSqXA_5XGaCUliSSVa5ILl7VoMtL_tCA,977
|
|
8
8
|
pymammotion/aliyun/model/login_by_oauth_response.py,sha256=g7JnvEjoa3SplHd-UqCuK6x0qtODpHlDyJCHRz7tfDI,1228
|
|
9
9
|
pymammotion/aliyun/model/regions_response.py,sha256=HSnpPcgpjr6VNXBQHw__gn-xWCkQ-MZ-Tmus9_va9mI,635
|
|
10
10
|
pymammotion/aliyun/model/session_by_authcode_response.py,sha256=0owdNcGFIP7rsVqLIf9rT-iOtvWmKCt2AW0cUUXwFiQ,427
|
|
11
|
+
pymammotion/aliyun/model/thing_response.py,sha256=23gUpB8EX3jNICp-p4Gytxs4qAfzKVr8anUA9JCl4XM,273
|
|
11
12
|
pymammotion/aliyun/regions.py,sha256=ctlRGrmdE4-xgItl9slCANYOV502qVN5lkAU4lj92sk,2518
|
|
12
13
|
pymammotion/aliyun/tea/core.py,sha256=4SjhRkbPMbw-uI0lQnCN0SBNAHAgVFrpHeaauuu6nZY,10200
|
|
13
14
|
pymammotion/aliyun/tmp_constant.py,sha256=M4Hq_lrGB3LZdX6R2XohRPFoK1NDnNV-pTJwJcJ9838,6650
|
|
@@ -25,7 +26,7 @@ pymammotion/const.py,sha256=lWRxvTVdXnNHuxqvRkjO5ziK0Ic-fZMM6J2dbe5M6Nc,385
|
|
|
25
26
|
pymammotion/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
27
|
pymammotion/data/model/__init__.py,sha256=UVRbSXGOjYnWv30ZEvzT5QRpdVqAbyeToo-t0QBWyi4,292
|
|
27
28
|
pymammotion/data/model/account.py,sha256=vJM-KTf2q6eBfVC-UlNHBSmJvqHiCawZ40vnuhXhaz8,140
|
|
28
|
-
pymammotion/data/model/device.py,sha256=
|
|
29
|
+
pymammotion/data/model/device.py,sha256=4e5q3slI7fjpizr0DsZIFcJoiCnQtRv0ty_dliDScH8,8288
|
|
29
30
|
pymammotion/data/model/device_config.py,sha256=DTnoePsMwJrKVXqGeKvbZQjs8Zab61U5T3b-c-w0WlM,2654
|
|
30
31
|
pymammotion/data/model/device_info.py,sha256=Q5PbPdTfd948ZWc8EHjN5zwU6pha5MCr47ZEXzCYKNY,1148
|
|
31
32
|
pymammotion/data/model/device_limits.py,sha256=m8HdxD-RaAkPm7jHYb9GLxMEH9IfzBPz0ZypmsLnId4,1946
|
|
@@ -45,25 +46,27 @@ pymammotion/data/model/work.py,sha256=AfKMItFqnRtAlVHzKCfYY-BQy-WFDYZBzdj-9Yc03b
|
|
|
45
46
|
pymammotion/data/mqtt/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
46
47
|
pymammotion/data/mqtt/event.py,sha256=pj65y93ACcTzUIJkHZC6s_pRFBYaNMSU1wyYRhiGvw4,5571
|
|
47
48
|
pymammotion/data/mqtt/properties.py,sha256=laud9rE-JqBHWKZ44Dov2yMkp3Ld8ghpBwlZ4_3g9uQ,4321
|
|
48
|
-
pymammotion/data/mqtt/status.py,sha256=
|
|
49
|
+
pymammotion/data/mqtt/status.py,sha256=qwZPevIzScePA_25nbRWMN7IhU-MhhtIl7fcZKAJfIc,1102
|
|
49
50
|
pymammotion/data/state_manager.py,sha256=AyrXwcU7SxliQ1r8b_QqFMkMoS6l0VE-XfxLq7NZ5go,12107
|
|
50
51
|
pymammotion/event/__init__.py,sha256=mgATR6vPHACNQ-0zH5fi7NdzeTCDV1CZyaWPmtUusi8,115
|
|
51
52
|
pymammotion/event/event.py,sha256=Z8WYxv_-5khEqKjL1w4c_Et24G1Kdm8QFuIBylD3h3U,3021
|
|
52
53
|
pymammotion/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
54
|
pymammotion/http/_init_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
55
|
pymammotion/http/encryption.py,sha256=lzXu3WwBdQlzjXxWnlJuRgkCrKdPbxx5drhMitVKIEk,8287
|
|
55
|
-
pymammotion/http/http.py,sha256
|
|
56
|
+
pymammotion/http/http.py,sha256=a-EGTagL2wAdTYbDpQSoRciCdGoWky6Qbrl2U5XOXVg,13157
|
|
56
57
|
pymammotion/http/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
58
|
pymammotion/http/model/camera_stream.py,sha256=ilxQNny_w9Frwt-m8kbHinvyjDv4Bx8C2swfZ2lTEDE,600
|
|
58
59
|
pymammotion/http/model/http.py,sha256=VDBmi9nyY5Y2ns_HYvKIyzbkKRxhZ5elpq0lWXWzbGw,4123
|
|
59
60
|
pymammotion/http/model/response_factory.py,sha256=f5_ZR0-4sLOU-q28BVy5sQOReSoND2A8UvpOOwnwrzA,1936
|
|
61
|
+
pymammotion/http/model/rtk.py,sha256=pR2mi6_Y8oTPlqDXWLk7oaUqmcgcrBQ0f3MJdC0_CUg,491
|
|
60
62
|
pymammotion/mammotion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
63
|
pymammotion/mammotion/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
64
|
pymammotion/mammotion/commands/abstract_message.py,sha256=M4qL-Yw5g3fTgS9jB9LUSgJSAqpUf7MME-2mfv471Sk,808
|
|
63
65
|
pymammotion/mammotion/commands/mammotion_command.py,sha256=AMOx6nEbPa0HijbENomPLLuJummS1q-23BzgetBAuOI,2991
|
|
64
66
|
pymammotion/mammotion/commands/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
|
+
pymammotion/mammotion/commands/messages/basestation.py,sha256=a1LEF4C25ynILeQLx-FOOU4d-N_vMkXSh_etojJjIDM,1442
|
|
65
68
|
pymammotion/mammotion/commands/messages/driver.py,sha256=LAYGvAcDDXwwliQ1OfRwNBk1VpIdpURo1TlA64zpLA4,3701
|
|
66
|
-
pymammotion/mammotion/commands/messages/media.py,sha256=
|
|
69
|
+
pymammotion/mammotion/commands/messages/media.py,sha256=ZKATEvqSgjTGTPrVGjDWCAnI1aq_d4TMXyl4dFzgjhE,2934
|
|
67
70
|
pymammotion/mammotion/commands/messages/navigation.py,sha256=yI-B5HHGuZJXn9iYrxhYZ5BArde6wB_j9bUc5IcSIJE,23261
|
|
68
71
|
pymammotion/mammotion/commands/messages/network.py,sha256=OrmW4-BP_o3piBjwXZ12WY0HqbXHQqeDXC0YaDPeBM8,7409
|
|
69
72
|
pymammotion/mammotion/commands/messages/ota.py,sha256=Nk3Tlp6n7hkbkuy355BlqbozHIHzsYnrH2cDO8QGaLk,1446
|
|
@@ -82,7 +85,7 @@ pymammotion/mqtt/linkkit/h2client.py,sha256=w9Nvi_nY4CLD_fw-pHtYChwQf7e2TiAGeqkY
|
|
|
82
85
|
pymammotion/mqtt/linkkit/linkkit.py,sha256=SGWny2_LKa8qg8RD0Bgd3a4S_fMqpYxJ7a9eFRvgcN0,132923
|
|
83
86
|
pymammotion/mqtt/mammotion_future.py,sha256=_OWqKOlUGl2yT1xOsXFQYpGd-1zQ63OxqXgy7KRQgYc,710
|
|
84
87
|
pymammotion/mqtt/mammotion_mqtt.py,sha256=OtLyTxow8xJc1RK1tv3ZCUBleTLZ3QABKmVYIcynoxU,10208
|
|
85
|
-
pymammotion/proto/__init__.py,sha256=
|
|
88
|
+
pymammotion/proto/__init__.py,sha256=9WLHpBnpdJNWHBstuDpegq_O9KKOtxfSc0AfSd9hfmg,73509
|
|
86
89
|
pymammotion/proto/basestation.proto,sha256=YiSsDmT0DY_ep6DHay13SbhxGMhentYt0BmJrVQrwLQ,1198
|
|
87
90
|
pymammotion/proto/basestation_pb2.py,sha256=suenbpMz9JZCXdGJGdiPaapppRz9Cf4IDzAXUfdIG3w,3083
|
|
88
91
|
pymammotion/proto/basestation_pb2.pyi,sha256=lGcTPlGaLdHEQ1A39YITbMG_vs1cVaqHAg5TsPvzexc,4652
|
|
@@ -125,7 +128,7 @@ pymammotion/utility/movement.py,sha256=N75oAoAgFydqoaOedYIxGUHmuTCtPzAOtb-d_29tp
|
|
|
125
128
|
pymammotion/utility/mur_mur_hash.py,sha256=xEfOZVbqRawJj66eLgtnZ85OauDR47oIPr29OHelzPI,4468
|
|
126
129
|
pymammotion/utility/periodic.py,sha256=MbeSb9cfhxzYmdT_RiE0dZe3H9IfbQW_zSqhmSX2RUc,3321
|
|
127
130
|
pymammotion/utility/rocker_util.py,sha256=6tX7sS87qoQC_tsxbx3NLL-HgS08wtzXiZkhDiz7uo0,7179
|
|
128
|
-
pymammotion-0.5.
|
|
129
|
-
pymammotion-0.5.
|
|
130
|
-
pymammotion-0.5.
|
|
131
|
-
pymammotion-0.5.
|
|
131
|
+
pymammotion-0.5.16.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
132
|
+
pymammotion-0.5.16.dist-info/METADATA,sha256=8AyYr3i2vGULlI2Qww8OeWstvRK0VSJWTou5tCX09ac,3871
|
|
133
|
+
pymammotion-0.5.16.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
134
|
+
pymammotion-0.5.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|