@ray-js/robot-data-stream 0.0.13-beta-7 → 0.0.13-beta-9
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.
- package/lib/api/index.d.ts +2 -12
- package/lib/api/index.js +1 -172
- package/lib/api/p2pApi.d.ts +8 -27
- package/lib/api/p2pApi.js +271 -169
- package/lib/api/sweeperP2p.d.ts +55 -21
- package/lib/api/sweeperP2p.js +376 -246
- package/lib/constant.d.ts +0 -52
- package/lib/constant.js +0 -54
- package/lib/index.d.ts +12 -1
- package/lib/index.js +187 -2
- package/lib/mqtt/createCommonOptions.d.ts +15 -56
- package/lib/mqtt/createCommonOptions.js +8 -44
- package/lib/mqtt/mqttProvider.d.ts +15 -23
- package/lib/mqtt/mqttProvider.js +26 -63
- package/lib/mqtt/myError.d.ts +4 -0
- package/lib/mqtt/myError.js +6 -0
- package/lib/mqtt/promise.js +3 -8
- package/lib/mqtt/type/index.d.ts +0 -9
- package/lib/mqtt/type/index.js +0 -8
- package/lib/mqtt/type/requestType.d.ts +0 -3
- package/lib/mqtt/type/requestType.js +0 -4
- package/lib/mqtt/useDevInfo.d.ts +7 -2
- package/lib/mqtt/useDevInfo.js +9 -25
- package/lib/mqtt/useHistoryMap.d.ts +21 -13
- package/lib/mqtt/useHistoryMap.js +32 -82
- package/lib/mqtt/usePartDivision.d.ts +7 -5
- package/lib/mqtt/usePartDivision.js +16 -41
- package/lib/mqtt/usePartMerge.d.ts +7 -5
- package/lib/mqtt/usePartMerge.js +18 -36
- package/lib/mqtt/usePassword.js +28 -59
- package/lib/mqtt/useQuiteHours.d.ts +24 -9
- package/lib/mqtt/useQuiteHours.js +52 -95
- package/lib/mqtt/useResetMap.d.ts +7 -10
- package/lib/mqtt/useResetMap.js +11 -40
- package/lib/mqtt/useRoomProperty.js +16 -23
- package/lib/mqtt/useSchedule.d.ts +4 -17
- package/lib/mqtt/useSchedule.js +49 -101
- package/lib/mqtt/useSelectRoomClean.d.ts +16 -20
- package/lib/mqtt/useSelectRoomClean.js +49 -145
- package/lib/mqtt/useSpotClean.d.ts +3 -3
- package/lib/mqtt/useSpotClean.js +51 -71
- package/lib/mqtt/useVirtualArea.d.ts +9 -6
- package/lib/mqtt/useVirtualArea.js +42 -112
- package/lib/mqtt/useVirtualWall.d.ts +10 -13
- package/lib/mqtt/useVirtualWall.js +34 -97
- package/lib/mqtt/useVoice.d.ts +6 -3
- package/lib/mqtt/useVoice.js +33 -73
- package/lib/mqtt/useWifiMap.js +18 -34
- package/lib/mqtt/useZoneClean.d.ts +13 -13
- package/lib/mqtt/useZoneClean.js +76 -149
- package/lib/utils/index.d.ts +7 -18
- package/lib/utils/index.js +13 -15
- package/package.json +1 -1
- package/lib/ttt/index.d.ts +0 -153
- package/lib/ttt/index.js +0 -458
package/lib/mqtt/useSchedule.js
CHANGED
|
@@ -8,51 +8,39 @@ import { SingletonContext } from './mqttProvider';
|
|
|
8
8
|
import { encodeDeviceTimer0x30 } from '@ray-js/robot-protocol';
|
|
9
9
|
import { CISTERN_MAP, CLEAN_MODE_MAP, SUCTION_MAP } from '../constant';
|
|
10
10
|
|
|
11
|
-
//
|
|
11
|
+
// 定时任务
|
|
12
12
|
|
|
13
|
-
// 定时任务数据
|
|
14
|
-
|
|
15
|
-
// 定时任务响应类型
|
|
16
|
-
|
|
17
|
-
// 请求定时数据函数类型定义
|
|
18
|
-
|
|
19
|
-
// 设置定时数据函数类型定义
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* 自定义 Hook,用于定时任务
|
|
23
|
-
* @param devId 设备ID
|
|
24
|
-
* @returns 包含 requestSchedule 和 setSchedule 函数的对象
|
|
25
|
-
*/
|
|
26
13
|
export const useSchedule = devId => {
|
|
27
14
|
const {
|
|
28
15
|
useMqtt,
|
|
29
16
|
devices,
|
|
30
17
|
commandVersion
|
|
31
18
|
} = useContext(SingletonContext);
|
|
32
|
-
|
|
33
|
-
* 请求定时数据
|
|
34
|
-
* @param message 可选参数,包含版本号
|
|
35
|
-
* @returns Promise<ScheduleResponse> 响应结果
|
|
36
|
-
*/
|
|
19
|
+
// 请求定时数据
|
|
37
20
|
|
|
38
|
-
|
|
39
|
-
* 设置定时数据
|
|
40
|
-
* @param message 定时任务数据
|
|
41
|
-
* @returns Promise<ScheduleResponse> 响应结果
|
|
42
|
-
*/
|
|
21
|
+
// 下发定时数据
|
|
43
22
|
|
|
44
23
|
return {
|
|
45
24
|
requestSchedule: function () {
|
|
46
25
|
let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
47
26
|
version: '1.0.0'
|
|
48
27
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
28
|
+
const params = createSetCommonParams({
|
|
29
|
+
deviceId: devId,
|
|
30
|
+
reqType: ScheduleEnum.query,
|
|
31
|
+
message
|
|
32
|
+
});
|
|
33
|
+
ty.device.sendMqttMessage(params);
|
|
34
|
+
const {
|
|
35
|
+
taskId
|
|
36
|
+
} = params.message;
|
|
37
|
+
return normalResolve(ScheduleEnum.query, taskId);
|
|
38
|
+
},
|
|
39
|
+
setSchedule: message => {
|
|
40
|
+
if (useMqtt) {
|
|
53
41
|
const params = createSetCommonParams({
|
|
54
42
|
deviceId: devId,
|
|
55
|
-
reqType: ScheduleEnum.
|
|
43
|
+
reqType: ScheduleEnum.set,
|
|
56
44
|
message
|
|
57
45
|
});
|
|
58
46
|
ty.device.sendMqttMessage(params);
|
|
@@ -60,79 +48,39 @@ export const useSchedule = devId => {
|
|
|
60
48
|
taskId
|
|
61
49
|
} = params.message;
|
|
62
50
|
return normalResolve(ScheduleEnum.query, taskId);
|
|
63
|
-
} catch (error) {
|
|
64
|
-
return Promise.reject(error instanceof Error ? error : new Error('Failed to request schedule'));
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
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
|
|
84
|
-
});
|
|
85
|
-
ty.device.sendMqttMessage(params);
|
|
86
|
-
const {
|
|
87
|
-
taskId
|
|
88
|
-
} = params.message;
|
|
89
|
-
return normalResolve(ScheduleEnum.query, taskId);
|
|
90
|
-
}
|
|
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
51
|
}
|
|
52
|
+
const command = encodeDeviceTimer0x30({
|
|
53
|
+
version: commandVersion,
|
|
54
|
+
number: message.num,
|
|
55
|
+
list: message.list.map(_ref => {
|
|
56
|
+
let {
|
|
57
|
+
active,
|
|
58
|
+
suctions,
|
|
59
|
+
sweepMopModes,
|
|
60
|
+
ids,
|
|
61
|
+
cleanCounts,
|
|
62
|
+
cycle,
|
|
63
|
+
cisterns,
|
|
64
|
+
time
|
|
65
|
+
} = _ref;
|
|
66
|
+
return {
|
|
67
|
+
effectiveness: active,
|
|
68
|
+
cleanMode: CLEAN_MODE_MAP[sweepMopModes[0]],
|
|
69
|
+
fanLevel: SUCTION_MAP[suctions[0]],
|
|
70
|
+
waterLevel: CISTERN_MAP[cisterns[0]],
|
|
71
|
+
time: {
|
|
72
|
+
hour: time[0],
|
|
73
|
+
minute: time[1]
|
|
74
|
+
},
|
|
75
|
+
week: cycle,
|
|
76
|
+
sweepCount: cleanCounts[0],
|
|
77
|
+
roomIds: ids,
|
|
78
|
+
roomNum: ids.length
|
|
79
|
+
};
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
devices.common.model.actions.device_timer.set(command);
|
|
83
|
+
return Promise.resolve();
|
|
136
84
|
}
|
|
137
85
|
};
|
|
138
86
|
};
|
|
@@ -1,30 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
yMop?: number;
|
|
8
|
-
sweepMopMode?: string;
|
|
9
|
-
}
|
|
10
|
-
interface RoomCleanResponse extends BaseResponse {
|
|
11
|
-
reqType: RoomCleanSetEnum.query;
|
|
1
|
+
type Response = {
|
|
2
|
+
reqType: string;
|
|
3
|
+
version: string;
|
|
4
|
+
success: boolean;
|
|
5
|
+
errCode: number;
|
|
6
|
+
taskId: string;
|
|
12
7
|
ids: number[];
|
|
13
8
|
suctions?: string[];
|
|
14
9
|
cisterns?: string[];
|
|
15
10
|
cleanCounts?: number[];
|
|
16
11
|
yMops?: number[];
|
|
17
12
|
sweepMopModes?: string[];
|
|
18
|
-
}
|
|
19
|
-
type TSetRoomClean = (rooms:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
};
|
|
14
|
+
type TSetRoomClean = (rooms: {
|
|
15
|
+
roomId: number;
|
|
16
|
+
suction?: string;
|
|
17
|
+
cistern: string;
|
|
18
|
+
cleanTimes?: number;
|
|
19
|
+
yMop?: number;
|
|
20
|
+
sweepMopMode?: string;
|
|
21
|
+
}[]) => Promise<Response> | Promise<void>;
|
|
26
22
|
export declare const useSelectRoomClean: (devId: string) => {
|
|
27
|
-
requestSelectRoomClean:
|
|
23
|
+
requestSelectRoomClean: () => Promise<Response>;
|
|
28
24
|
setRoomClean: TSetRoomClean;
|
|
29
25
|
};
|
|
30
26
|
export {};
|
|
@@ -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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
79
|
-
return
|
|
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 (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
155
|
-
|
|
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 {
|
|
1
|
+
import { RoomPreference } from './type';
|
|
2
2
|
import { Point } from '@ray-js/robot-protocol';
|
|
3
|
-
type Response =
|
|
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
|
package/lib/mqtt/useSpotClean.js
CHANGED
|
@@ -39,80 +39,60 @@ export const useSpotClean = devId => {
|
|
|
39
39
|
spots,
|
|
40
40
|
origin
|
|
41
41
|
} = message;
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
114
|
-
|
|
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
|
-
|
|
4
|
-
reqType:
|
|
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<
|
|
15
|
-
type TRequestVirtualArea = () => Promise<
|
|
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;
|