@ray-js/robot-data-stream 0.0.10-beta-14 → 0.0.10-beta-16
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/constant.d.ts +3 -0
- package/lib/constant.js +29 -0
- package/lib/mqtt/mqttProvider.d.ts +18 -3
- package/lib/mqtt/mqttProvider.js +14 -4
- package/lib/mqtt/promise.js +1 -0
- package/lib/mqtt/useDevInfo.d.ts +5 -5
- package/lib/mqtt/useDevInfo.js +22 -9
- package/lib/mqtt/useHistoryMap.d.ts +1 -1
- package/lib/mqtt/useHistoryMap.js +61 -34
- package/lib/mqtt/usePartDivision.d.ts +1 -1
- package/lib/mqtt/usePartDivision.js +29 -10
- package/lib/mqtt/usePartMerge.d.ts +1 -1
- package/lib/mqtt/usePartMerge.js +24 -8
- package/lib/mqtt/usePassword.js +7 -0
- package/lib/mqtt/useQuiteHours.d.ts +3 -1
- package/lib/mqtt/useQuiteHours.js +42 -21
- package/lib/mqtt/useResetMap.d.ts +1 -1
- package/lib/mqtt/useResetMap.js +20 -6
- package/lib/mqtt/useRoomProperty.js +7 -0
- package/lib/mqtt/useSchedule.d.ts +1 -1
- package/lib/mqtt/useSchedule.js +53 -9
- package/lib/mqtt/useSelectRoomClean.d.ts +8 -8
- package/lib/mqtt/useSelectRoomClean.js +62 -53
- package/lib/mqtt/useSpotClean.d.ts +4 -3
- package/lib/mqtt/useSpotClean.js +68 -48
- package/lib/mqtt/useVirtualArea.d.ts +4 -5
- package/lib/mqtt/useVirtualArea.js +60 -49
- package/lib/mqtt/useVirtualWall.d.ts +5 -5
- package/lib/mqtt/useVirtualWall.js +45 -40
- package/lib/mqtt/useVoice.js +23 -9
- package/lib/mqtt/useZoneClean.d.ts +4 -3
- package/lib/mqtt/useZoneClean.js +89 -55
- package/package.json +6 -4
package/lib/mqtt/useSchedule.js
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
|
+
import "core-js/modules/esnext.iterator.map.js";
|
|
1
2
|
// 定时
|
|
3
|
+
import { useContext } from 'react';
|
|
2
4
|
import { createSetCommonParams } from './createCommonOptions';
|
|
3
5
|
import { normalResolve } from './promise';
|
|
4
6
|
import { ScheduleEnum } from './type';
|
|
7
|
+
import { SingletonContext } from './mqttProvider';
|
|
8
|
+
import { encodeDeviceTimer0x30 } from '@ray-js/robot-protocol';
|
|
9
|
+
import { CISTERN_MAP, CLEAN_MODE_MAP, SUCTION_MAP } from '../constant';
|
|
5
10
|
|
|
6
11
|
// 定时任务
|
|
7
12
|
|
|
8
13
|
export const useSchedule = devId => {
|
|
14
|
+
const {
|
|
15
|
+
useStructuredMode,
|
|
16
|
+
devices,
|
|
17
|
+
commandVersion
|
|
18
|
+
} = useContext(SingletonContext);
|
|
9
19
|
// 请求定时数据
|
|
10
20
|
|
|
11
21
|
// 下发定时数据
|
|
@@ -23,16 +33,50 @@ export const useSchedule = devId => {
|
|
|
23
33
|
return normalResolve(ScheduleEnum.query, taskId);
|
|
24
34
|
},
|
|
25
35
|
setSchedule: message => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
if (useStructuredMode) {
|
|
37
|
+
const params = createSetCommonParams({
|
|
38
|
+
deviceId: devId,
|
|
39
|
+
reqType: ScheduleEnum.set,
|
|
40
|
+
message
|
|
41
|
+
});
|
|
42
|
+
ty.device.sendMqttMessage(params);
|
|
43
|
+
const {
|
|
44
|
+
taskId
|
|
45
|
+
} = params.message;
|
|
46
|
+
return normalResolve(ScheduleEnum.query, taskId);
|
|
47
|
+
}
|
|
48
|
+
const command = encodeDeviceTimer0x30({
|
|
49
|
+
version: commandVersion,
|
|
50
|
+
number: message.num,
|
|
51
|
+
list: message.list.map(_ref => {
|
|
52
|
+
let {
|
|
53
|
+
active,
|
|
54
|
+
suctions,
|
|
55
|
+
sweepMopModes,
|
|
56
|
+
ids,
|
|
57
|
+
cleanCounts,
|
|
58
|
+
cycle,
|
|
59
|
+
cisterns,
|
|
60
|
+
time
|
|
61
|
+
} = _ref;
|
|
62
|
+
return {
|
|
63
|
+
effectiveness: active,
|
|
64
|
+
cleanMode: CLEAN_MODE_MAP[sweepMopModes[0]],
|
|
65
|
+
fanLevel: SUCTION_MAP[suctions[0]],
|
|
66
|
+
waterLevel: CISTERN_MAP[cisterns[0]],
|
|
67
|
+
time: {
|
|
68
|
+
hour: time[0],
|
|
69
|
+
minute: time[1]
|
|
70
|
+
},
|
|
71
|
+
week: cycle,
|
|
72
|
+
sweepCount: cleanCounts[0],
|
|
73
|
+
roomIds: ids,
|
|
74
|
+
roomNum: ids.length
|
|
75
|
+
};
|
|
76
|
+
})
|
|
30
77
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
taskId
|
|
34
|
-
} = params.message;
|
|
35
|
-
return normalResolve(ScheduleEnum.query, taskId);
|
|
78
|
+
devices.common.model.actions.device_timer.set(command);
|
|
79
|
+
return Promise.resolve();
|
|
36
80
|
}
|
|
37
81
|
};
|
|
38
82
|
};
|
|
@@ -11,14 +11,14 @@ type Response = {
|
|
|
11
11
|
yMops?: number[];
|
|
12
12
|
sweepMopModes?: string[];
|
|
13
13
|
};
|
|
14
|
-
type TSetRoomClean = (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}) => Promise<Response>;
|
|
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>;
|
|
22
22
|
export declare const useSelectRoomClean: (devId: string) => {
|
|
23
23
|
requestSelectRoomClean: () => Promise<Response>;
|
|
24
24
|
setRoomClean: TSetRoomClean;
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
import "core-js/modules/esnext.iterator.constructor.js";
|
|
2
|
+
import "core-js/modules/esnext.iterator.for-each.js";
|
|
3
|
+
import "core-js/modules/esnext.iterator.map.js";
|
|
1
4
|
// 选区清扫
|
|
2
|
-
import { isArray } from 'lodash-es';
|
|
3
5
|
import { createSetCommonParams } from './createCommonOptions';
|
|
4
6
|
import { RoomCleanSetEnum } from './type';
|
|
5
7
|
import { normalResolve } from './promise';
|
|
8
|
+
import { useContext } from 'react';
|
|
9
|
+
import { SingletonContext } from './mqttProvider';
|
|
10
|
+
import { encodeRoomClean0x14, requestRoomClean0x15 } from '@ray-js/robot-protocol';
|
|
6
11
|
export const useSelectRoomClean = devId => {
|
|
12
|
+
const {
|
|
13
|
+
useStructuredMode,
|
|
14
|
+
commandVersion,
|
|
15
|
+
devices
|
|
16
|
+
} = useContext(SingletonContext);
|
|
17
|
+
|
|
7
18
|
// 请求选区清扫信息
|
|
8
19
|
|
|
9
20
|
// 设置选区清扫
|
|
@@ -11,61 +22,59 @@ export const useSelectRoomClean = devId => {
|
|
|
11
22
|
|
|
12
23
|
return {
|
|
13
24
|
requestSelectRoomClean: () => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
setRoomClean: message => {
|
|
22
|
-
const {
|
|
23
|
-
ids
|
|
24
|
-
} = message;
|
|
25
|
-
if (!isArray(ids) || isArray(ids) && ids.length === 0) {
|
|
26
|
-
return Promise.reject(new Error('ids is required'));
|
|
27
|
-
}
|
|
28
|
-
const num = ids.length;
|
|
29
|
-
const {
|
|
30
|
-
suctions = new Array(num).fill(''),
|
|
31
|
-
cisterns = new Array(num).fill(''),
|
|
32
|
-
cleanCounts = new Array(num).fill(1),
|
|
33
|
-
yMops = new Array(num).fill(-1),
|
|
34
|
-
sweepMopModes = new Array(num).fill('only_sweep')
|
|
35
|
-
} = message;
|
|
36
|
-
if (suctions && !isArray(suctions)) {
|
|
37
|
-
return Promise.reject(new Error('suctions is illegal'));
|
|
38
|
-
}
|
|
39
|
-
if (cisterns && !isArray(cisterns)) {
|
|
40
|
-
return Promise.reject(new Error('cisterns is illegal'));
|
|
25
|
+
if (useStructuredMode) {
|
|
26
|
+
const params = createSetCommonParams({
|
|
27
|
+
deviceId: devId,
|
|
28
|
+
reqType: RoomCleanSetEnum.query
|
|
29
|
+
});
|
|
30
|
+
ty.device.sendMqttMessage(params);
|
|
31
|
+
return normalResolve(RoomCleanSetEnum.query, params.message.taskId);
|
|
41
32
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
33
|
+
return devices.common.model.actions.command_trans.set(requestRoomClean0x15({
|
|
34
|
+
version: commandVersion
|
|
35
|
+
}));
|
|
36
|
+
},
|
|
37
|
+
setRoomClean: rooms => {
|
|
38
|
+
var _rooms$0$cleanTimes, _rooms$;
|
|
39
|
+
if (useStructuredMode) {
|
|
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');
|
|
54
|
+
});
|
|
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
|
+
}
|
|
67
|
+
});
|
|
68
|
+
ty.device.sendMqttMessage(params);
|
|
69
|
+
return normalResolve(RoomCleanSetEnum.query, params.message.taskId);
|
|
53
70
|
}
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
ids,
|
|
59
|
-
suctions,
|
|
60
|
-
cisterns,
|
|
61
|
-
cleanCounts,
|
|
62
|
-
yMops,
|
|
63
|
-
sweepMopModes,
|
|
64
|
-
num: ids.length
|
|
65
|
-
}
|
|
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
|
|
66
75
|
});
|
|
67
|
-
|
|
68
|
-
return
|
|
76
|
+
devices.common.model.actions.command_trans.set(command);
|
|
77
|
+
return Promise.resolve();
|
|
69
78
|
}
|
|
70
79
|
};
|
|
71
80
|
};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { RoomPreference } from './type';
|
|
2
|
+
import { Point } from '@ray-js/robot-protocol';
|
|
2
3
|
type Response = Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
|
|
3
4
|
polygons: string[];
|
|
4
5
|
names?: string[];
|
|
5
6
|
};
|
|
6
7
|
type TSetSpotClean = (message: Partial<Pick<RoomPreference, 'suctions' | 'cisterns' | 'cleanCounts' | 'yMops' | 'sweepMopModes'>> & {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}) => Promise<Response>;
|
|
8
|
+
spots: Point[];
|
|
9
|
+
origin?: Point;
|
|
10
|
+
}) => Promise<Response | void>;
|
|
10
11
|
/**
|
|
11
12
|
* 定点清扫
|
|
12
13
|
* @returns
|
package/lib/mqtt/useSpotClean.js
CHANGED
|
@@ -4,11 +4,21 @@ import { isArray } from 'lodash-es';
|
|
|
4
4
|
import { createSetCommonParams } from './createCommonOptions';
|
|
5
5
|
import { normalResolve } from './promise';
|
|
6
6
|
import { SpotCleanEnum } from './type';
|
|
7
|
+
import { useContext } from 'react';
|
|
8
|
+
import { SingletonContext } from './mqttProvider';
|
|
9
|
+
import { encodeSpotClean0x16 } from '@ray-js/robot-protocol';
|
|
10
|
+
import { pointsToString } from '../utils';
|
|
7
11
|
/**
|
|
8
12
|
* 定点清扫
|
|
9
13
|
* @returns
|
|
10
14
|
*/
|
|
11
15
|
export const useSpotClean = devId => {
|
|
16
|
+
const {
|
|
17
|
+
useStructuredMode,
|
|
18
|
+
commandVersion,
|
|
19
|
+
devices
|
|
20
|
+
} = useContext(SingletonContext);
|
|
21
|
+
|
|
12
22
|
// 请求定点清扫数据
|
|
13
23
|
|
|
14
24
|
// 设置定点清扫
|
|
@@ -25,57 +35,67 @@ export const useSpotClean = devId => {
|
|
|
25
35
|
},
|
|
26
36
|
setSpotClean: message => {
|
|
27
37
|
const {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (!isArray(polygons) || isArray(polygons) && polygons.length === 0) {
|
|
31
|
-
return Promise.reject(new Error('message is required'));
|
|
32
|
-
}
|
|
33
|
-
const num = polygons.length;
|
|
34
|
-
const {
|
|
35
|
-
suctions = new Array(num).fill(''),
|
|
36
|
-
cisterns = new Array(num).fill(''),
|
|
37
|
-
cleanCounts = new Array(num).fill(1),
|
|
38
|
-
yMops = new Array(num).fill(-1),
|
|
39
|
-
sweepMopModes = new Array(num).fill('only_sweep'),
|
|
40
|
-
names = new Array(num).fill('')
|
|
38
|
+
spots,
|
|
39
|
+
origin
|
|
41
40
|
} = message;
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
suctions,
|
|
70
|
-
cisterns,
|
|
71
|
-
cleanCounts,
|
|
72
|
-
yMops,
|
|
73
|
-
sweepMopModes,
|
|
74
|
-
names
|
|
41
|
+
if (useStructuredMode) {
|
|
42
|
+
if (!isArray(spots) || isArray(spots) && spots.length === 0) {
|
|
43
|
+
return Promise.reject(new Error('message is required'));
|
|
44
|
+
}
|
|
45
|
+
const num = spots.length;
|
|
46
|
+
const {
|
|
47
|
+
suctions = new Array(num).fill(''),
|
|
48
|
+
cisterns = new Array(num).fill(''),
|
|
49
|
+
cleanCounts = new Array(num).fill(1),
|
|
50
|
+
yMops = new Array(num).fill(-1),
|
|
51
|
+
sweepMopModes = new Array(num).fill('only_sweep')
|
|
52
|
+
} = message;
|
|
53
|
+
const names = new Array(num).fill('');
|
|
54
|
+
if (suctions && !isArray(suctions)) {
|
|
55
|
+
return Promise.reject(new Error('suctions is illegal'));
|
|
56
|
+
}
|
|
57
|
+
if (cisterns && !isArray(cisterns)) {
|
|
58
|
+
return Promise.reject(new Error('cisterns is illegal'));
|
|
59
|
+
}
|
|
60
|
+
if (cleanCounts && !isArray(cleanCounts)) {
|
|
61
|
+
return Promise.reject(new Error('cleanCounts is illegal'));
|
|
62
|
+
}
|
|
63
|
+
if (yMops && !isArray(yMops)) {
|
|
64
|
+
return Promise.reject(new Error('yMops is illegal'));
|
|
65
|
+
}
|
|
66
|
+
if (sweepMopModes && !isArray(sweepMopModes)) {
|
|
67
|
+
return Promise.reject(new Error('sweepMopModes is illegal'));
|
|
75
68
|
}
|
|
69
|
+
if (names && !isArray(names)) {
|
|
70
|
+
return Promise.reject(new Error('names is illegal'));
|
|
71
|
+
}
|
|
72
|
+
if (num !== suctions.length || num !== cisterns.length || num !== cleanCounts.length || num !== yMops.length || num !== sweepMopModes.length || num !== names.length) {
|
|
73
|
+
return Promise.reject(new Error('The length of the parameters is inconsistent'));
|
|
74
|
+
}
|
|
75
|
+
const params = createSetCommonParams({
|
|
76
|
+
deviceId: devId,
|
|
77
|
+
reqType: SpotCleanEnum.set,
|
|
78
|
+
message: {
|
|
79
|
+
num,
|
|
80
|
+
polygons: [pointsToString(spots, origin)],
|
|
81
|
+
suctions,
|
|
82
|
+
cisterns,
|
|
83
|
+
cleanCounts,
|
|
84
|
+
yMops,
|
|
85
|
+
sweepMopModes,
|
|
86
|
+
names
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
ty.device.sendMqttMessage(params);
|
|
90
|
+
return normalResolve(SpotCleanEnum.query, params.message.taskId);
|
|
91
|
+
}
|
|
92
|
+
const command = encodeSpotClean0x16({
|
|
93
|
+
version: commandVersion,
|
|
94
|
+
origin,
|
|
95
|
+
point: spots[0]
|
|
76
96
|
});
|
|
77
|
-
|
|
78
|
-
return
|
|
97
|
+
devices.common.model.actions.command_trans.set(command);
|
|
98
|
+
return Promise.resolve();
|
|
79
99
|
}
|
|
80
100
|
};
|
|
81
101
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Point, VirtualArea } from '@ray-js/robot-protocol';
|
|
1
2
|
type Response = {
|
|
2
3
|
reqType: 'restrictedAreaQry';
|
|
3
4
|
version: string;
|
|
@@ -11,11 +12,9 @@ type Response = {
|
|
|
11
12
|
taskId: string;
|
|
12
13
|
};
|
|
13
14
|
type TSetVirtualArea = (message: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
num?: number;
|
|
18
|
-
}) => Promise<Response>;
|
|
15
|
+
data: VirtualArea[];
|
|
16
|
+
origin: Point;
|
|
17
|
+
}) => Promise<Response> | Promise<void>;
|
|
19
18
|
type TRequestVirtualArea = () => Promise<Response>;
|
|
20
19
|
export declare const useVirtualArea: (devId: string) => {
|
|
21
20
|
requestVirtualArea: TRequestVirtualArea;
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
import "core-js/modules/esnext.iterator.constructor.js";
|
|
2
|
+
import "core-js/modules/esnext.iterator.for-each.js";
|
|
1
3
|
// 添加禁区
|
|
4
|
+
import { useContext } from 'react';
|
|
2
5
|
import { createSetCommonParams } from './createCommonOptions';
|
|
3
6
|
import { normalResolve } from './promise';
|
|
4
7
|
import { VirtualAreaEnum } from './type';
|
|
5
|
-
import {
|
|
8
|
+
import { SingletonContext } from './mqttProvider';
|
|
9
|
+
import { encodeVirtualArea0x1a, requestVirtualArea0x1b } from '@ray-js/robot-protocol';
|
|
10
|
+
import { pointsToString } from '../utils';
|
|
6
11
|
// 禁区
|
|
7
12
|
|
|
8
13
|
export const useVirtualArea = devId => {
|
|
14
|
+
const {
|
|
15
|
+
useStructuredMode,
|
|
16
|
+
commandVersion,
|
|
17
|
+
devices
|
|
18
|
+
} = useContext(SingletonContext);
|
|
19
|
+
|
|
9
20
|
/**
|
|
10
21
|
* 请求虚拟区域数据
|
|
11
22
|
* @returns Promise<VirtualAreaResponse> 响应结果
|
|
@@ -23,57 +34,57 @@ export const useVirtualArea = devId => {
|
|
|
23
34
|
|
|
24
35
|
return {
|
|
25
36
|
requestVirtualArea: () => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
setVirtualArea: message => {
|
|
34
|
-
const {
|
|
35
|
-
polygons,
|
|
36
|
-
num,
|
|
37
|
-
modes,
|
|
38
|
-
names
|
|
39
|
-
} = message || {};
|
|
40
|
-
if (!isArray(polygons) || isArray(polygons) && polygons.length === 0) {
|
|
41
|
-
return Promise.reject(new Error('message polygons is required'));
|
|
42
|
-
}
|
|
43
|
-
const len = polygons.length;
|
|
44
|
-
if (!isArray(message.modes) || isArray(message.modes) && message.modes.length === 0) {
|
|
45
|
-
return Promise.reject(new Error('message modes is required'));
|
|
46
|
-
}
|
|
47
|
-
if (num && !Number.isInteger(num)) {
|
|
48
|
-
return Promise.reject(new Error('num is illegal'));
|
|
37
|
+
if (useStructuredMode) {
|
|
38
|
+
const params = createSetCommonParams({
|
|
39
|
+
deviceId: devId,
|
|
40
|
+
reqType: VirtualAreaEnum.query
|
|
41
|
+
});
|
|
42
|
+
ty.device.sendMqttMessage(params);
|
|
43
|
+
return normalResolve(VirtualAreaEnum.query, params.message.taskId);
|
|
49
44
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
return devices.common.model.actions.command_trans.set(requestVirtualArea0x1b({
|
|
46
|
+
version: commandVersion
|
|
47
|
+
}));
|
|
48
|
+
},
|
|
49
|
+
setVirtualArea: _ref => {
|
|
50
|
+
let {
|
|
51
|
+
data,
|
|
52
|
+
origin
|
|
53
|
+
} = _ref;
|
|
54
|
+
if (useStructuredMode) {
|
|
55
|
+
const names = [];
|
|
56
|
+
const modes = [];
|
|
57
|
+
const polygons = [];
|
|
58
|
+
data.forEach(_ref2 => {
|
|
59
|
+
let {
|
|
60
|
+
points,
|
|
61
|
+
name,
|
|
62
|
+
mode
|
|
63
|
+
} = _ref2;
|
|
64
|
+
names.push(name);
|
|
65
|
+
modes.push(mode);
|
|
66
|
+
polygons.push(pointsToString(points, origin));
|
|
67
|
+
});
|
|
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
|
+
}
|
|
77
|
+
});
|
|
78
|
+
ty.device.sendMqttMessage(params);
|
|
79
|
+
return normalResolve(VirtualAreaEnum.query, params.message.taskId);
|
|
64
80
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
polygons,
|
|
70
|
-
num: num || len,
|
|
71
|
-
modes: modes || new Array(len).fill(0),
|
|
72
|
-
names: names || new Array(len).fill('')
|
|
73
|
-
}
|
|
81
|
+
const command = encodeVirtualArea0x1a({
|
|
82
|
+
version: commandVersion,
|
|
83
|
+
origin,
|
|
84
|
+
virtualAreas: data
|
|
74
85
|
});
|
|
75
|
-
|
|
76
|
-
return
|
|
86
|
+
devices.common.model.actions.command_trans.set(command);
|
|
87
|
+
return Promise.resolve();
|
|
77
88
|
}
|
|
78
89
|
};
|
|
79
90
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Point } from '@ray-js/robot-protocol';
|
|
1
2
|
type Response = {
|
|
2
3
|
modes: number[];
|
|
3
4
|
success: boolean;
|
|
@@ -10,11 +11,10 @@ type Response = {
|
|
|
10
11
|
points: string[];
|
|
11
12
|
};
|
|
12
13
|
type TRequestVirtualWall = () => Promise<Response>;
|
|
13
|
-
type TSetVirtualWall = (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}) => Promise<Response>;
|
|
14
|
+
type TSetVirtualWall = (params: {
|
|
15
|
+
data: Point[][];
|
|
16
|
+
origin: Point;
|
|
17
|
+
}) => Promise<Response> | Promise<void>;
|
|
18
18
|
export declare const useVirtualWall: (devId: string) => {
|
|
19
19
|
requestVirtualWall: TRequestVirtualWall;
|
|
20
20
|
setVirtualWall: TSetVirtualWall;
|
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "core-js/modules/esnext.iterator.map.js";
|
|
2
2
|
// 虚拟墙数据
|
|
3
3
|
|
|
4
|
+
import { useContext } from 'react';
|
|
4
5
|
import { createSetCommonParams } from './createCommonOptions';
|
|
5
6
|
import { normalResolve } from './promise';
|
|
6
7
|
import { VirtualWallEnum } from './type';
|
|
7
|
-
import {
|
|
8
|
+
import { SingletonContext } from './mqttProvider';
|
|
9
|
+
import { encodeVirtualWall0x12, requestVirtualWall0x13 } from '@ray-js/robot-protocol';
|
|
10
|
+
import { pointsToString } from '../utils';
|
|
8
11
|
export const useVirtualWall = devId => {
|
|
12
|
+
const {
|
|
13
|
+
useStructuredMode,
|
|
14
|
+
commandVersion,
|
|
15
|
+
devices
|
|
16
|
+
} = useContext(SingletonContext);
|
|
17
|
+
|
|
9
18
|
// 请求虚拟墙数据
|
|
10
19
|
|
|
11
20
|
/**
|
|
@@ -19,47 +28,43 @@ export const useVirtualWall = devId => {
|
|
|
19
28
|
|
|
20
29
|
return {
|
|
21
30
|
requestVirtualWall: () => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
setVirtualWall: message => {
|
|
30
|
-
const requestParams = _objectSpread({}, message);
|
|
31
|
-
if (!isArray(requestParams.points) || requestParams.points.length === 0) {
|
|
32
|
-
return Promise.reject(new Error('points is illegal'));
|
|
33
|
-
}
|
|
34
|
-
const len = requestParams.points.length;
|
|
35
|
-
if (requestParams.num && !Number.isInteger(requestParams.num)) {
|
|
36
|
-
return Promise.reject(new Error('num is illegal'));
|
|
31
|
+
if (useStructuredMode) {
|
|
32
|
+
const params = createSetCommonParams({
|
|
33
|
+
deviceId: devId,
|
|
34
|
+
reqType: VirtualWallEnum.query
|
|
35
|
+
});
|
|
36
|
+
ty.device.sendMqttMessage(params);
|
|
37
|
+
return normalResolve(VirtualWallEnum.query, params.message.taskId);
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
return devices.common.model.actions.command_trans.set(requestVirtualWall0x13({
|
|
40
|
+
version: commandVersion
|
|
41
|
+
}));
|
|
42
|
+
},
|
|
43
|
+
setVirtualWall: _ref => {
|
|
44
|
+
let {
|
|
45
|
+
data,
|
|
46
|
+
origin
|
|
47
|
+
} = _ref;
|
|
48
|
+
if (useStructuredMode) {
|
|
49
|
+
const params = createSetCommonParams({
|
|
50
|
+
deviceId: devId,
|
|
51
|
+
reqType: VirtualWallEnum.set,
|
|
52
|
+
message: {
|
|
53
|
+
points: data.map(points => pointsToString(points, origin)),
|
|
54
|
+
num: data.length,
|
|
55
|
+
mode: new Array(data.length).fill('0')
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
ty.device.sendMqttMessage(params);
|
|
59
|
+
return normalResolve(VirtualWallEnum.query, params.message.taskId);
|
|
46
60
|
}
|
|
47
|
-
const {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
} = requestParams;
|
|
52
|
-
const params = createSetCommonParams({
|
|
53
|
-
deviceId: devId,
|
|
54
|
-
reqType: VirtualWallEnum.set,
|
|
55
|
-
message: {
|
|
56
|
-
points,
|
|
57
|
-
num: num || len,
|
|
58
|
-
mode: mode || new Array(len).fill(-1)
|
|
59
|
-
}
|
|
61
|
+
const command = encodeVirtualWall0x12({
|
|
62
|
+
version: commandVersion,
|
|
63
|
+
origin,
|
|
64
|
+
walls: data
|
|
60
65
|
});
|
|
61
|
-
|
|
62
|
-
return
|
|
66
|
+
devices.common.model.actions.command_trans.set(command);
|
|
67
|
+
return Promise.resolve();
|
|
63
68
|
}
|
|
64
69
|
};
|
|
65
70
|
};
|