pymammotion 0.5.4__tar.gz → 0.5.6__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.

Potentially problematic release.


This version of pymammotion might be problematic. Click here for more details.

Files changed (130) hide show
  1. {pymammotion-0.5.4 → pymammotion-0.5.6}/PKG-INFO +1 -1
  2. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/device.py +5 -4
  3. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/mqtt/properties.py +4 -4
  4. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/state_manager.py +11 -0
  5. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/devices/mammotion_cloud.py +11 -3
  6. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mqtt/linkkit/linkkit.py +20 -27
  7. {pymammotion-0.5.4 → pymammotion-0.5.6}/pyproject.toml +2 -2
  8. {pymammotion-0.5.4 → pymammotion-0.5.6}/LICENSE +0 -0
  9. {pymammotion-0.5.4 → pymammotion-0.5.6}/README.md +0 -0
  10. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/__init__.py +0 -0
  11. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/__init__.py +0 -0
  12. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/client.py +0 -0
  13. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/cloud_gateway.py +0 -0
  14. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/model/aep_response.py +0 -0
  15. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/model/connect_response.py +0 -0
  16. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  17. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  18. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/model/regions_response.py +0 -0
  19. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  20. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/regions.py +0 -0
  21. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/tea/core.py +0 -0
  22. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/aliyun/tmp_constant.py +0 -0
  23. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/__init__.py +0 -0
  24. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/ble.py +0 -0
  25. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/ble_message.py +0 -0
  26. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/const.py +0 -0
  27. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/data/__init__.py +0 -0
  28. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/data/convert.py +0 -0
  29. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  30. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/data/notifydata.py +0 -0
  31. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/model/__init__.py +0 -0
  32. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  33. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/const.py +0 -0
  34. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/__init__.py +0 -0
  35. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/__init__.py +0 -0
  36. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/account.py +0 -0
  37. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/device_config.py +0 -0
  38. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/device_info.py +0 -0
  39. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/device_limits.py +0 -0
  40. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/enums.py +0 -0
  41. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/excute_boarder_params.py +0 -0
  42. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/execute_boarder.py +0 -0
  43. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/generate_route_information.py +0 -0
  44. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/hash_list.py +0 -0
  45. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/location.py +0 -0
  46. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/mowing_modes.py +0 -0
  47. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/rapid_state.py +0 -0
  48. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/raw_data.py +0 -0
  49. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/region_data.py +0 -0
  50. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/report_info.py +0 -0
  51. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/model/work.py +0 -0
  52. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/mqtt/__init__.py +0 -0
  53. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/mqtt/event.py +0 -0
  54. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/data/mqtt/status.py +0 -0
  55. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/event/__init__.py +0 -0
  56. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/event/event.py +0 -0
  57. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/__init__.py +0 -0
  58. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/_init_.py +0 -0
  59. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/encryption.py +0 -0
  60. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/http.py +0 -0
  61. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/model/__init__.py +0 -0
  62. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/model/camera_stream.py +0 -0
  63. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/model/http.py +0 -0
  64. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/http/model/response_factory.py +0 -0
  65. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/__init__.py +0 -0
  66. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/__init__.py +0 -0
  67. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  68. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  69. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  70. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  71. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/media.py +0 -0
  72. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  73. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/network.py +0 -0
  74. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  75. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/system.py +0 -0
  76. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/commands/messages/video.py +0 -0
  77. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/control/__init__.py +0 -0
  78. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/control/joystick.py +0 -0
  79. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/devices/__init__.py +0 -0
  80. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/devices/base.py +0 -0
  81. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/devices/mammotion.py +0 -0
  82. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
  83. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mqtt/__init__.py +0 -0
  84. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  85. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  86. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mqtt/mammotion_future.py +0 -0
  87. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
  88. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/__init__.py +0 -0
  89. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/basestation.proto +0 -0
  90. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/basestation_pb2.py +0 -0
  91. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/basestation_pb2.pyi +0 -0
  92. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/common.proto +0 -0
  93. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/common_pb2.py +0 -0
  94. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/common_pb2.pyi +0 -0
  95. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/dev_net.proto +0 -0
  96. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/dev_net_pb2.py +0 -0
  97. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  98. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/luba_msg.proto +0 -0
  99. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/luba_msg_pb2.py +0 -0
  100. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  101. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/luba_mul.proto +0 -0
  102. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/luba_mul_pb2.py +0 -0
  103. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  104. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_driver.proto +0 -0
  105. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  106. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  107. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_nav.proto +0 -0
  108. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  109. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  110. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_ota.proto +0 -0
  111. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  112. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  113. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_pept.proto +0 -0
  114. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  115. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  116. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_sys.proto +0 -0
  117. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  118. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  119. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/py.typed +0 -0
  120. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/constant/__init__.py +0 -0
  121. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/constant/device_constant.py +0 -0
  122. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/conversions.py +0 -0
  123. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/datatype_converter.py +0 -0
  124. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/device_config.py +0 -0
  125. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/device_type.py +0 -0
  126. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/map.py +0 -0
  127. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/movement.py +0 -0
  128. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/mur_mur_hash.py +0 -0
  129. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/periodic.py +0 -0
  130. {pymammotion-0.5.4 → pymammotion-0.5.6}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.5.4
3
+ Version: 0.5.6
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -7,12 +7,14 @@ from mashumaro.mixins.orjson import DataClassORJSONMixin
7
7
 
8
8
  from pymammotion.data.model import HashList, RapidState
9
9
  from pymammotion.data.model.device_info import DeviceFirmwares, DeviceNonWorkingHours, MowerInfo
10
+ from pymammotion.data.model.errors import DeviceErrors
10
11
  from pymammotion.data.model.location import Location
11
12
  from pymammotion.data.model.report_info import ReportData
12
13
  from pymammotion.data.model.work import CurrentTaskSettings
14
+ from pymammotion.data.mqtt.event import ThingEventMessage
13
15
  from pymammotion.data.mqtt.properties import ThingPropertiesMessage
14
16
  from pymammotion.data.mqtt.status import ThingStatusMessage
15
- from pymammotion.http.model.http import CheckDeviceVersion, ErrorInfo
17
+ from pymammotion.http.model.http import CheckDeviceVersion
16
18
  from pymammotion.proto import DeviceFwInfo, MowToAppInfoT, ReportInfoData, SystemRapidStateTunnelMsg, SystemUpdateBufMsg
17
19
  from pymammotion.utility.constant import WorkMode
18
20
  from pymammotion.utility.conversions import parse_double
@@ -30,15 +32,14 @@ class MowingDevice(DataClassORJSONMixin):
30
32
  mower_state: MowerInfo = field(default_factory=MowerInfo)
31
33
  mqtt_properties: ThingPropertiesMessage | None = None
32
34
  status_properties: ThingStatusMessage | None = None
35
+ device_event: ThingEventMessage | None = None
33
36
  map: HashList = field(default_factory=HashList)
34
37
  work: CurrentTaskSettings = field(default_factory=CurrentTaskSettings)
35
38
  location: Location = field(default_factory=Location)
36
39
  mowing_state: RapidState = field(default_factory=RapidState)
37
40
  report_data: ReportData = field(default_factory=ReportData)
38
41
  device_firmwares: DeviceFirmwares = field(default_factory=DeviceFirmwares)
39
- err_code_list: list = field(default_factory=list)
40
- err_code_list_time: list | None = field(default_factory=list)
41
- error_codes: dict[str, ErrorInfo] = field(default_factory=dict)
42
+ errors: DeviceErrors = field(default_factory=DeviceErrors)
42
43
  non_work_hours: DeviceNonWorkingHours = field(default_factory=DeviceNonWorkingHours)
43
44
 
44
45
  def buffer(self, buffer_list: SystemUpdateBufMsg) -> None:
@@ -125,13 +125,13 @@ ItemTypes = Union[
125
125
 
126
126
 
127
127
  @dataclass
128
- class Item:
128
+ class Item(DataClassDictMixin):
129
129
  time: int
130
130
  value: int | float | str | dict[str, Any] | ItemTypes # Depending on the type of value
131
131
 
132
132
 
133
133
  @dataclass
134
- class Items:
134
+ class Items(DataClassDictMixin):
135
135
  iotState: Item | None = None
136
136
  extMod: Item | None = None
137
137
  deviceVersionInfo: Item | None = None
@@ -163,12 +163,12 @@ class Items:
163
163
 
164
164
  @dataclass
165
165
  class Params(DataClassORJSONMixin):
166
- deviceType: Literal["LawnMower"]
166
+ deviceType: Literal["LawnMower", "Tracker"]
167
167
  checkFailedData: dict
168
168
  groupIdList: list[str]
169
169
  _tenantId: str
170
170
  groupId: str
171
- categoryKey: Literal["LawnMower"]
171
+ categoryKey: Literal["LawnMower", "Tracker"]
172
172
  batchId: str
173
173
  gmtCreate: int
174
174
  productKey: str
@@ -12,6 +12,7 @@ from pymammotion.data.model.device_info import SideLight
12
12
  from pymammotion.data.model.enums import ConnectionPreference
13
13
  from pymammotion.data.model.hash_list import AreaHashNameList, NavGetCommData, NavGetHashListData, Plan, SvgMessage
14
14
  from pymammotion.data.model.work import CurrentTaskSettings
15
+ from pymammotion.data.mqtt.event import ThingEventMessage
15
16
  from pymammotion.data.mqtt.properties import ThingPropertiesMessage
16
17
  from pymammotion.data.mqtt.status import ThingStatusMessage
17
18
  from pymammotion.event.event import DataEvent
@@ -62,6 +63,7 @@ class StateManager:
62
63
 
63
64
  self.properties_callback = DataEvent()
64
65
  self.status_callback = DataEvent()
66
+ self.device_event_callback = DataEvent()
65
67
 
66
68
  def get_device(self) -> MowingDevice:
67
69
  """Get device."""
@@ -84,6 +86,10 @@ class StateManager:
84
86
  self._device.mower_state.product_key = thing_status.params.productKey
85
87
  await self.on_status_callback(thing_status)
86
88
 
89
+ async def device_event(self, device_event: ThingEventMessage) -> None:
90
+ self._device.mqtt_device_event = device_event
91
+ await self.on_device_event_callback(device_event)
92
+
87
93
  @property
88
94
  def online(self) -> bool:
89
95
  return self._device.online
@@ -114,6 +120,11 @@ class StateManager:
114
120
  if self.status_callback:
115
121
  await self.status_callback.data_event(thing_status)
116
122
 
123
+ async def on_device_event_callback(self, device_event: ThingEventMessage) -> None:
124
+ """Execute the status callback if it is set."""
125
+ if self.device_event_callback:
126
+ await self.device_event_callback.data_event(device_event)
127
+
117
128
  async def get_commondata_ack_callback(self, comm_data: NavGetCommDataAck | SvgMessageAckT) -> None:
118
129
  """Asynchronously calls the appropriate callback based on available handlers."""
119
130
  if self.cloud_get_commondata_ack_callback:
@@ -31,6 +31,7 @@ class MammotionCloud:
31
31
  """Per account MQTT cloud."""
32
32
 
33
33
  def __init__(self, mqtt_client: MammotionMQTT, cloud_client: CloudIOTGateway) -> None:
34
+ """Initialize MammotionCloud."""
34
35
  self.cloud_client = cloud_client
35
36
  self.loop = asyncio.get_event_loop()
36
37
  self.is_ready = False
@@ -39,6 +40,7 @@ class MammotionCloud:
39
40
  self.mqtt_message_event = DataEvent()
40
41
  self.mqtt_properties_event = DataEvent()
41
42
  self.mqtt_status_event = DataEvent()
43
+ self.mqtt_device_event = DataEvent()
42
44
  self.on_ready_event = DataEvent()
43
45
  self.on_disconnected_event = DataEvent()
44
46
  self.on_connected_event = DataEvent()
@@ -49,9 +51,6 @@ class MammotionCloud:
49
51
  self._mqtt_client.on_message = self._on_mqtt_message
50
52
  self._mqtt_client.on_ready = self.on_ready
51
53
 
52
- # temporary for testing only
53
- # self._start_sync_task = self.loop.call_later(30, lambda: asyncio.ensure_future(self.start_sync(0)))
54
-
55
54
  async def on_ready(self) -> None:
56
55
  loop = asyncio.get_event_loop()
57
56
  loop.create_task(self.process_queue())
@@ -129,6 +128,8 @@ class MammotionCloud:
129
128
  _LOGGER.debug("Protobuf event")
130
129
  # Call the callbacks for each cloudDevice
131
130
  await self.mqtt_message_event.data_event(event)
131
+ if event.method == "thing.events":
132
+ await self.mqtt_device_event.data_event(event)
132
133
  if event.method == "thing.properties":
133
134
  await self.mqtt_properties_event.data_event(event)
134
135
  _LOGGER.debug(event)
@@ -170,6 +171,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
170
171
  self._mqtt.mqtt_message_event.add_subscribers(self._parse_message_for_device)
171
172
  self._mqtt.mqtt_properties_event.add_subscribers(self._parse_message_properties_for_device)
172
173
  self._mqtt.mqtt_status_event.add_subscribers(self._parse_message_status_for_device)
174
+ self._mqtt.mqtt_device_event.add_subscribers(self._parse_device_event_for_device)
173
175
  self._mqtt.on_ready_event.add_subscribers(self.on_ready)
174
176
  self._mqtt.on_disconnected_event.add_subscribers(self.on_disconnect)
175
177
  self._mqtt.on_connected_event.add_subscribers(self.on_connect)
@@ -188,6 +190,7 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
188
190
  self._mqtt.mqtt_message_event.remove_subscribers(self._parse_message_for_device)
189
191
  self._mqtt.mqtt_properties_event.remove_subscribers(self._parse_message_properties_for_device)
190
192
  self._mqtt.mqtt_status_event.remove_subscribers(self._parse_message_status_for_device)
193
+ self._mqtt.mqtt_device_event.remove_subscribers(self._parse_device_event_for_device)
191
194
  self._state_manager.cloud_gethash_ack_callback = None
192
195
  self._state_manager.cloud_get_commondata_ack_callback = None
193
196
  self._state_manager.cloud_get_plan_callback = None
@@ -319,6 +322,11 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
319
322
  return
320
323
  await self.state_manager.status(status)
321
324
 
325
+ async def _parse_device_event_for_device(self, status: ThingStatusMessage) -> None:
326
+ if status.params.iotId != self.iot_id:
327
+ return
328
+ await self.state_manager.device_event(status)
329
+
322
330
  async def _parse_message_for_device(self, event: ThingEventMessage) -> None:
323
331
  params = event.params
324
332
  new_msg = LubaMsg()
@@ -713,7 +713,7 @@ UxeCp6
713
713
  self.__on_ota_message_arrived = None
714
714
 
715
715
  if self.__just_for_pycharm_autocomplete:
716
- self.__mqtt_client = mqtt.Client(CallbackAPIVersion.VERSION2)
716
+ self.__mqtt_client = mqtt.Client(CallbackAPIVersion.VERSION1)
717
717
 
718
718
  # device interface info
719
719
  self.__device_info_topic = "/sys/%s/%s/thing/deviceinfo/update" % (self.__product_key, self.__device_name)
@@ -1311,10 +1311,7 @@ UxeCp6
1311
1311
  elif self.__mqtt_protocol == "MQTTv31":
1312
1312
  mqtt_protocol_version = mqtt.MQTTv31
1313
1313
  self.__mqtt_client = mqtt.Client(
1314
- callback_api_version=CallbackAPIVersion.VERSION2,
1315
- client_id=client_id,
1316
- clean_session=self.__mqtt_clean_session,
1317
- protocol=mqtt_protocol_version,
1314
+ client_id=client_id, clean_session=self.__mqtt_clean_session, protocol=mqtt_protocol_version
1318
1315
  )
1319
1316
 
1320
1317
  if self.__link_log.is_enabled():
@@ -1570,13 +1567,13 @@ UxeCp6
1570
1567
  else:
1571
1568
  return 1, None
1572
1569
 
1573
- def __on_internal_connect_safe(self, client, userdata, flags, reason_code, properties) -> None:
1574
- if reason_code == 0:
1570
+ def __on_internal_connect_safe(self, client, user_data, session_flag, rc) -> None:
1571
+ if rc == 0:
1575
1572
  self.__reset_reconnect_wait()
1576
1573
  self.__force_reconnect = False
1577
- session_flag_internal = {"session present": flags}
1574
+ session_flag_internal = {"session present": session_flag}
1578
1575
  self.__handler_task.post_message(
1579
- self.__handler_task_cmd_on_connect, (client, userdata, session_flag_internal, reason_code, properties)
1576
+ self.__handler_task_cmd_on_connect, (client, user_data, session_flag_internal, rc)
1580
1577
  )
1581
1578
 
1582
1579
  def __loop_forever_internal(self):
@@ -1609,7 +1606,7 @@ UxeCp6
1609
1606
  except ssl.SSLError as e:
1610
1607
  self.__link_log.error("config mqtt raise exception:" + str(e))
1611
1608
  self.__linkkit_state = LinkKit.LinkKitState.INITIALIZED
1612
- self.__on_internal_connect_safe(None, None, 0, 6, {})
1609
+ self.__on_internal_connect_safe(None, None, 0, 6)
1613
1610
  return
1614
1611
 
1615
1612
  try:
@@ -1619,7 +1616,7 @@ UxeCp6
1619
1616
  except Exception as e:
1620
1617
  self.__link_log.error("__loop_forever_internal connect raise exception:" + str(e))
1621
1618
  self.__linkkit_state = LinkKit.LinkKitState.INITIALIZED
1622
- self.__on_internal_connect_safe(None, None, 0, 7, {})
1619
+ self.__on_internal_connect_safe(None, None, 0, 7)
1623
1620
  return
1624
1621
  while True:
1625
1622
  if self.__worker_loop_exit_req:
@@ -1642,7 +1639,7 @@ UxeCp6
1642
1639
  # return
1643
1640
  if self.__linkkit_state == LinkKit.LinkKitState.CONNECTING:
1644
1641
  self.__linkkit_state = LinkKit.LinkKitState.DISCONNECTED
1645
- self.__on_internal_connect_safe(None, None, 0, 9, {})
1642
+ self.__on_internal_connect_safe(None, None, 0, 9)
1646
1643
  if self.__linkkit_state == LinkKit.LinkKitState.DESTRUCTING:
1647
1644
  self.__handler_task.stop()
1648
1645
  self.__linkkit_state = LinkKit.LinkKitState.DESTRUCTED
@@ -1664,7 +1661,7 @@ UxeCp6
1664
1661
  break
1665
1662
 
1666
1663
  if self.__linkkit_state == LinkKit.LinkKitState.CONNECTED:
1667
- self.__on_internal_disconnect(None, None, 1, {})
1664
+ self.__on_internal_disconnect(None, None, 1)
1668
1665
  self.__link_log.info("loop return:%r" % rc)
1669
1666
 
1670
1667
  if self.__worker_loop_exit_req:
@@ -2539,25 +2536,23 @@ UxeCp6
2539
2536
  client, user_data, message = value
2540
2537
  self.__on_internal_async_message(message)
2541
2538
 
2542
- def __on_internal_connect(self, client, userdata, flags, reason_code, properties) -> None:
2539
+ def __on_internal_connect(self, client, user_data, session_flag, rc) -> None:
2543
2540
  self.__link_log.info("__on_internal_connect")
2544
- if reason_code == 0:
2541
+ if rc == 0:
2545
2542
  self.__reset_reconnect_wait()
2546
2543
  # self.__upload_device_interface_info()
2547
- self.__handler_task.post_message(
2548
- self.__handler_task_cmd_on_connect, (client, userdata, flags, reason_code, properties)
2549
- )
2544
+ self.__handler_task.post_message(self.__handler_task_cmd_on_connect, (client, user_data, session_flag, rc))
2550
2545
 
2551
2546
  def __handler_task_on_connect_callback(self, value) -> None:
2552
- client, userdata, flags, reason_code = value
2547
+ client, user_data, session_flag, rc = value
2553
2548
  self.__link_log.info("__on_internal_connect enter")
2554
- self.__link_log.debug("session:%d, return code:%d" % (flags["session present"], reason_code))
2549
+ self.__link_log.debug("session:%d, return code:%d" % (session_flag["session present"], rc))
2555
2550
  if rc == 0:
2556
2551
  self.__linkkit_state = LinkKit.LinkKitState.CONNECTED
2557
2552
  # self.__worker_thread.start()
2558
2553
  if self.__on_connect is not None:
2559
2554
  try:
2560
- self.__on_connect(flags["session present"], reason_code, self.__user_data)
2555
+ self.__on_connect(session_flag["session present"], rc, self.__user_data)
2561
2556
  except Exception as e:
2562
2557
  self.__link_log.error("on_connect process raise exception:%r" % e)
2563
2558
  if self.__thing_setup_state:
@@ -2565,7 +2560,7 @@ UxeCp6
2565
2560
  if self.__on_thing_enable:
2566
2561
  self.__on_thing_enable(self.__user_data)
2567
2562
 
2568
- def __on_internal_disconnect(self, client, userdata, flags, reason_code, properties) -> None:
2563
+ def __on_internal_disconnect(self, client, user_data, rc) -> None:
2569
2564
  self.__link_log.info("__on_internal_disconnect enter")
2570
2565
  if self.__linkkit_state == LinkKit.LinkKitState.DESTRUCTING:
2571
2566
  self.__linkkit_state = LinkKit.LinkKitState.DESTRUCTED
@@ -2598,15 +2593,13 @@ UxeCp6
2598
2593
  self.__device_info_mid.clear()
2599
2594
  self.__thing_update_device_info_up_mid.clear()
2600
2595
  self.__thing_delete_device_info_up_mid.clear()
2601
- self.__handler_task.post_message(
2602
- self.__handler_task_cmd_on_disconnect, (client, userdata, reason_code, properties)
2603
- )
2596
+ self.__handler_task.post_message(self.__handler_task_cmd_on_disconnect, (client, user_data, rc))
2604
2597
  if self.__linkkit_state == LinkKit.LinkKitState.DESTRUCTED:
2605
2598
  self.__handler_task.stop()
2606
2599
 
2607
2600
  def __handler_task_on_disconnect_callback(self, value) -> None:
2608
2601
  self.__link_log.info("__handler_task_on_disconnect_callback enter")
2609
- client, userdata, reason_code = value
2602
+ client, user_data, rc = value
2610
2603
  if self.__thing_setup_state:
2611
2604
  if self.__thing_enable_state:
2612
2605
  self.__thing_enable_state = False
@@ -2617,7 +2610,7 @@ UxeCp6
2617
2610
  self.__link_log.error("on_thing_disable process raise exception:%r" % e)
2618
2611
  if self.__on_disconnect is not None:
2619
2612
  try:
2620
- self.__on_disconnect(reason_code, self.__user_data)
2613
+ self.__on_disconnect(rc, self.__user_data)
2621
2614
  except Exception as e:
2622
2615
  self.__link_log.error("on_disconnect process raise exception:%r" % e)
2623
2616
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "pymammotion"
7
- version = "0.5.4"
7
+ version = "0.5.6"
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.5.4"
69
+ current_version = "0.5.6"
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