pymammotion 0.4.0a6__tar.gz → 0.4.0a7__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 (134) hide show
  1. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/PKG-INFO +1 -1
  2. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/cloud_gateway.py +2 -0
  3. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/device.py +3 -0
  4. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/mqtt/event.py +18 -14
  5. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/mqtt/status.py +1 -1
  6. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/state_manager.py +15 -2
  7. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/devices/mammotion_cloud.py +15 -7
  8. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mqtt/mammotion_mqtt.py +4 -0
  9. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pyproject.toml +2 -2
  10. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/LICENSE +0 -0
  11. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/README.md +0 -0
  12. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/__init__.py +0 -0
  13. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/__init__.py +0 -0
  14. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/cloud_service.py +0 -0
  15. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/aep_response.py +0 -0
  16. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/connect_response.py +0 -0
  17. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  18. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  19. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/regions_response.py +0 -0
  20. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  21. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/model/stream_subscription_response.py +0 -0
  22. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/aliyun/tmp_constant.py +0 -0
  23. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/__init__.py +0 -0
  24. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/ble.py +0 -0
  25. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/ble_message.py +0 -0
  26. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/const.py +0 -0
  27. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/data/__init__.py +0 -0
  28. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/data/convert.py +0 -0
  29. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  30. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/data/notifydata.py +0 -0
  31. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/model/__init__.py +0 -0
  32. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  33. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/const.py +0 -0
  34. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/__init__.py +0 -0
  35. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/__init__.py +0 -0
  36. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/account.py +0 -0
  37. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/device_config.py +0 -0
  38. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/device_info.py +0 -0
  39. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/device_limits.py +0 -0
  40. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/enums.py +0 -0
  41. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/excute_boarder_params.py +0 -0
  42. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/execute_boarder.py +0 -0
  43. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/generate_route_information.py +0 -0
  44. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/hash_list.py +0 -0
  45. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/location.py +0 -0
  46. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/mowing_modes.py +0 -0
  47. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/plan.py +0 -0
  48. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/rapid_state.py +0 -0
  49. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/raw_data.py +0 -0
  50. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/region_data.py +0 -0
  51. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/model/report_info.py +0 -0
  52. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/mqtt/__init__.py +0 -0
  53. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/data/mqtt/properties.py +0 -0
  54. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/event/__init__.py +0 -0
  55. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/event/event.py +0 -0
  56. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/http/_init_.py +0 -0
  57. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/http/encryption.py +0 -0
  58. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/http/http.py +0 -0
  59. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/http/model/http.py +0 -0
  60. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/__init__.py +0 -0
  61. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/__init__.py +0 -0
  62. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  63. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  64. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  65. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  66. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/media.py +0 -0
  67. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  68. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/network.py +0 -0
  69. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  70. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/system.py +0 -0
  71. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/commands/messages/video.py +0 -0
  72. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/control/__init__.py +0 -0
  73. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/control/joystick.py +0 -0
  74. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/devices/__init__.py +0 -0
  75. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/devices/base.py +0 -0
  76. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/devices/mammotion.py +0 -0
  77. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
  78. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mqtt/__init__.py +0 -0
  79. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  80. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  81. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
  82. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/mqtt/mammotion_future.py +0 -0
  83. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/__init__.py +0 -0
  84. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/basestation.proto +0 -0
  85. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/basestation.py +0 -0
  86. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/basestation_pb2.py +0 -0
  87. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/basestation_pb2.pyi +0 -0
  88. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/common.proto +0 -0
  89. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/common.py +0 -0
  90. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/common_pb2.py +0 -0
  91. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/common_pb2.pyi +0 -0
  92. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/dev_net.proto +0 -0
  93. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/dev_net.py +0 -0
  94. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/dev_net_pb2.py +0 -0
  95. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  96. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_msg.proto +0 -0
  97. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_msg.py +0 -0
  98. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_msg_pb2.py +0 -0
  99. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  100. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_mul.proto +0 -0
  101. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_mul.py +0 -0
  102. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_mul_pb2.py +0 -0
  103. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  104. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_driver.proto +0 -0
  105. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_driver.py +0 -0
  106. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  107. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  108. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_nav.proto +0 -0
  109. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_nav.py +0 -0
  110. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  111. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  112. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_ota.proto +0 -0
  113. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_ota.py +0 -0
  114. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  115. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  116. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_pept.proto +0 -0
  117. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_pept.py +0 -0
  118. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  119. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  120. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_sys.proto +0 -0
  121. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_sys.py +0 -0
  122. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  123. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  124. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/py.typed +0 -0
  125. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/constant/__init__.py +0 -0
  126. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/constant/device_constant.py +0 -0
  127. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/conversions.py +0 -0
  128. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/datatype_converter.py +0 -0
  129. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/device_config.py +0 -0
  130. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/device_type.py +0 -0
  131. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/map.py +0 -0
  132. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/movement.py +0 -0
  133. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/pymammotion/utility/periodic.py +0 -0
  134. {pymammotion-0.4.0a6 → pymammotion-0.4.0a7}/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.0a6
3
+ Version: 0.4.0a7
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -57,9 +57,11 @@ class AuthRefreshException(Exception):
57
57
  class DeviceOfflineException(Exception):
58
58
  """Raise exception when device is offline."""
59
59
 
60
+
60
61
  class GatewayTimeoutException(Exception):
61
62
  """Raise exception when the gateway times out."""
62
63
 
64
+
63
65
  class LoginException(Exception):
64
66
  """Raise exception when library cannot log in."""
65
67
 
@@ -10,6 +10,7 @@ from pymammotion.data.model.device_info import DeviceFirmwares, MowerInfo
10
10
  from pymammotion.data.model.location import Location
11
11
  from pymammotion.data.model.report_info import ReportData
12
12
  from pymammotion.data.mqtt.properties import ThingPropertiesMessage
13
+ from pymammotion.data.mqtt.status import ThingStatusMessage
13
14
  from pymammotion.http.model.http import ErrorInfo
14
15
  from pymammotion.proto.mctrl_sys import (
15
16
  DeviceFwInfo,
@@ -27,8 +28,10 @@ from pymammotion.utility.map import CoordinateConverter
27
28
  class MowingDevice(DataClassORJSONMixin):
28
29
  """Wraps the betterproto dataclasses, so we can bypass the groups for keeping all data."""
29
30
 
31
+ online: bool = True
30
32
  mower_state: MowerInfo = field(default_factory=MowerInfo)
31
33
  mqtt_properties: ThingPropertiesMessage | None = None
34
+ status_properties: ThingStatusMessage | None = None
32
35
  map: HashList = field(default_factory=HashList)
33
36
  location: Location = field(default_factory=Location)
34
37
  mowing_state: RapidState = field(default_factory=RapidState)
@@ -1,6 +1,6 @@
1
1
  from base64 import b64decode
2
2
  from dataclasses import dataclass
3
- from typing import Any, Literal, Optional, Union
3
+ from typing import Any, Literal
4
4
 
5
5
  from google.protobuf import json_format
6
6
  from mashumaro.mixins.orjson import DataClassORJSONMixin
@@ -91,16 +91,16 @@ class GeneralParams(DataClassORJSONMixin):
91
91
  tenantInstanceId: str
92
92
  value: Any
93
93
 
94
- identifier: Optional[str] = None
95
- checkFailedData: Optional[dict] = None
96
- _tenantId: Optional[str] = None
97
- generateTime: Optional[int] = None
98
- JMSXDeliveryCount: Optional[int] = None
99
- qos: Optional[int] = None
100
- requestId: Optional[str] = None
101
- _categoryKey: Optional[str] = None
102
- deviceType: Optional[str] = None
103
- _traceId: Optional[str] = None
94
+ identifier: str | None = None
95
+ checkFailedData: dict | None = None
96
+ _tenantId: str | None = None
97
+ generateTime: int | None = None
98
+ JMSXDeliveryCount: int | None = None
99
+ qos: int | None = None
100
+ requestId: str | None = None
101
+ _categoryKey: str | None = None
102
+ deviceType: str | None = None
103
+ _traceId: str | None = None
104
104
 
105
105
 
106
106
  @dataclass
@@ -117,7 +117,7 @@ class DeviceNotificationEventParams(GeneralParams):
117
117
  {'data': '{"localTime":1725159492000,"code":"1002"}'},
118
118
  """
119
119
 
120
- identifier: Literal["device_notification_event", "device_warning_code_event"]
120
+ identifier: Literal["device_notification_event", "device_information_event", "device_warning_code_event"]
121
121
  type: Literal["info"]
122
122
  value: DeviceNotificationEventValue
123
123
 
@@ -146,7 +146,7 @@ class DeviceConfigurationRequestEvent(GeneralParams):
146
146
  class ThingEventMessage(DataClassORJSONMixin):
147
147
  method: Literal["thing.events", "thing.properties"]
148
148
  id: str
149
- params: Union[DeviceProtobufMsgEventParams, DeviceWarningEventParams, dict]
149
+ params: DeviceProtobufMsgEventParams | DeviceWarningEventParams | dict
150
150
  version: Literal["1.0"]
151
151
 
152
152
  @classmethod
@@ -170,7 +170,11 @@ class ThingEventMessage(DataClassORJSONMixin):
170
170
  params_obj = DeviceBizReqEventParams.from_dict(params_dict)
171
171
  elif identifier == "device_config_req_event":
172
172
  params_obj = payload.get("params", {})
173
- elif identifier == "device_notification_event" or identifier == "device_warning_code_event":
173
+ elif (
174
+ identifier == "device_notification_event"
175
+ or identifier == "device_warning_code_event"
176
+ or identifier == "device_information_event"
177
+ ):
174
178
  params_obj = DeviceNotificationEventParams.from_dict(params_dict)
175
179
  else:
176
180
  raise ValueError(f"Unknown identifier: {identifier} {params_dict}")
@@ -26,7 +26,7 @@ class Status(DataClassORJSONMixin):
26
26
  @dataclass
27
27
  class Params(DataClassORJSONMixin):
28
28
  groupIdList: list[GroupIdListItem]
29
- netType: Literal["NET_WIFI"]
29
+ netType: Literal["NET_WIFI", "NET_MNET"]
30
30
  activeTime: int
31
31
  ip: str
32
32
  aliyunCommodityCode: Literal["iothub_senior"]
@@ -11,6 +11,7 @@ from pymammotion.data.model.device import MowingDevice
11
11
  from pymammotion.data.model.device_info import SideLight
12
12
  from pymammotion.data.model.hash_list import AreaHashNameList
13
13
  from pymammotion.data.mqtt.properties import ThingPropertiesMessage
14
+ from pymammotion.data.mqtt.status import ThingStatusMessage
14
15
  from pymammotion.proto.dev_net import DrvDevInfoResp, WifiIotStatusReport
15
16
  from pymammotion.proto.luba_msg import LubaMsg
16
17
  from pymammotion.proto.mctrl_nav import AppGetAllAreaHashName, NavGetCommDataAck, NavGetHashListAck, SvgMessageAckT
@@ -42,8 +43,20 @@ class StateManager:
42
43
  self._device = device
43
44
 
44
45
  async def properties(self, properties: ThingPropertiesMessage) -> None:
45
- params = properties.params
46
- self._device.mqtt_properties = params
46
+ self._device.mqtt_properties = properties
47
+
48
+ async def status(self, status: ThingStatusMessage) -> None:
49
+ if not self._device.online:
50
+ self._device.online = True
51
+ self._device.status_properties = status
52
+
53
+ @property
54
+ def online(self) -> bool:
55
+ return self._device.online
56
+
57
+ @online.setter
58
+ def online(self, value: bool) -> None:
59
+ self._device.online = value
47
60
 
48
61
  async def notification(self, message: LubaMsg) -> None:
49
62
  """Handle protobuf notifications."""
@@ -4,7 +4,8 @@ import json
4
4
  import logging
5
5
  from asyncio import TimerHandle
6
6
  from collections import deque
7
- from typing import Any, Awaitable, Callable, Optional, cast
7
+ from collections.abc import Awaitable, Callable
8
+ from typing import Any, cast
8
9
 
9
10
  import betterproto
10
11
 
@@ -13,6 +14,7 @@ from pymammotion.aliyun.cloud_gateway import DeviceOfflineException
13
14
  from pymammotion.aliyun.model.dev_by_account_response import Device
14
15
  from pymammotion.data.mqtt.event import ThingEventMessage
15
16
  from pymammotion.data.mqtt.properties import ThingPropertiesMessage
17
+ from pymammotion.data.mqtt.status import ThingStatusMessage
16
18
  from pymammotion.data.state_manager import StateManager
17
19
  from pymammotion.event.event import DataEvent
18
20
  from pymammotion.mammotion.commands.mammotion_command import MammotionCommand
@@ -35,6 +37,7 @@ class MammotionCloud:
35
37
  self._waiting_queue = deque()
36
38
  self.mqtt_message_event = DataEvent()
37
39
  self.mqtt_properties_event = DataEvent()
40
+ self.mqtt_status_event = DataEvent()
38
41
  self.on_ready_event = DataEvent()
39
42
  self.on_disconnected_event = DataEvent()
40
43
  self.on_connected_event = DataEvent()
@@ -116,7 +119,7 @@ class MammotionCloud:
116
119
  json_str = json.dumps(payload)
117
120
  payload = json.loads(json_str)
118
121
 
119
- await self._handle_mqtt_message(topic, payload)
122
+ await self._parse_mqtt_response(topic, payload)
120
123
 
121
124
  async def _parse_mqtt_response(self, topic: str, payload: dict) -> None:
122
125
  """Parse the MQTT response."""
@@ -134,10 +137,9 @@ class MammotionCloud:
134
137
  if event.method == "thing.properties":
135
138
  await self.mqtt_properties_event.data_event(event)
136
139
  _LOGGER.debug(event)
137
-
138
- async def _handle_mqtt_message(self, topic: str, payload: dict) -> None:
139
- """Async handler for incoming MQTT messages."""
140
- await self._parse_mqtt_response(topic=topic, payload=payload)
140
+ elif topic.endswith("/app/down/thing/status"):
141
+ status = ThingStatusMessage.from_dict(payload)
142
+ await self.mqtt_status_event.data_event(status)
141
143
 
142
144
  def _disconnect(self) -> None:
143
145
  """Disconnect the MQTT client."""
@@ -156,7 +158,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
156
158
  super().__init__(state_manager, cloud_device)
157
159
  self._ble_sync_task: TimerHandle | None = None
158
160
  self.stopped = False
159
- self.on_ready_callback: Optional[Callable[[], Awaitable[None]]] = None
161
+ self.on_ready_callback: Callable[[], Awaitable[None]] | None = None
160
162
  self.loop = asyncio.get_event_loop()
161
163
  self._mqtt = mqtt
162
164
  self.iot_id = cloud_device.iotId
@@ -166,6 +168,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
166
168
  self.currentID = ""
167
169
  self._mqtt.mqtt_message_event.add_subscribers(self._parse_message_for_device)
168
170
  self._mqtt.mqtt_properties_event.add_subscribers(self._parse_message_properties_for_device)
171
+ self._mqtt.mqtt_status_event.add_subscribers(self._parse_message_status_for_device)
169
172
  self._mqtt.on_ready_event.add_subscribers(self.on_ready)
170
173
  self._mqtt.on_disconnected_event.add_subscribers(self.on_disconnect)
171
174
  self._mqtt.on_connected_event.add_subscribers(self.on_connect)
@@ -278,6 +281,11 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
278
281
  return
279
282
  self.state_manager.properties(event)
280
283
 
284
+ async def _parse_message_status_for_device(self, status: ThingStatusMessage) -> None:
285
+ if status.params.iotId != self.iot_id:
286
+ return
287
+ self.state_manager.status(status)
288
+
281
289
  async def _parse_message_for_device(self, event: ThingEventMessage) -> None:
282
290
  _LOGGER.debug("_parse_message_for_device")
283
291
  params = event.params
@@ -193,6 +193,10 @@ class MammotionMQTT:
193
193
  else:
194
194
  logger.info("Unhandled event: %s", params.identifier)
195
195
  elif message.topic.endswith("/app/down/thing/status"):
196
+ # the tell if a device has come back online
197
+ # lastStatus
198
+ # 1 online?
199
+ # 3 offline?
196
200
  status = ThingStatusMessage(**payload)
197
201
  logger.debug(status.params.status.value)
198
202
  elif message.topic.endswith("/app/down/thing/properties"):
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "pymammotion"
7
- version = "0.4.0-alpha6"
7
+ version = "0.4.0-alpha7"
8
8
  license = "GPL-3.0"
9
9
  description = ""
10
10
  readme = "README.md"
@@ -67,7 +67,7 @@ mypy = "^1.11.2"
67
67
  autotyping = "^24.3.0"
68
68
 
69
69
  [tool.bumpver]
70
- current_version = "0.4.0-alpha6"
70
+ current_version = "0.4.0-alpha7"
71
71
  version_pattern = "MAJOR.MINOR.PATCH"
72
72
  commit_message = "Bump version {old_version} -> {new_version}"
73
73
  commit = true
File without changes
File without changes