@ray-js/robot-data-stream 0.0.13-beta-7 → 0.0.13-beta-8

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 (55) hide show
  1. package/lib/api/index.d.ts +2 -12
  2. package/lib/api/index.js +1 -172
  3. package/lib/api/p2pApi.d.ts +8 -27
  4. package/lib/api/p2pApi.js +271 -169
  5. package/lib/api/sweeperP2p.d.ts +54 -21
  6. package/lib/api/sweeperP2p.js +324 -245
  7. package/lib/constant.d.ts +0 -52
  8. package/lib/constant.js +0 -54
  9. package/lib/index.d.ts +11 -1
  10. package/lib/index.js +166 -2
  11. package/lib/mqtt/createCommonOptions.d.ts +15 -56
  12. package/lib/mqtt/createCommonOptions.js +8 -44
  13. package/lib/mqtt/mqttProvider.d.ts +15 -23
  14. package/lib/mqtt/mqttProvider.js +26 -63
  15. package/lib/mqtt/myError.d.ts +4 -0
  16. package/lib/mqtt/myError.js +6 -0
  17. package/lib/mqtt/promise.js +3 -8
  18. package/lib/mqtt/type/index.d.ts +0 -9
  19. package/lib/mqtt/type/index.js +0 -8
  20. package/lib/mqtt/type/requestType.d.ts +0 -3
  21. package/lib/mqtt/type/requestType.js +0 -4
  22. package/lib/mqtt/useDevInfo.d.ts +7 -2
  23. package/lib/mqtt/useDevInfo.js +9 -25
  24. package/lib/mqtt/useHistoryMap.d.ts +21 -13
  25. package/lib/mqtt/useHistoryMap.js +32 -82
  26. package/lib/mqtt/usePartDivision.d.ts +7 -5
  27. package/lib/mqtt/usePartDivision.js +16 -41
  28. package/lib/mqtt/usePartMerge.d.ts +7 -5
  29. package/lib/mqtt/usePartMerge.js +18 -36
  30. package/lib/mqtt/usePassword.js +28 -59
  31. package/lib/mqtt/useQuiteHours.d.ts +24 -9
  32. package/lib/mqtt/useQuiteHours.js +52 -95
  33. package/lib/mqtt/useResetMap.d.ts +7 -10
  34. package/lib/mqtt/useResetMap.js +11 -40
  35. package/lib/mqtt/useRoomProperty.js +16 -23
  36. package/lib/mqtt/useSchedule.d.ts +4 -17
  37. package/lib/mqtt/useSchedule.js +49 -101
  38. package/lib/mqtt/useSelectRoomClean.d.ts +16 -20
  39. package/lib/mqtt/useSelectRoomClean.js +49 -145
  40. package/lib/mqtt/useSpotClean.d.ts +3 -3
  41. package/lib/mqtt/useSpotClean.js +51 -71
  42. package/lib/mqtt/useVirtualArea.d.ts +9 -6
  43. package/lib/mqtt/useVirtualArea.js +42 -112
  44. package/lib/mqtt/useVirtualWall.d.ts +10 -13
  45. package/lib/mqtt/useVirtualWall.js +34 -97
  46. package/lib/mqtt/useVoice.d.ts +6 -3
  47. package/lib/mqtt/useVoice.js +33 -73
  48. package/lib/mqtt/useWifiMap.js +18 -34
  49. package/lib/mqtt/useZoneClean.d.ts +13 -13
  50. package/lib/mqtt/useZoneClean.js +76 -149
  51. package/lib/utils/index.d.ts +1 -20
  52. package/lib/utils/index.js +0 -19
  53. package/package.json +1 -1
  54. package/lib/ttt/index.d.ts +0 -153
  55. package/lib/ttt/index.js +0 -458
@@ -8,20 +8,6 @@ import { normalResolve } from './promise';
8
8
  import { useContext } from 'react';
9
9
  import { SingletonContext } from './mqttProvider';
10
10
  import { encodeRoomClean0x14, requestRoomClean0x15 } from '@ray-js/robot-protocol';
11
-
12
- // 房间信息
13
-
14
- // 选区清扫响应类型
15
-
16
- // 设置选区清扫函数类型定义
17
-
18
- // 请求选区清扫函数类型定义
19
-
20
- /**
21
- * 自定义 Hook,用于选区清扫
22
- * @param devId 设备ID
23
- * @returns 包含 requestSelectRoomClean 和 setRoomClean 函数的对象
24
- */
25
11
  export const useSelectRoomClean = devId => {
26
12
  const {
27
13
  useMqtt,
@@ -29,148 +15,66 @@ export const useSelectRoomClean = devId => {
29
15
  devices
30
16
  } = useContext(SingletonContext);
31
17
 
32
- /**
33
- * 请求选区清扫信息
34
- * @returns Promise<RoomCleanResponse> 响应结果
35
- */
18
+ // 请求选区清扫信息
36
19
 
37
- /**
38
- * 设置选区清扫
39
- * 选区清扫的清扫属性,当全局模式下使用全局的清扫属性,当自定义模式下,使用房间自定义的清扫属性
40
- * @param rooms 房间信息数组
41
- * @returns Promise<RoomCleanResponse> 响应结果
42
- */
20
+ // 设置选区清扫
21
+ // 选区清扫的清扫属性,当全局模式下使用全局的清扫属性,当自定义模式下,使用房间自定义的清扫属性
43
22
 
44
23
  return {
45
24
  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
- }
58
-
59
- // 非 MQTT 模式:使用命令传输
60
- devices.common.model.actions.command_trans.set(requestRoomClean0x15({
61
- version: commandVersion
62
- }));
63
-
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: []
25
+ if (useMqtt) {
26
+ const params = createSetCommonParams({
27
+ deviceId: devId,
28
+ reqType: RoomCleanSetEnum.query
77
29
  });
78
- } catch (error) {
79
- return Promise.reject(error instanceof Error ? error : new Error('Failed to request select room clean'));
30
+ ty.device.sendMqttMessage(params);
31
+ return normalResolve(RoomCleanSetEnum.query, params.message.taskId);
80
32
  }
33
+ return devices.common.model.actions.command_trans.set(requestRoomClean0x15({
34
+ version: commandVersion
35
+ }));
81
36
  },
82
37
  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`);
93
- }
94
- });
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: {
117
- ids,
118
- suctions,
119
- cisterns,
120
- cleanCounts,
121
- yMops,
122
- sweepMopModes,
123
- num: rooms.length
124
- }
125
- });
126
- ty.device.sendMqttMessage(params);
127
- const {
128
- taskId
129
- } = params.message;
130
- return normalResolve(RoomCleanSetEnum.query, taskId);
131
- }
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;
38
+ var _rooms$0$cleanTimes, _rooms$;
39
+ if (useMqtt) {
40
+ const ids = [];
41
+ const suctions = [];
42
+ const cisterns = [];
43
+ const cleanCounts = [];
44
+ const yMops = [];
45
+ const sweepMopModes = [];
46
+ rooms.forEach(room => {
47
+ var _room$suction, _room$cleanTimes, _room$yMop, _room$sweepMopMode;
48
+ ids.push(room.roomId);
49
+ suctions.push((_room$suction = room.suction) !== null && _room$suction !== void 0 ? _room$suction : '');
50
+ cisterns.push(room.cistern);
51
+ cleanCounts.push((_room$cleanTimes = room.cleanTimes) !== null && _room$cleanTimes !== void 0 ? _room$cleanTimes : 1);
52
+ yMops.push((_room$yMop = room.yMop) !== null && _room$yMop !== void 0 ? _room$yMop : -1);
53
+ sweepMopModes.push((_room$sweepMopMode = room.sweepMopMode) !== null && _room$sweepMopMode !== void 0 ? _room$sweepMopMode : 'only_sweep');
149
54
  });
150
- const yMops = rooms.map(room => {
151
- var _room$yMop2;
152
- return (_room$yMop2 = room.yMop) !== null && _room$yMop2 !== void 0 ? _room$yMop2 : -1;
55
+ const params = createSetCommonParams({
56
+ deviceId: devId,
57
+ reqType: RoomCleanSetEnum.set,
58
+ message: {
59
+ ids,
60
+ suctions,
61
+ cisterns,
62
+ cleanCounts,
63
+ yMops,
64
+ sweepMopModes,
65
+ num: rooms.length
66
+ }
153
67
  });
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');
68
+ ty.device.sendMqttMessage(params);
69
+ return normalResolve(RoomCleanSetEnum.query, params.message.taskId);
173
70
  }
71
+ const command = encodeRoomClean0x14({
72
+ version: commandVersion,
73
+ roomIds: rooms.map(room => room.roomId),
74
+ 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
75
+ });
76
+ devices.common.model.actions.command_trans.set(command);
77
+ return Promise.resolve();
174
78
  }
175
79
  };
176
80
  };
@@ -1,13 +1,13 @@
1
- import { BaseResponse, RoomPreference } from './type';
1
+ import { RoomPreference } from './type';
2
2
  import { Point } from '@ray-js/robot-protocol';
3
- type Response = BaseResponse & Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
3
+ type Response = Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
4
4
  polygons: string[];
5
5
  names?: string[];
6
6
  };
7
7
  type TSetSpotClean = (message: Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
8
8
  spots: Point[];
9
9
  origin?: Point;
10
- }) => Promise<Response>;
10
+ }) => Promise<Response | void>;
11
11
  /**
12
12
  * 定点清扫
13
13
  * @returns
@@ -39,80 +39,60 @@ export const useSpotClean = devId => {
39
39
  spots,
40
40
  origin
41
41
  } = message;
42
- if (!origin || typeof origin.x !== 'number' || typeof origin.y !== 'number') {
43
- throw new Error('origin is required and must be a valid Point object with x and y properties');
44
- }
45
- try {
46
- if (useMqtt) {
47
- const num = spots.length;
48
- const {
49
- suctions = new Array(num).fill(''),
50
- cisterns = new Array(num).fill(''),
51
- cleanCounts = new Array(num).fill(1),
52
- yMops = new Array(num).fill(-1),
53
- sweepMopModes = new Array(num).fill('only_sweep')
54
- } = message;
55
- if (suctions && !isArray(suctions)) {
56
- throw new Error('suctions is illegal');
57
- }
58
- if (cisterns && !isArray(cisterns)) {
59
- throw new Error('cisterns is illegal');
60
- }
61
- if (cleanCounts && !isArray(cleanCounts)) {
62
- throw new Error('cleanCounts is illegal');
63
- }
64
- if (yMops && !isArray(yMops)) {
65
- throw new Error('yMops is illegal');
66
- }
67
- if (sweepMopModes && !isArray(sweepMopModes)) {
68
- throw new Error('sweepMopModes is illegal');
69
- }
70
- if (num !== suctions.length || num !== cisterns.length || num !== cleanCounts.length || num !== yMops.length || num !== sweepMopModes.length) {
71
- throw new Error('The length of the parameters is inconsistent');
72
- }
73
- const params = createSetCommonParams({
74
- deviceId: devId,
75
- reqType: SpotCleanEnum.set,
76
- message: {
77
- num,
78
- polygons: spots.map(spot => pointsToString([spot], origin)),
79
- suctions,
80
- cisterns,
81
- cleanCounts,
82
- yMops,
83
- sweepMopModes
84
- }
85
- });
86
- ty.device.sendMqttMessage(params);
87
- const {
88
- taskId
89
- } = params.message;
90
- return normalResolve(SpotCleanEnum.query, taskId);
91
- }
42
+ if (useMqtt) {
43
+ // if (!isArray(spots) || (isArray(spots) && spots.length === 0)) {
44
+ // return Promise.reject(new Error('message is required'));
45
+ // }
92
46
 
93
- // MQTT 模式:使用命令传输
94
- const command = encodeSpotClean0x16({
95
- version: commandVersion,
96
- origin,
97
- point: spots[0]
98
- });
99
- devices.common.model.actions.command_trans.set(command);
100
- return Promise.resolve({
101
- success: true,
102
- errCode: 0,
103
- reqType: SpotCleanEnum.query,
104
- version: commandVersion,
105
- taskId: `${Date.now()}`,
106
- polygons: spots.map(spot => pointsToString([spot], origin)),
107
- suctions: message.suctions,
108
- cisterns: message.cisterns,
109
- cleanCounts: message.cleanCounts,
110
- yMops: message.yMops,
111
- sweepMopModes: message.sweepMopModes
47
+ const num = spots.length;
48
+ const {
49
+ suctions = new Array(num).fill(''),
50
+ cisterns = new Array(num).fill(''),
51
+ cleanCounts = new Array(num).fill(1),
52
+ yMops = new Array(num).fill(-1),
53
+ sweepMopModes = new Array(num).fill('only_sweep')
54
+ } = message;
55
+ if (suctions && !isArray(suctions)) {
56
+ return Promise.reject(new Error('suctions is illegal'));
57
+ }
58
+ if (cisterns && !isArray(cisterns)) {
59
+ return Promise.reject(new Error('cisterns is illegal'));
60
+ }
61
+ if (cleanCounts && !isArray(cleanCounts)) {
62
+ return Promise.reject(new Error('cleanCounts is illegal'));
63
+ }
64
+ if (yMops && !isArray(yMops)) {
65
+ return Promise.reject(new Error('yMops is illegal'));
66
+ }
67
+ if (sweepMopModes && !isArray(sweepMopModes)) {
68
+ return Promise.reject(new Error('sweepMopModes is illegal'));
69
+ }
70
+ if (num !== suctions.length || num !== cisterns.length || num !== cleanCounts.length || num !== yMops.length || num !== sweepMopModes.length) {
71
+ return Promise.reject(new Error('The length of the parameters is inconsistent'));
72
+ }
73
+ const params = createSetCommonParams({
74
+ deviceId: devId,
75
+ reqType: SpotCleanEnum.set,
76
+ message: {
77
+ num,
78
+ polygons: spots.map(spot => pointsToString([spot], origin)),
79
+ suctions,
80
+ cisterns,
81
+ cleanCounts,
82
+ yMops,
83
+ sweepMopModes
84
+ }
112
85
  });
113
- } catch (error) {
114
- throw error instanceof Error ? error : new Error('Failed to set spot clean');
86
+ ty.device.sendMqttMessage(params);
87
+ return normalResolve(SpotCleanEnum.query, params.message.taskId);
115
88
  }
89
+ const command = encodeSpotClean0x16({
90
+ version: commandVersion,
91
+ origin,
92
+ point: spots[0]
93
+ });
94
+ devices.common.model.actions.command_trans.set(command);
95
+ return Promise.resolve();
116
96
  }
117
97
  };
118
98
  };
@@ -1,18 +1,21 @@
1
- import { BaseResponse, VirtualAreaEnum } from './type';
2
1
  import { Point, VirtualArea } from '@ray-js/robot-protocol';
3
- interface VirtualAreaResponse extends BaseResponse {
4
- reqType: VirtualAreaEnum.query;
2
+ type Response = {
3
+ reqType: 'restrictedAreaQry';
4
+ version: string;
5
5
  num: number;
6
6
  modes: number[];
7
7
  polygons: string[];
8
8
  names: string[];
9
9
  mapId: number;
10
- }
10
+ success: boolean;
11
+ errCode: number;
12
+ taskId: string;
13
+ };
11
14
  type TSetVirtualArea = (message: {
12
15
  data: VirtualArea[];
13
16
  origin: Point;
14
- }) => Promise<VirtualAreaResponse>;
15
- type TRequestVirtualArea = () => Promise<VirtualAreaResponse>;
17
+ }) => Promise<Response> | Promise<void>;
18
+ type TRequestVirtualArea = () => Promise<Response>;
16
19
  export declare const useVirtualArea: (devId: string) => {
17
20
  requestVirtualArea: TRequestVirtualArea;
18
21
  setVirtualArea: TSetVirtualArea;
@@ -1,6 +1,5 @@
1
1
  import "core-js/modules/esnext.iterator.constructor.js";
2
2
  import "core-js/modules/esnext.iterator.for-each.js";
3
- import "core-js/modules/esnext.iterator.map.js";
4
3
  // 添加禁区
5
4
  import { useContext } from 'react';
6
5
  import { createSetCommonParams } from './createCommonOptions';
@@ -9,9 +8,6 @@ import { VirtualAreaEnum } from './type';
9
8
  import { SingletonContext } from './mqttProvider';
10
9
  import { encodeVirtualArea0x1a, requestVirtualArea0x1b } from '@ray-js/robot-protocol';
11
10
  import { pointsToString } from '../utils';
12
-
13
- // 虚拟区域响应类型
14
-
15
11
  // 禁区
16
12
 
17
13
  export const useVirtualArea = devId => {
@@ -29,132 +25,66 @@ export const useVirtualArea = devId => {
29
25
  /**
30
26
  * 设置虚拟区域数据
31
27
  * @param message 包含虚拟区域设置参数的对象
32
- * @param message.data 虚拟区域的数据数组
33
- * @param message.origin 原点坐标
28
+ * @param message.polygons 多边形数组,每个元素为一个多边形的坐标字符串
29
+ * @param message.names 名称数组,每个元素为一个区域的名称
30
+ * @param message.modes 模式数组,每个元素为一个区域的模式,0:全禁,1:禁扫,2:禁拖
31
+ * @param message.num 虚拟区域的数量
34
32
  * @returns Promise<VirtualAreaResponse> 响应结果
35
33
  */
36
34
 
37
35
  return {
38
36
  requestVirtualArea: () => {
39
- try {
40
- if (useMqtt) {
41
- const params = createSetCommonParams({
42
- deviceId: devId,
43
- reqType: VirtualAreaEnum.query
44
- });
45
- ty.device.sendMqttMessage(params);
46
- const {
47
- taskId
48
- } = params.message;
49
- return normalResolve(VirtualAreaEnum.query, taskId);
50
- }
51
-
52
- // 非 MQTT 模式:使用命令传输
53
- devices.common.model.actions.command_trans.set(requestVirtualArea0x1b({
54
- version: commandVersion
55
- }));
56
-
57
- // 非 MQTT 模式下无法立即获取响应数据,返回默认响应
58
- return Promise.resolve({
59
- success: true,
60
- errCode: 0,
61
- reqType: VirtualAreaEnum.query,
62
- version: commandVersion,
63
- taskId: `${Date.now()}`,
64
- num: 0,
65
- modes: [],
66
- polygons: [],
67
- names: [],
68
- mapId: 0
37
+ if (useMqtt) {
38
+ const params = createSetCommonParams({
39
+ deviceId: devId,
40
+ reqType: VirtualAreaEnum.query
69
41
  });
70
- } catch (error) {
71
- return Promise.reject(error instanceof Error ? error : new Error('Failed to request virtual area'));
42
+ ty.device.sendMqttMessage(params);
43
+ return normalResolve(VirtualAreaEnum.query, params.message.taskId);
72
44
  }
45
+ return devices.common.model.actions.command_trans.set(requestVirtualArea0x1b({
46
+ version: commandVersion
47
+ }));
73
48
  },
74
49
  setVirtualArea: _ref => {
75
50
  let {
76
51
  data,
77
52
  origin
78
53
  } = _ref;
79
- // 参数验证
80
- if (!Array.isArray(data) || data.length === 0) {
81
- throw new Error('data is required and must be a non-empty array');
82
- }
83
- if (!origin || typeof origin.x !== 'number' || typeof origin.y !== 'number') {
84
- throw new Error('origin is required and must be a valid Point object with x and y properties');
85
- }
86
- try {
87
- if (useMqtt) {
88
- const names = [];
89
- const modes = [];
90
- const polygons = [];
91
- data.forEach(_ref2 => {
92
- let {
93
- points,
94
- name,
95
- mode
96
- } = _ref2;
97
- names.push(name);
98
- modes.push(mode);
99
- polygons.push(pointsToString(points, origin));
100
- });
101
- const params = createSetCommonParams({
102
- deviceId: devId,
103
- reqType: VirtualAreaEnum.set,
104
- message: {
105
- polygons,
106
- num: data.length,
107
- modes: modes,
108
- names: names
109
- }
110
- });
111
- ty.device.sendMqttMessage(params);
112
- const {
113
- taskId
114
- } = params.message;
115
- return normalResolve(VirtualAreaEnum.query, taskId);
116
- }
117
-
118
- // 非 MQTT 模式:使用命令传输
119
- const command = encodeVirtualArea0x1a({
120
- version: commandVersion,
121
- origin,
122
- virtualAreas: data
123
- });
124
- devices.common.model.actions.command_trans.set(command);
125
- const names = data.map(_ref3 => {
126
- let {
127
- name
128
- } = _ref3;
129
- return name;
130
- });
131
- const modes = data.map(_ref4 => {
54
+ if (useMqtt) {
55
+ const names = [];
56
+ const modes = [];
57
+ const polygons = [];
58
+ data.forEach(_ref2 => {
132
59
  let {
60
+ points,
61
+ name,
133
62
  mode
134
- } = _ref4;
135
- return mode;
136
- });
137
- const polygons = data.map(_ref5 => {
138
- let {
139
- points
140
- } = _ref5;
141
- return pointsToString(points, origin);
63
+ } = _ref2;
64
+ names.push(name);
65
+ modes.push(mode);
66
+ polygons.push(pointsToString(points, origin));
142
67
  });
143
- return Promise.resolve({
144
- success: true,
145
- errCode: 0,
146
- reqType: VirtualAreaEnum.query,
147
- version: commandVersion,
148
- taskId: `${Date.now()}`,
149
- num: data.length,
150
- modes,
151
- polygons,
152
- names,
153
- mapId: 0
68
+ const params = createSetCommonParams({
69
+ deviceId: devId,
70
+ reqType: VirtualAreaEnum.set,
71
+ message: {
72
+ polygons,
73
+ num: data.length,
74
+ modes: modes,
75
+ names: names
76
+ }
154
77
  });
155
- } catch (error) {
156
- throw error instanceof Error ? error : new Error('Failed to set virtual area');
78
+ ty.device.sendMqttMessage(params);
79
+ return normalResolve(VirtualAreaEnum.query, params.message.taskId);
157
80
  }
81
+ const command = encodeVirtualArea0x1a({
82
+ version: commandVersion,
83
+ origin,
84
+ virtualAreas: data
85
+ });
86
+ devices.common.model.actions.command_trans.set(command);
87
+ return Promise.resolve();
158
88
  }
159
89
  };
160
90
  };
@@ -1,23 +1,20 @@
1
- import { BaseResponse, VirtualWallEnum } from './type';
2
1
  import { Point } from '@ray-js/robot-protocol';
3
- interface VirtualWallResponse extends BaseResponse {
4
- reqType: VirtualWallEnum.query;
2
+ type Response = {
5
3
  modes: number[];
4
+ success: boolean;
5
+ errCode: number;
6
6
  num: number;
7
+ reqType: 'virtualWallQry';
7
8
  mapId: number;
9
+ version: string;
10
+ taskId: string;
8
11
  points: string[];
9
- }
10
- interface SetVirtualWallParams {
12
+ };
13
+ type TRequestVirtualWall = () => Promise<Response>;
14
+ type TSetVirtualWall = (params: {
11
15
  data: Point[][];
12
16
  origin: Point;
13
- }
14
- type TRequestVirtualWall = () => Promise<VirtualWallResponse>;
15
- type TSetVirtualWall = (params: SetVirtualWallParams) => Promise<VirtualWallResponse>;
16
- /**
17
- * 自定义 Hook,用于虚拟墙管理
18
- * @param devId 设备ID
19
- * @returns 包含 requestVirtualWall 和 setVirtualWall 函数的对象
20
- */
17
+ }) => Promise<Response> | Promise<void>;
21
18
  export declare const useVirtualWall: (devId: string) => {
22
19
  requestVirtualWall: TRequestVirtualWall;
23
20
  setVirtualWall: TSetVirtualWall;