@ray-js/robot-data-stream 0.0.14 → 0.0.15-beta.1

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 (156) hide show
  1. package/lib/mqtt/createCommonOptions.d.ts +4 -2
  2. package/lib/mqtt/createCommonOptions.js +10 -5
  3. package/lib/mqtt/hooks/useStructuredMessage.d.ts +14 -0
  4. package/lib/mqtt/hooks/useStructuredMessage.js +131 -0
  5. package/lib/mqtt/mqttProvider.d.ts +19 -1
  6. package/lib/mqtt/mqttProvider.js +69 -8
  7. package/lib/mqtt/promise.d.ts +57 -4
  8. package/lib/mqtt/promise.js +115 -36
  9. package/lib/mqtt/type/fun.d.ts +49 -0
  10. package/lib/mqtt/type/fun.js +145 -0
  11. package/lib/mqtt/type/index.d.ts +0 -7
  12. package/lib/mqtt/type/index.js +0 -1
  13. package/lib/mqtt/type/protocols/base.d.ts +5 -0
  14. package/lib/mqtt/type/protocols/base.js +32 -0
  15. package/lib/mqtt/type/protocols/carpetCleanProtocol.d.ts +8 -0
  16. package/lib/mqtt/type/protocols/carpetCleanProtocol.js +16 -0
  17. package/lib/mqtt/type/protocols/carpetProtocol.d.ts +41 -0
  18. package/lib/mqtt/type/protocols/carpetProtocol.js +202 -0
  19. package/lib/mqtt/type/protocols/devInfoProtocol.d.ts +5 -0
  20. package/lib/mqtt/type/protocols/devInfoProtocol.js +12 -0
  21. package/lib/mqtt/type/protocols/deviceModelProtocol.d.ts +8 -0
  22. package/lib/mqtt/type/protocols/deviceModelProtocol.js +34 -0
  23. package/lib/mqtt/type/protocols/furnitureModelProtocol.d.ts +10 -0
  24. package/lib/mqtt/type/protocols/furnitureModelProtocol.js +35 -0
  25. package/lib/mqtt/type/protocols/historyMapProtocol.d.ts +17 -0
  26. package/lib/mqtt/type/protocols/historyMapProtocol.js +37 -0
  27. package/lib/mqtt/type/protocols/index.d.ts +20 -0
  28. package/lib/mqtt/type/protocols/index.js +20 -0
  29. package/lib/mqtt/type/protocols/partDivisionProtocol.d.ts +8 -0
  30. package/lib/mqtt/type/protocols/partDivisionProtocol.js +12 -0
  31. package/lib/mqtt/type/protocols/partMergeProtocol.d.ts +7 -0
  32. package/lib/mqtt/type/protocols/partMergeProtocol.js +12 -0
  33. package/lib/mqtt/type/protocols/passwordProtocol.d.ts +11 -0
  34. package/lib/mqtt/type/protocols/passwordProtocol.js +25 -0
  35. package/lib/mqtt/type/protocols/quietHoursProtocol.d.ts +8 -0
  36. package/lib/mqtt/type/protocols/quietHoursProtocol.js +35 -0
  37. package/lib/mqtt/type/protocols/resetMapProtocol.d.ts +4 -0
  38. package/lib/mqtt/type/protocols/resetMapProtocol.js +1 -0
  39. package/lib/mqtt/type/protocols/roomPropertyProtocol.d.ts +14 -0
  40. package/lib/mqtt/type/protocols/roomPropertyProtocol.js +113 -0
  41. package/lib/mqtt/type/protocols/scheduleProtocol.d.ts +18 -0
  42. package/lib/mqtt/type/protocols/scheduleProtocol.js +100 -0
  43. package/lib/mqtt/type/protocols/selectRoomCleanProtocol.d.ts +8 -0
  44. package/lib/mqtt/type/protocols/selectRoomCleanProtocol.js +40 -0
  45. package/lib/mqtt/type/protocols/spotCleanProtocol.d.ts +9 -0
  46. package/lib/mqtt/type/protocols/spotCleanProtocol.js +72 -0
  47. package/lib/mqtt/type/protocols/virtualAreaProtocol.d.ts +8 -0
  48. package/lib/mqtt/type/protocols/virtualAreaProtocol.js +36 -0
  49. package/lib/mqtt/type/protocols/virtualWallProtocol.d.ts +8 -0
  50. package/lib/mqtt/type/protocols/virtualWallProtocol.js +25 -0
  51. package/lib/mqtt/type/protocols/voiceProtocol.d.ts +8 -0
  52. package/lib/mqtt/type/protocols/voiceProtocol.js +23 -0
  53. package/lib/mqtt/type/protocols/wifiMapProtocol.d.ts +8 -0
  54. package/lib/mqtt/type/protocols/wifiMapProtocol.js +14 -0
  55. package/lib/mqtt/type/protocols/zoneCleanProtocol.d.ts +8 -0
  56. package/lib/mqtt/type/protocols/zoneCleanProtocol.js +49 -0
  57. package/lib/mqtt/useCarpet.d.ts +7 -67
  58. package/lib/mqtt/useCarpet.js +101 -181
  59. package/lib/mqtt/useCarpetClean.d.ts +2 -11
  60. package/lib/mqtt/useCarpetClean.js +24 -51
  61. package/lib/mqtt/useDevInfo.d.ts +8 -6
  62. package/lib/mqtt/useDevInfo.js +44 -36
  63. package/lib/mqtt/useDeviceModel.d.ts +6 -19
  64. package/lib/mqtt/useDeviceModel.js +29 -42
  65. package/lib/mqtt/useFurnitureModel.d.ts +6 -18
  66. package/lib/mqtt/useFurnitureModel.js +29 -43
  67. package/lib/mqtt/useHistoryMap.d.ts +2 -18
  68. package/lib/mqtt/useHistoryMap.js +102 -119
  69. package/lib/mqtt/usePartDivision.d.ts +2 -9
  70. package/lib/mqtt/usePartDivision.js +48 -57
  71. package/lib/mqtt/usePartMerge.d.ts +2 -8
  72. package/lib/mqtt/usePartMerge.js +34 -49
  73. package/lib/mqtt/usePassword.d.ts +6 -13
  74. package/lib/mqtt/usePassword.js +84 -74
  75. package/lib/mqtt/useQuiteHours.d.ts +4 -37
  76. package/lib/mqtt/useQuiteHours.js +66 -100
  77. package/lib/mqtt/useResetMap.d.ts +2 -8
  78. package/lib/mqtt/useResetMap.js +27 -34
  79. package/lib/mqtt/useRoomProperty.d.ts +8 -9
  80. package/lib/mqtt/useRoomProperty.js +67 -65
  81. package/lib/mqtt/useSchedule.d.ts +3 -23
  82. package/lib/mqtt/useSchedule.js +72 -101
  83. package/lib/mqtt/useSelectRoomClean.d.ts +3 -24
  84. package/lib/mqtt/useSelectRoomClean.js +107 -133
  85. package/lib/mqtt/useSpotClean.d.ts +5 -15
  86. package/lib/mqtt/useSpotClean.js +68 -121
  87. package/lib/mqtt/useVirtualArea.d.ts +6 -17
  88. package/lib/mqtt/useVirtualArea.js +109 -119
  89. package/lib/mqtt/useVirtualWall.d.ts +2 -18
  90. package/lib/mqtt/useVirtualWall.js +69 -90
  91. package/lib/mqtt/useVoice.d.ts +2 -16
  92. package/lib/mqtt/useVoice.js +48 -68
  93. package/lib/mqtt/useWifiMap.d.ts +6 -5
  94. package/lib/mqtt/useWifiMap.js +43 -42
  95. package/lib/mqtt/useZoneClean.d.ts +2 -21
  96. package/lib/mqtt/useZoneClean.js +125 -137
  97. package/lib/myLib/zod/mini/index.d.cts +1 -0
  98. package/lib/myLib/zod/mini/index.d.ts +1 -0
  99. package/lib/myLib/zod/mini/index.js +1 -0
  100. package/lib/myLib/zod/mini/package.json +6 -0
  101. package/lib/myLib/zod/src/mini/index.d.ts +1 -0
  102. package/lib/myLib/zod/src/mini/index.js +1 -0
  103. package/lib/myLib/zod/src/v4/core/api.d.ts +306 -0
  104. package/lib/myLib/zod/src/v4/core/api.js +1256 -0
  105. package/lib/myLib/zod/src/v4/core/checks.d.ts +278 -0
  106. package/lib/myLib/zod/src/v4/core/checks.js +816 -0
  107. package/lib/myLib/zod/src/v4/core/config.d.ts +9 -0
  108. package/lib/myLib/zod/src/v4/core/config.js +5 -0
  109. package/lib/myLib/zod/src/v4/core/core.d.ts +70 -0
  110. package/lib/myLib/zod/src/v4/core/core.js +95 -0
  111. package/lib/myLib/zod/src/v4/core/doc.d.ts +14 -0
  112. package/lib/myLib/zod/src/v4/core/doc.js +42 -0
  113. package/lib/myLib/zod/src/v4/core/errors.d.ts +220 -0
  114. package/lib/myLib/zod/src/v4/core/errors.js +232 -0
  115. package/lib/myLib/zod/src/v4/core/index.d.ts +15 -0
  116. package/lib/myLib/zod/src/v4/core/index.js +15 -0
  117. package/lib/myLib/zod/src/v4/core/json-schema-generator.d.ts +65 -0
  118. package/lib/myLib/zod/src/v4/core/json-schema-generator.js +120 -0
  119. package/lib/myLib/zod/src/v4/core/json-schema-processors.d.ts +49 -0
  120. package/lib/myLib/zod/src/v4/core/json-schema-processors.js +593 -0
  121. package/lib/myLib/zod/src/v4/core/json-schema.d.ts +88 -0
  122. package/lib/myLib/zod/src/v4/core/json-schema.js +1 -0
  123. package/lib/myLib/zod/src/v4/core/parse.d.ts +49 -0
  124. package/lib/myLib/zod/src/v4/core/parse.js +147 -0
  125. package/lib/myLib/zod/src/v4/core/regexes.d.ts +78 -0
  126. package/lib/myLib/zod/src/v4/core/regexes.js +146 -0
  127. package/lib/myLib/zod/src/v4/core/registries.d.ts +35 -0
  128. package/lib/myLib/zod/src/v4/core/registries.js +51 -0
  129. package/lib/myLib/zod/src/v4/core/schemas.d.ts +1136 -0
  130. package/lib/myLib/zod/src/v4/core/schemas.js +2745 -0
  131. package/lib/myLib/zod/src/v4/core/standard-schema.d.ts +126 -0
  132. package/lib/myLib/zod/src/v4/core/standard-schema.js +1 -0
  133. package/lib/myLib/zod/src/v4/core/to-json-schema.d.ts +114 -0
  134. package/lib/myLib/zod/src/v4/core/to-json-schema.js +488 -0
  135. package/lib/myLib/zod/src/v4/core/util.d.ts +199 -0
  136. package/lib/myLib/zod/src/v4/core/util.js +656 -0
  137. package/lib/myLib/zod/src/v4/core/versions.d.ts +5 -0
  138. package/lib/myLib/zod/src/v4/core/versions.js +5 -0
  139. package/lib/myLib/zod/src/v4/core/zsf.d.ts +91 -0
  140. package/lib/myLib/zod/src/v4/core/zsf.js +1 -0
  141. package/lib/myLib/zod/src/v4/mini/checks.d.ts +1 -0
  142. package/lib/myLib/zod/src/v4/mini/checks.js +1 -0
  143. package/lib/myLib/zod/src/v4/mini/coerce.d.ts +7 -0
  144. package/lib/myLib/zod/src/v4/mini/coerce.js +27 -0
  145. package/lib/myLib/zod/src/v4/mini/external.d.ts +11 -0
  146. package/lib/myLib/zod/src/v4/mini/external.js +16 -0
  147. package/lib/myLib/zod/src/v4/mini/index.d.ts +3 -0
  148. package/lib/myLib/zod/src/v4/mini/index.js +3 -0
  149. package/lib/myLib/zod/src/v4/mini/iso.d.ts +22 -0
  150. package/lib/myLib/zod/src/v4/mini/iso.js +46 -0
  151. package/lib/myLib/zod/src/v4/mini/parse.d.ts +1 -0
  152. package/lib/myLib/zod/src/v4/mini/parse.js +1 -0
  153. package/lib/myLib/zod/src/v4/mini/schemas.js +1244 -0
  154. package/lib/utils/index.d.ts +1 -0
  155. package/lib/utils/index.js +2 -1
  156. package/package.json +5 -3
@@ -1,34 +1,26 @@
1
1
  import "core-js/modules/esnext.iterator.map.js";
2
2
  // 定时
3
- import { useContext } from 'react';
4
- import { createSetCommonParams } from './createCommonOptions';
5
- import { normalResolve } from './promise';
6
- import { ScheduleEnum } from './type';
7
- import { SingletonContext } from './mqttProvider';
8
3
  import { encodeDeviceTimer0x30 } from '@ray-js/robot-protocol';
4
+ import { useContext } from 'react';
9
5
  import { CISTERN_MAP, CLEAN_MODE_MAP, SUCTION_MAP } from '../constant';
10
-
11
- // 定时任务项
12
-
13
- // 定时任务数据
14
-
15
- // 定时任务响应类型
16
-
17
- // 请求定时数据函数类型定义
18
-
19
- // 设置定时数据函数类型定义
20
-
6
+ import { handleMqttError, useStructuredMessage } from './hooks/useStructuredMessage';
7
+ import { SingletonContext } from './mqttProvider';
8
+ import { ScheduleEnum } from './type';
9
+ import { validator } from './type/fun';
21
10
  /**
22
11
  * 自定义 Hook,用于定时任务
23
- * @param devId 设备ID
12
+ * @param devId 设备ID(可选,如果不提供则从 MqttProvider Context 获取)
24
13
  * @returns 包含 requestSchedule 和 setSchedule 函数的对象
25
14
  */
26
- export const useSchedule = devId => {
15
+ export const useSchedule = () => {
27
16
  const {
28
17
  useMqtt,
29
18
  devices,
30
19
  commandVersion
31
20
  } = useContext(SingletonContext);
21
+ const {
22
+ sendStructuredMessage
23
+ } = useStructuredMessage();
32
24
  /**
33
25
  * 请求定时数据
34
26
  * @param message 可选参数,包含版本号
@@ -46,93 +38,72 @@ export const useSchedule = devId => {
46
38
  let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
47
39
  version: '1.0.0'
48
40
  };
49
- if (!useMqtt) {
50
- return Promise.reject(new Error('useMqtt is not used'));
51
- }
52
- try {
53
- const params = createSetCommonParams({
54
- deviceId: devId,
55
- reqType: ScheduleEnum.query,
56
- message
57
- });
58
- ty.device.sendMqttMessage(params);
59
- const {
60
- taskId
61
- } = params.message;
62
- return normalResolve(ScheduleEnum.query, taskId);
63
- } catch (error) {
64
- return Promise.reject(error instanceof Error ? error : new Error('Failed to request schedule'));
65
- }
41
+ return new Promise((resolve, reject) => {
42
+ try {
43
+ // 使用 TypeBox Schema 进行参数验证
44
+ const validatedParams = validator.validate('request_schedule', message);
45
+ sendStructuredMessage(ScheduleEnum.query, validatedParams, resolve, error => reject(handleMqttError(error, 'Failed to request schedule')));
46
+ } catch (error) {
47
+ reject(handleMqttError(error, 'Failed to request schedule'));
48
+ }
49
+ });
66
50
  },
67
51
  setSchedule: message => {
68
- // 参数验证
69
- if (!message || typeof message.num !== 'number') {
70
- throw new Error('message.num is required and must be a number');
71
- }
72
- if (!Array.isArray(message.list)) {
73
- throw new Error('message.list is required and must be an array');
74
- }
75
- if (message.num !== message.list.length) {
76
- throw new Error('message.num must equal message.list.length');
77
- }
78
- try {
79
- if (useMqtt) {
80
- const params = createSetCommonParams({
81
- deviceId: devId,
82
- reqType: ScheduleEnum.set,
83
- message
52
+ return new Promise((resolve, reject) => {
53
+ try {
54
+ // 使用 TypeBox Schema 进行参数验证
55
+ const validatedData = validator.validate('set_schedule', message);
56
+ if (useMqtt) {
57
+ sendStructuredMessage(ScheduleEnum.set, validatedData, resolve, error => reject(handleMqttError(error, 'Failed to set schedule')), ScheduleEnum.query // 响应类型是 query,不是 set
58
+ );
59
+ return;
60
+ }
61
+
62
+ // 非 MQTT 模式:使用命令传输
63
+ const command = encodeDeviceTimer0x30({
64
+ version: commandVersion,
65
+ number: validatedData.num,
66
+ list: validatedData.list.map(_ref => {
67
+ let {
68
+ active,
69
+ suctions,
70
+ sweepMopModes,
71
+ ids,
72
+ cleanCounts,
73
+ cycle,
74
+ cisterns,
75
+ time
76
+ } = _ref;
77
+ return {
78
+ effectiveness: active,
79
+ cleanMode: CLEAN_MODE_MAP[(sweepMopModes === null || sweepMopModes === void 0 ? void 0 : sweepMopModes[0]) || ''],
80
+ fanLevel: SUCTION_MAP[(suctions === null || suctions === void 0 ? void 0 : suctions[0]) || ''],
81
+ waterLevel: CISTERN_MAP[(cisterns === null || cisterns === void 0 ? void 0 : cisterns[0]) || ''],
82
+ time: {
83
+ hour: time[0],
84
+ minute: time[1]
85
+ },
86
+ week: cycle,
87
+ sweepCount: (cleanCounts === null || cleanCounts === void 0 ? void 0 : cleanCounts[0]) || 1,
88
+ roomIds: ids || [],
89
+ roomNum: (ids === null || ids === void 0 ? void 0 : ids.length) || 0
90
+ };
91
+ })
84
92
  });
85
- ty.device.sendMqttMessage(params);
86
- const {
87
- taskId
88
- } = params.message;
89
- return normalResolve(ScheduleEnum.query, taskId);
93
+ devices.common.model.actions.device_timer.set(command);
94
+ resolve({
95
+ success: true,
96
+ errCode: 0,
97
+ reqType: ScheduleEnum.query,
98
+ version: commandVersion,
99
+ taskId: `${Date.now()}`,
100
+ list: validatedData.list,
101
+ num: validatedData.num
102
+ });
103
+ } catch (error) {
104
+ reject(handleMqttError(error, 'Failed to set schedule'));
90
105
  }
91
-
92
- // 非 MQTT 模式:使用命令传输
93
- const command = encodeDeviceTimer0x30({
94
- version: commandVersion,
95
- number: message.num,
96
- list: message.list.map(_ref => {
97
- let {
98
- active,
99
- suctions,
100
- sweepMopModes,
101
- ids,
102
- cleanCounts,
103
- cycle,
104
- cisterns,
105
- time
106
- } = _ref;
107
- return {
108
- effectiveness: active,
109
- cleanMode: CLEAN_MODE_MAP[sweepMopModes[0]],
110
- fanLevel: SUCTION_MAP[suctions[0]],
111
- waterLevel: CISTERN_MAP[cisterns[0]],
112
- time: {
113
- hour: time[0],
114
- minute: time[1]
115
- },
116
- week: cycle,
117
- sweepCount: cleanCounts[0],
118
- roomIds: ids,
119
- roomNum: ids.length
120
- };
121
- })
122
- });
123
- devices.common.model.actions.device_timer.set(command);
124
- return Promise.resolve({
125
- success: true,
126
- errCode: 0,
127
- reqType: ScheduleEnum.query,
128
- version: commandVersion,
129
- taskId: `${Date.now()}`,
130
- list: message.list,
131
- num: message.num
132
- });
133
- } catch (error) {
134
- throw error instanceof Error ? error : new Error('Failed to set schedule');
135
- }
106
+ });
136
107
  }
137
108
  };
138
109
  };
@@ -1,30 +1,9 @@
1
- import { BaseResponse, RoomCleanSetEnum } from './type';
2
- interface RoomInfo {
3
- roomId: number;
4
- suction?: string;
5
- cistern: string;
6
- cleanTimes?: number;
7
- yMop?: number;
8
- sweepMopMode?: string;
9
- }
10
- interface RoomCleanResponse extends BaseResponse {
11
- reqType: RoomCleanSetEnum.query;
12
- ids: number[];
13
- suctions?: string[];
14
- cisterns?: string[];
15
- cleanCounts?: number[];
16
- yMops?: number[];
17
- sweepMopModes?: string[];
18
- }
19
- type TSetRoomClean = (rooms: RoomInfo[]) => Promise<RoomCleanResponse>;
20
- type TRequestSelectRoomClean = () => Promise<RoomCleanResponse>;
1
+ import { type TRequestSelectRoomClean, type TSetSelectRoomClean } from './type/protocols';
21
2
  /**
22
3
  * 自定义 Hook,用于选区清扫
23
- * @param devId 设备ID
24
4
  * @returns 包含 requestSelectRoomClean 和 setRoomClean 函数的对象
25
5
  */
26
- export declare const useSelectRoomClean: (devId: string) => {
6
+ export declare const useSelectRoomClean: () => {
27
7
  requestSelectRoomClean: TRequestSelectRoomClean;
28
- setRoomClean: TSetRoomClean;
8
+ setRoomClean: TSetSelectRoomClean;
29
9
  };
30
- export {};
@@ -2,118 +2,95 @@ import "core-js/modules/esnext.iterator.constructor.js";
2
2
  import "core-js/modules/esnext.iterator.for-each.js";
3
3
  import "core-js/modules/esnext.iterator.map.js";
4
4
  // 选区清扫
5
- import { createSetCommonParams } from './createCommonOptions';
6
- import { RoomCleanSetEnum } from './type';
7
- import { normalResolve } from './promise';
5
+ import { encodeRoomClean0x14, requestRoomClean0x15 } from '@ray-js/robot-protocol';
8
6
  import { useContext } from 'react';
7
+ import { handleMqttError, useStructuredMessage } from './hooks/useStructuredMessage';
9
8
  import { SingletonContext } from './mqttProvider';
10
- import { encodeRoomClean0x14, requestRoomClean0x15 } from '@ray-js/robot-protocol';
11
-
12
- // 房间信息
13
-
14
- // 选区清扫响应类型
15
-
16
- // 设置选区清扫函数类型定义
17
-
18
- // 请求选区清扫函数类型定义
19
-
9
+ import { RoomCleanSetEnum } from './type';
10
+ import { validator } from './type/fun';
20
11
  /**
21
12
  * 自定义 Hook,用于选区清扫
22
- * @param devId 设备ID
23
13
  * @returns 包含 requestSelectRoomClean 和 setRoomClean 函数的对象
24
14
  */
25
- export const useSelectRoomClean = devId => {
15
+ export const useSelectRoomClean = () => {
26
16
  const {
27
17
  useMqtt,
28
18
  commandVersion,
29
19
  devices
30
20
  } = useContext(SingletonContext);
21
+ const {
22
+ sendStructuredMessage
23
+ } = useStructuredMessage();
31
24
 
32
25
  /**
33
26
  * 请求选区清扫信息
34
- * @returns Promise<RoomCleanResponse> 响应结果
27
+ * @param data 可选参数(目前为空对象)
28
+ * @returns Promise<SelectRoomCleanResponse> 响应结果
35
29
  */
36
30
 
37
31
  /**
38
32
  * 设置选区清扫
39
33
  * 选区清扫的清扫属性,当全局模式下使用全局的清扫属性,当自定义模式下,使用房间自定义的清扫属性
40
- * @param rooms 房间信息数组
41
- * @returns Promise<RoomCleanResponse> 响应结果
34
+ * @param data 包含房间信息数组的对象
35
+ * @returns Promise<SelectRoomCleanResponse> 响应结果
42
36
  */
43
37
 
44
38
  return {
45
39
  requestSelectRoomClean: () => {
46
- try {
47
- if (useMqtt) {
48
- const params = createSetCommonParams({
49
- deviceId: devId,
50
- reqType: RoomCleanSetEnum.query
51
- });
52
- ty.device.sendMqttMessage(params);
53
- const {
54
- taskId
55
- } = params.message;
56
- return normalResolve(RoomCleanSetEnum.query, taskId);
57
- }
40
+ return new Promise((resolve, reject) => {
41
+ try {
42
+ if (useMqtt) {
43
+ sendStructuredMessage(RoomCleanSetEnum.query, {}, resolve, error => reject(handleMqttError(error, 'Failed to request select room clean')));
44
+ return;
45
+ }
58
46
 
59
- // 非 MQTT 模式:使用命令传输
60
- devices.common.model.actions.command_trans.set(requestRoomClean0x15({
61
- version: commandVersion
62
- }));
47
+ // 非 MQTT 模式:使用命令传输
48
+ devices.common.model.actions.command_trans.set(requestRoomClean0x15({
49
+ version: commandVersion
50
+ }));
63
51
 
64
- // 非 MQTT 模式下无法立即获取响应数据,返回默认响应
65
- return Promise.resolve({
66
- success: true,
67
- errCode: 0,
68
- reqType: RoomCleanSetEnum.query,
69
- version: commandVersion,
70
- taskId: `${Date.now()}`,
71
- ids: [],
72
- suctions: [],
73
- cisterns: [],
74
- cleanCounts: [],
75
- yMops: [],
76
- sweepMopModes: []
77
- });
78
- } catch (error) {
79
- return Promise.reject(error instanceof Error ? error : new Error('Failed to request select room clean'));
80
- }
81
- },
82
- setRoomClean: rooms => {
83
- // 参数验证
84
- if (!Array.isArray(rooms) || rooms.length === 0) {
85
- throw new Error('rooms is required and must be a non-empty array');
86
- }
87
- rooms.forEach((room, index) => {
88
- if (typeof room.roomId !== 'number') {
89
- throw new Error(`rooms[${index}].roomId is required and must be a number`);
90
- }
91
- if (!room.cistern || typeof room.cistern !== 'string') {
92
- throw new Error(`rooms[${index}].cistern is required and must be a string`);
52
+ // 非 MQTT 模式下无法立即获取响应数据,返回默认响应
53
+ resolve({
54
+ success: true,
55
+ errCode: 0,
56
+ reqType: RoomCleanSetEnum.query,
57
+ version: commandVersion,
58
+ taskId: `${Date.now()}`,
59
+ ids: [],
60
+ suctions: [],
61
+ cisterns: [],
62
+ cleanCounts: [],
63
+ yMops: [],
64
+ sweepMopModes: []
65
+ });
66
+ } catch (error) {
67
+ reject(handleMqttError(error, 'Failed to request select room clean'));
93
68
  }
94
69
  });
95
- try {
96
- var _rooms$0$cleanTimes, _rooms$;
97
- if (useMqtt) {
98
- const ids = [];
99
- const suctions = [];
100
- const cisterns = [];
101
- const cleanCounts = [];
102
- const yMops = [];
103
- const sweepMopModes = [];
104
- rooms.forEach(room => {
105
- var _room$suction, _room$cleanTimes, _room$yMop, _room$sweepMopMode;
106
- ids.push(room.roomId);
107
- suctions.push((_room$suction = room.suction) !== null && _room$suction !== void 0 ? _room$suction : '');
108
- cisterns.push(room.cistern);
109
- cleanCounts.push((_room$cleanTimes = room.cleanTimes) !== null && _room$cleanTimes !== void 0 ? _room$cleanTimes : 1);
110
- yMops.push((_room$yMop = room.yMop) !== null && _room$yMop !== void 0 ? _room$yMop : -1);
111
- sweepMopModes.push((_room$sweepMopMode = room.sweepMopMode) !== null && _room$sweepMopMode !== void 0 ? _room$sweepMopMode : 'only_sweep');
112
- });
113
- const params = createSetCommonParams({
114
- deviceId: devId,
115
- reqType: RoomCleanSetEnum.set,
116
- message: {
70
+ },
71
+ setRoomClean: data => {
72
+ return new Promise((resolve, reject) => {
73
+ try {
74
+ var _rooms$0$cleanTimes, _rooms$;
75
+ // 使用 TypeBox Schema 进行参数验证
76
+ const rooms = validator.validate('set_select_room_clean', data);
77
+ if (useMqtt) {
78
+ const ids = [];
79
+ const suctions = [];
80
+ const cisterns = [];
81
+ const cleanCounts = [];
82
+ const yMops = [];
83
+ const sweepMopModes = [];
84
+ rooms.forEach(room => {
85
+ var _room$suction, _room$cleanTimes, _room$yMop, _room$sweepMopMode;
86
+ ids.push(room.roomId);
87
+ suctions.push((_room$suction = room.suction) !== null && _room$suction !== void 0 ? _room$suction : '');
88
+ cisterns.push(room.cistern);
89
+ cleanCounts.push((_room$cleanTimes = room.cleanTimes) !== null && _room$cleanTimes !== void 0 ? _room$cleanTimes : 1);
90
+ yMops.push((_room$yMop = room.yMop) !== null && _room$yMop !== void 0 ? _room$yMop : -1);
91
+ sweepMopModes.push((_room$sweepMopMode = room.sweepMopMode) !== null && _room$sweepMopMode !== void 0 ? _room$sweepMopMode : 'only_sweep');
92
+ });
93
+ sendStructuredMessage(RoomCleanSetEnum.set, {
117
94
  ids,
118
95
  suctions,
119
96
  cisterns,
@@ -121,56 +98,53 @@ export const useSelectRoomClean = devId => {
121
98
  yMops,
122
99
  sweepMopModes,
123
100
  num: rooms.length
124
- }
101
+ }, resolve, error => reject(handleMqttError(error, 'Failed to set room clean')), RoomCleanSetEnum.query // 响应类型是 query,不是 set
102
+ );
103
+ return;
104
+ }
105
+
106
+ // 非 MQTT 模式:使用命令传输
107
+ const command = encodeRoomClean0x14({
108
+ version: commandVersion,
109
+ roomIds: rooms.map(room => room.roomId),
110
+ cleanTimes: (_rooms$0$cleanTimes = (_rooms$ = rooms[0]) === null || _rooms$ === void 0 ? void 0 : _rooms$.cleanTimes) !== null && _rooms$0$cleanTimes !== void 0 ? _rooms$0$cleanTimes : 1
111
+ });
112
+ devices.common.model.actions.command_trans.set(command);
113
+ const ids = rooms.map(room => room.roomId);
114
+ const suctions = rooms.map(room => {
115
+ var _room$suction2;
116
+ return (_room$suction2 = room.suction) !== null && _room$suction2 !== void 0 ? _room$suction2 : '';
125
117
  });
126
- ty.device.sendMqttMessage(params);
127
- const {
128
- taskId
129
- } = params.message;
130
- return normalResolve(RoomCleanSetEnum.query, taskId);
118
+ const cisterns = rooms.map(room => room.cistern);
119
+ const cleanCounts = rooms.map(room => {
120
+ var _room$cleanTimes2;
121
+ return (_room$cleanTimes2 = room.cleanTimes) !== null && _room$cleanTimes2 !== void 0 ? _room$cleanTimes2 : 1;
122
+ });
123
+ const yMops = rooms.map(room => {
124
+ var _room$yMop2;
125
+ return (_room$yMop2 = room.yMop) !== null && _room$yMop2 !== void 0 ? _room$yMop2 : -1;
126
+ });
127
+ const sweepMopModes = rooms.map(room => {
128
+ var _room$sweepMopMode2;
129
+ return (_room$sweepMopMode2 = room.sweepMopMode) !== null && _room$sweepMopMode2 !== void 0 ? _room$sweepMopMode2 : 'only_sweep';
130
+ });
131
+ resolve({
132
+ success: true,
133
+ errCode: 0,
134
+ reqType: RoomCleanSetEnum.query,
135
+ version: commandVersion,
136
+ taskId: `${Date.now()}`,
137
+ ids,
138
+ suctions,
139
+ cisterns,
140
+ cleanCounts,
141
+ yMops,
142
+ sweepMopModes
143
+ });
144
+ } catch (error) {
145
+ reject(handleMqttError(error, 'Failed to set room clean'));
131
146
  }
132
-
133
- // 非 MQTT 模式:使用命令传输
134
- const command = encodeRoomClean0x14({
135
- version: commandVersion,
136
- roomIds: rooms.map(room => room.roomId),
137
- cleanTimes: (_rooms$0$cleanTimes = (_rooms$ = rooms[0]) === null || _rooms$ === void 0 ? void 0 : _rooms$.cleanTimes) !== null && _rooms$0$cleanTimes !== void 0 ? _rooms$0$cleanTimes : 1
138
- });
139
- devices.common.model.actions.command_trans.set(command);
140
- const ids = rooms.map(room => room.roomId);
141
- const suctions = rooms.map(room => {
142
- var _room$suction2;
143
- return (_room$suction2 = room.suction) !== null && _room$suction2 !== void 0 ? _room$suction2 : '';
144
- });
145
- const cisterns = rooms.map(room => room.cistern);
146
- const cleanCounts = rooms.map(room => {
147
- var _room$cleanTimes2;
148
- return (_room$cleanTimes2 = room.cleanTimes) !== null && _room$cleanTimes2 !== void 0 ? _room$cleanTimes2 : 1;
149
- });
150
- const yMops = rooms.map(room => {
151
- var _room$yMop2;
152
- return (_room$yMop2 = room.yMop) !== null && _room$yMop2 !== void 0 ? _room$yMop2 : -1;
153
- });
154
- const sweepMopModes = rooms.map(room => {
155
- var _room$sweepMopMode2;
156
- return (_room$sweepMopMode2 = room.sweepMopMode) !== null && _room$sweepMopMode2 !== void 0 ? _room$sweepMopMode2 : 'only_sweep';
157
- });
158
- return Promise.resolve({
159
- success: true,
160
- errCode: 0,
161
- reqType: RoomCleanSetEnum.query,
162
- version: commandVersion,
163
- taskId: `${Date.now()}`,
164
- ids,
165
- suctions,
166
- cisterns,
167
- cleanCounts,
168
- yMops,
169
- sweepMopModes
170
- });
171
- } catch (error) {
172
- throw error instanceof Error ? error : new Error('Failed to set room clean');
173
- }
147
+ });
174
148
  }
175
149
  };
176
150
  };
@@ -1,19 +1,9 @@
1
- import { BaseResponse, RoomPreference } from './type';
2
- import { Point } from '@ray-js/robot-protocol';
3
- type Response = BaseResponse & Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
4
- polygons: string[];
5
- names?: string[];
6
- };
7
- type TSetSpotClean = (message: Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
8
- spots: Point[];
9
- origin?: Point;
10
- }) => Promise<Response>;
1
+ import { type TRequestSpotClean, type TSetSpotClean } from './type/protocols';
11
2
  /**
12
- * 定点清扫
13
- * @returns
3
+ * 自定义 Hook,用于定点清扫
4
+ * @returns 包含 requestSpotClean 和 setSpotClean 函数的对象
14
5
  */
15
- export declare const useSpotClean: (devId: string) => {
16
- requestSpotClean: () => Promise<Response>;
6
+ export declare const useSpotClean: () => {
7
+ requestSpotClean: TRequestSpotClean;
17
8
  setSpotClean: TSetSpotClean;
18
9
  };
19
- export {};