@ray-js/robot-data-stream 0.0.13-beta-10 → 0.0.13-beta-11
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 +52 -0
- package/lib/constant.js +54 -0
- package/lib/mqtt/createCommonOptions.d.ts +56 -15
- package/lib/mqtt/createCommonOptions.js +44 -8
- package/lib/mqtt/index.d.ts +5 -1
- package/lib/mqtt/index.js +5 -1
- package/lib/mqtt/mqttProvider.d.ts +23 -15
- package/lib/mqtt/mqttProvider.js +63 -26
- package/lib/mqtt/promise.js +8 -3
- package/lib/mqtt/type/index.d.ts +9 -0
- package/lib/mqtt/type/index.js +8 -0
- package/lib/mqtt/type/requestType.d.ts +21 -0
- package/lib/mqtt/type/requestType.js +32 -0
- package/lib/mqtt/useCarpet.d.ts +39 -0
- package/lib/mqtt/useCarpet.js +169 -0
- package/lib/mqtt/useCarpetClean.d.ts +18 -0
- package/lib/mqtt/useCarpetClean.js +75 -0
- package/lib/mqtt/useDevInfo.d.ts +2 -7
- package/lib/mqtt/useDevInfo.js +25 -9
- package/lib/mqtt/useDeviceModel.d.ts +22 -0
- package/lib/mqtt/useDeviceModel.js +60 -0
- package/lib/mqtt/useFurnitureModel.d.ts +21 -0
- package/lib/mqtt/useFurnitureModel.js +61 -0
- package/lib/mqtt/useHistoryMap.d.ts +13 -21
- package/lib/mqtt/useHistoryMap.js +82 -32
- package/lib/mqtt/usePartDivision.d.ts +5 -7
- package/lib/mqtt/usePartDivision.js +41 -16
- package/lib/mqtt/usePartMerge.d.ts +5 -7
- package/lib/mqtt/usePartMerge.js +36 -18
- package/lib/mqtt/usePassword.js +59 -28
- package/lib/mqtt/useQuiteHours.d.ts +9 -24
- package/lib/mqtt/useQuiteHours.js +95 -52
- package/lib/mqtt/useResetMap.d.ts +10 -7
- package/lib/mqtt/useResetMap.js +40 -11
- package/lib/mqtt/useRoomProperty.js +23 -16
- package/lib/mqtt/useSchedule.d.ts +17 -4
- package/lib/mqtt/useSchedule.js +101 -49
- package/lib/mqtt/useSelectRoomClean.d.ts +20 -16
- package/lib/mqtt/useSelectRoomClean.js +145 -49
- package/lib/mqtt/useSpotClean.d.ts +3 -3
- package/lib/mqtt/useSpotClean.js +71 -7
- package/lib/mqtt/useVirtualArea.d.ts +6 -9
- package/lib/mqtt/useVirtualArea.js +112 -42
- package/lib/mqtt/useVirtualWall.d.ts +13 -10
- package/lib/mqtt/useVirtualWall.js +97 -34
- package/lib/mqtt/useVoice.d.ts +3 -6
- package/lib/mqtt/useVoice.js +73 -33
- package/lib/mqtt/useWifiMap.js +34 -18
- package/lib/mqtt/useZoneClean.d.ts +13 -13
- package/lib/mqtt/useZoneClean.js +149 -76
- package/lib/ttt/index.d.ts +153 -0
- package/lib/ttt/index.js +458 -0
- package/lib/utils/index.d.ts +21 -2
- package/lib/utils/index.js +20 -1
- package/package.json +1 -1
- package/lib/mqtt/myError.d.ts +0 -4
- package/lib/mqtt/myError.js +0 -6
package/lib/constant.d.ts
CHANGED
|
@@ -1,3 +1,55 @@
|
|
|
1
1
|
export declare const SUCTION_MAP: Record<string, number>;
|
|
2
2
|
export declare const CISTERN_MAP: Record<string, number>;
|
|
3
3
|
export declare const CLEAN_MODE_MAP: Record<string, number>;
|
|
4
|
+
export declare enum FileNameEnum {
|
|
5
|
+
map = "map.bin",
|
|
6
|
+
mapStructured = "map_structured.bin",
|
|
7
|
+
cleanPath = "cleanPath.bin",
|
|
8
|
+
mapStream = "map.bin.stream",
|
|
9
|
+
mapStructuredStream = "map_structured.bin.stream",
|
|
10
|
+
cleanPathStream = "cleanPath.bin.stream",
|
|
11
|
+
ai = "ai.bin",
|
|
12
|
+
aiStream = "ai.bin.stream",
|
|
13
|
+
aiHD = "aiHD_XXXX_YYYY.bin",
|
|
14
|
+
aiHDStream = "aiHD_XXXX_YYYY.bin.stream",
|
|
15
|
+
wifiMap = "wifi_map.bin",
|
|
16
|
+
wifiMapStream = "wifi_map.bin.stream"
|
|
17
|
+
}
|
|
18
|
+
export declare const FILE_NAME_MAP: {
|
|
19
|
+
readonly "map.bin": {
|
|
20
|
+
readonly type: 0;
|
|
21
|
+
};
|
|
22
|
+
readonly "map_structured.bin": {
|
|
23
|
+
readonly type: 6;
|
|
24
|
+
};
|
|
25
|
+
readonly "cleanPath.bin": {
|
|
26
|
+
readonly type: 1;
|
|
27
|
+
};
|
|
28
|
+
readonly "map.bin.stream": {
|
|
29
|
+
readonly type: 0;
|
|
30
|
+
};
|
|
31
|
+
readonly "map_structured.bin.stream": {
|
|
32
|
+
readonly type: 6;
|
|
33
|
+
};
|
|
34
|
+
readonly "cleanPath.bin.stream": {
|
|
35
|
+
readonly type: 1;
|
|
36
|
+
};
|
|
37
|
+
readonly "ai.bin": {
|
|
38
|
+
readonly type: 4;
|
|
39
|
+
};
|
|
40
|
+
readonly "ai.bin.stream": {
|
|
41
|
+
readonly type: 4;
|
|
42
|
+
};
|
|
43
|
+
readonly "aiHD_XXXX_YYYY.bin": {
|
|
44
|
+
readonly type: 5;
|
|
45
|
+
};
|
|
46
|
+
readonly "aiHD_XXXX_YYYY.bin.stream": {
|
|
47
|
+
readonly type: 5;
|
|
48
|
+
};
|
|
49
|
+
readonly "wifi_map.bin": {
|
|
50
|
+
readonly type: 7;
|
|
51
|
+
};
|
|
52
|
+
readonly "wifi_map.bin.stream": {
|
|
53
|
+
readonly type: 7;
|
|
54
|
+
};
|
|
55
|
+
};
|
package/lib/constant.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "core-js/modules/esnext.iterator.map.js";
|
|
1
2
|
// 吸力
|
|
2
3
|
export const SUCTION_MAP = {
|
|
3
4
|
closed: 0,
|
|
@@ -26,4 +27,57 @@ export const CLEAN_MODE_MAP = {
|
|
|
26
27
|
// 先扫后拖
|
|
27
28
|
clean_before_mop: 3,
|
|
28
29
|
sweep_after_mop: 3
|
|
30
|
+
};
|
|
31
|
+
export let FileNameEnum = /*#__PURE__*/function (FileNameEnum) {
|
|
32
|
+
FileNameEnum["map"] = "map.bin";
|
|
33
|
+
FileNameEnum["mapStructured"] = "map_structured.bin";
|
|
34
|
+
FileNameEnum["cleanPath"] = "cleanPath.bin";
|
|
35
|
+
FileNameEnum["mapStream"] = "map.bin.stream";
|
|
36
|
+
FileNameEnum["mapStructuredStream"] = "map_structured.bin.stream";
|
|
37
|
+
FileNameEnum["cleanPathStream"] = "cleanPath.bin.stream";
|
|
38
|
+
FileNameEnum["ai"] = "ai.bin";
|
|
39
|
+
FileNameEnum["aiStream"] = "ai.bin.stream";
|
|
40
|
+
FileNameEnum["aiHD"] = "aiHD_XXXX_YYYY.bin";
|
|
41
|
+
FileNameEnum["aiHDStream"] = "aiHD_XXXX_YYYY.bin.stream";
|
|
42
|
+
FileNameEnum["wifiMap"] = "wifi_map.bin";
|
|
43
|
+
FileNameEnum["wifiMapStream"] = "wifi_map.bin.stream";
|
|
44
|
+
return FileNameEnum;
|
|
45
|
+
}({});
|
|
46
|
+
export const FILE_NAME_MAP = {
|
|
47
|
+
[FileNameEnum.map]: {
|
|
48
|
+
type: 0
|
|
49
|
+
},
|
|
50
|
+
[FileNameEnum.mapStructured]: {
|
|
51
|
+
type: 6
|
|
52
|
+
},
|
|
53
|
+
[FileNameEnum.cleanPath]: {
|
|
54
|
+
type: 1
|
|
55
|
+
},
|
|
56
|
+
[FileNameEnum.mapStream]: {
|
|
57
|
+
type: 0
|
|
58
|
+
},
|
|
59
|
+
[FileNameEnum.mapStructuredStream]: {
|
|
60
|
+
type: 6
|
|
61
|
+
},
|
|
62
|
+
[FileNameEnum.cleanPathStream]: {
|
|
63
|
+
type: 1
|
|
64
|
+
},
|
|
65
|
+
[FileNameEnum.ai]: {
|
|
66
|
+
type: 4
|
|
67
|
+
},
|
|
68
|
+
[FileNameEnum.aiStream]: {
|
|
69
|
+
type: 4
|
|
70
|
+
},
|
|
71
|
+
[FileNameEnum.aiHD]: {
|
|
72
|
+
type: 5
|
|
73
|
+
},
|
|
74
|
+
[FileNameEnum.aiHDStream]: {
|
|
75
|
+
type: 5
|
|
76
|
+
},
|
|
77
|
+
[FileNameEnum.wifiMap]: {
|
|
78
|
+
type: 7
|
|
79
|
+
},
|
|
80
|
+
[FileNameEnum.wifiMapStream]: {
|
|
81
|
+
type: 7
|
|
82
|
+
}
|
|
29
83
|
};
|
|
@@ -1,24 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { ProtocolEnum } from './type';
|
|
2
|
+
/**
|
|
3
|
+
* MQTT 消息体类型
|
|
4
|
+
*/
|
|
5
|
+
export interface MqttMessage {
|
|
6
|
+
reqType: string;
|
|
7
|
+
version: string;
|
|
8
|
+
taskId: string;
|
|
9
|
+
[key: string]: string | number | string[] | number[] | boolean | null | undefined | Record<string, any>;
|
|
3
10
|
}
|
|
4
|
-
|
|
11
|
+
/**
|
|
12
|
+
* MQTT 选项类型
|
|
13
|
+
*/
|
|
14
|
+
export interface MqttOptions {
|
|
5
15
|
[key: string]: string;
|
|
6
16
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
17
|
+
/**
|
|
18
|
+
* 创建通用参数的输入参数
|
|
19
|
+
*/
|
|
20
|
+
export interface CreateSetCommonParamsInput {
|
|
21
|
+
/** 设备ID */
|
|
12
22
|
deviceId: string;
|
|
23
|
+
/** 请求类型 */
|
|
13
24
|
reqType: string;
|
|
14
|
-
|
|
25
|
+
/** 消息体(可选) */
|
|
26
|
+
message?: Partial<MqttMessage>;
|
|
27
|
+
/** 版本号(可选,默认为 1.0.0) */
|
|
15
28
|
version?: string;
|
|
16
|
-
|
|
29
|
+
/** 选项(可选) */
|
|
30
|
+
options?: MqttOptions;
|
|
17
31
|
}
|
|
18
|
-
|
|
32
|
+
/**
|
|
33
|
+
* 创建通用参数的返回类型
|
|
34
|
+
*/
|
|
35
|
+
export interface CreateSetCommonParamsOutput {
|
|
36
|
+
/** 设备ID */
|
|
19
37
|
deviceId: string;
|
|
20
|
-
|
|
21
|
-
|
|
38
|
+
/** 消息体 */
|
|
39
|
+
message: MqttMessage;
|
|
40
|
+
/** 选项 */
|
|
41
|
+
options: MqttOptions;
|
|
42
|
+
/** 协议号 */
|
|
22
43
|
protocol: ProtocolEnum;
|
|
23
|
-
}
|
|
24
|
-
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 创建 MQTT 通用参数
|
|
47
|
+
*
|
|
48
|
+
* @param params - 参数对象
|
|
49
|
+
* @param params.deviceId - 设备ID
|
|
50
|
+
* @param params.reqType - 请求类型
|
|
51
|
+
* @param params.message - 消息体(可选)
|
|
52
|
+
* @param params.version - 版本号(可选,默认为 1.0.0)
|
|
53
|
+
* @param params.options - 选项(可选)
|
|
54
|
+
* @returns MQTT 通用参数对象
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const params = createSetCommonParams({
|
|
59
|
+
* deviceId: 'device123',
|
|
60
|
+
* reqType: 'devInfoQry',
|
|
61
|
+
* message: { customField: 'value' }
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare const createSetCommonParams: ({ deviceId, reqType, message, version, options, }: CreateSetCommonParamsInput) => CreateSetCommonParamsOutput;
|
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { ProtocolEnum } from './type';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* MQTT 消息默认版本号
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_VERSION = '1.0.0';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* MQTT 消息体类型
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* MQTT 选项类型
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 创建通用参数的输入参数
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 创建通用参数的返回类型
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 创建 MQTT 通用参数
|
|
27
|
+
*
|
|
28
|
+
* @param params - 参数对象
|
|
29
|
+
* @param params.deviceId - 设备ID
|
|
30
|
+
* @param params.reqType - 请求类型
|
|
31
|
+
* @param params.message - 消息体(可选)
|
|
32
|
+
* @param params.version - 版本号(可选,默认为 1.0.0)
|
|
33
|
+
* @param params.options - 选项(可选)
|
|
34
|
+
* @returns MQTT 通用参数对象
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const params = createSetCommonParams({
|
|
39
|
+
* deviceId: 'device123',
|
|
40
|
+
* reqType: 'devInfoQry',
|
|
41
|
+
* message: { customField: 'value' }
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
9
45
|
export const createSetCommonParams = _ref => {
|
|
10
46
|
let {
|
|
11
47
|
deviceId,
|
|
12
48
|
reqType,
|
|
13
49
|
message = {},
|
|
14
|
-
version =
|
|
50
|
+
version = DEFAULT_VERSION,
|
|
15
51
|
options = {}
|
|
16
52
|
} = _ref;
|
|
17
53
|
const taskId = Date.now();
|
package/lib/mqtt/index.d.ts
CHANGED
|
@@ -15,4 +15,8 @@ import { useHistoryMap } from './useHistoryMap';
|
|
|
15
15
|
import { useVoice } from './useVoice';
|
|
16
16
|
import { useRoomProperty } from './useRoomProperty';
|
|
17
17
|
import { useResetMap } from './useResetMap';
|
|
18
|
-
|
|
18
|
+
import { useCarpet } from './useCarpet';
|
|
19
|
+
import { useCarpetClean } from './useCarpetClean';
|
|
20
|
+
import { useDeviceModel } from './useDeviceModel';
|
|
21
|
+
import { useFurnitureModel } from './useFurnitureModel';
|
|
22
|
+
export { useCarpet, useCarpetClean, useVoice, MqttProvider, useDeviceModel, useFurnitureModel, useDevInfo, usePartMerge, usePartDivision, usePassword, useWifiMap, useQuiteHours, useVirtualArea, useSpotClean, useZoneClean, useSelectRoomClean, useVirtualWall, useSchedule, useHistoryMap, useRoomProperty, useResetMap, };
|
package/lib/mqtt/index.js
CHANGED
|
@@ -15,4 +15,8 @@ import { useHistoryMap } from './useHistoryMap';
|
|
|
15
15
|
import { useVoice } from './useVoice';
|
|
16
16
|
import { useRoomProperty } from './useRoomProperty';
|
|
17
17
|
import { useResetMap } from './useResetMap';
|
|
18
|
-
|
|
18
|
+
import { useCarpet } from './useCarpet';
|
|
19
|
+
import { useCarpetClean } from './useCarpetClean';
|
|
20
|
+
import { useDeviceModel } from './useDeviceModel';
|
|
21
|
+
import { useFurnitureModel } from './useFurnitureModel';
|
|
22
|
+
export { useCarpet, useCarpetClean, useVoice, MqttProvider, useDeviceModel, useFurnitureModel, useDevInfo, usePartMerge, usePartDivision, usePassword, useWifiMap, useQuiteHours, useVirtualArea, useSpotClean, useZoneClean, useSelectRoomClean, useVirtualWall, useSchedule, useHistoryMap, useRoomProperty, useResetMap };
|
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export
|
|
2
|
+
export interface MqttContextValue {
|
|
3
3
|
useMqtt: boolean;
|
|
4
4
|
commandVersion: '0' | '1';
|
|
5
5
|
devices: {
|
|
6
|
-
common:
|
|
6
|
+
common: {
|
|
7
|
+
getDevInfo: () => {
|
|
8
|
+
devId: string;
|
|
9
|
+
};
|
|
10
|
+
model: {
|
|
11
|
+
props?: any;
|
|
12
|
+
actions: {
|
|
13
|
+
[dpCode: string]: {
|
|
14
|
+
set: (command: string) => void;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
};
|
|
7
19
|
};
|
|
8
|
-
}
|
|
9
|
-
export declare
|
|
20
|
+
}
|
|
21
|
+
export declare const SingletonContext: React.Context<MqttContextValue | null>;
|
|
22
|
+
export interface MqttProviderProps {
|
|
23
|
+
children: React.ReactNode;
|
|
10
24
|
useMqtt: boolean;
|
|
11
|
-
commandVersion:
|
|
12
|
-
devices:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
export declare function MqttProvider({ children, useMqtt, commandVersion, devices }: {
|
|
17
|
-
children: any;
|
|
18
|
-
useMqtt: any;
|
|
19
|
-
commandVersion: any;
|
|
20
|
-
devices: any;
|
|
21
|
-
}): React.JSX.Element;
|
|
25
|
+
commandVersion: '0' | '1';
|
|
26
|
+
devices: MqttContextValue['devices'];
|
|
27
|
+
}
|
|
28
|
+
export declare function useMqtt(): MqttContextValue;
|
|
29
|
+
export declare function MqttProvider({ children, useMqtt, commandVersion, devices }: MqttProviderProps): React.JSX.Element;
|
package/lib/mqtt/mqttProvider.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
2
|
import { get, isNil } from 'lodash-es';
|
|
3
|
-
import React, { createContext, useCallback, useContext,
|
|
3
|
+
import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { emitter } from '../utils';
|
|
5
|
+
import { ProtocolEnum } from './type';
|
|
6
|
+
|
|
7
|
+
// Context 类型定义
|
|
5
8
|
|
|
6
9
|
// 创建一个Context
|
|
7
10
|
export const SingletonContext = /*#__PURE__*/createContext(null);
|
|
8
11
|
|
|
12
|
+
// MqttProvider Props 类型定义
|
|
13
|
+
|
|
14
|
+
// MQTT 消息数据类型
|
|
15
|
+
|
|
9
16
|
// 创建一个自定义Hook来使用这个Context
|
|
10
17
|
export function useMqtt() {
|
|
11
18
|
const context = useContext(SingletonContext);
|
|
@@ -21,50 +28,80 @@ export function MqttProvider(_ref) {
|
|
|
21
28
|
commandVersion,
|
|
22
29
|
devices
|
|
23
30
|
} = _ref;
|
|
24
|
-
|
|
31
|
+
// 使用 useMemo 创建实例,确保只在依赖项变化时重新创建
|
|
32
|
+
const instance = useMemo(() => ({
|
|
33
|
+
useMqtt,
|
|
34
|
+
commandVersion,
|
|
35
|
+
devices
|
|
36
|
+
}), [useMqtt, commandVersion, devices]);
|
|
37
|
+
|
|
38
|
+
// 使用 ref 存储设备 ID 和初始化状态,避免重复初始化
|
|
39
|
+
const devIdRef = useRef(null);
|
|
40
|
+
const isInitializedRef = useRef(false);
|
|
41
|
+
|
|
42
|
+
// MQTT 消息处理回调
|
|
25
43
|
const onMqttMessageReceived = useCallback(data => {
|
|
44
|
+
var _messageData$errCode;
|
|
26
45
|
const {
|
|
27
46
|
messageData
|
|
28
47
|
} = data || {};
|
|
29
48
|
const reqType = get(messageData, 'reqType', '');
|
|
30
49
|
if (!reqType) return;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
|
|
51
|
+
// 确保消息数据包含 success 和 errCode 字段
|
|
52
|
+
// errCode: 0 表示成功,非 0 表示失败
|
|
53
|
+
// success: true 表示成功,false 表示失败
|
|
54
|
+
const errCode = (_messageData$errCode = messageData === null || messageData === void 0 ? void 0 : messageData.errCode) !== null && _messageData$errCode !== void 0 ? _messageData$errCode : (messageData === null || messageData === void 0 ? void 0 : messageData.success) === false ? -1 : 0;
|
|
55
|
+
const success = isNil(messageData === null || messageData === void 0 ? void 0 : messageData.success) ? errCode === 0 : messageData.success;
|
|
56
|
+
const responseData = _objectSpread(_objectSpread({}, messageData), {}, {
|
|
57
|
+
success,
|
|
58
|
+
errCode
|
|
59
|
+
});
|
|
60
|
+
emitter.emit(reqType, responseData);
|
|
37
61
|
}, []);
|
|
38
62
|
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
63
|
+
// 初始化 MQTT 监听器(只执行一次)
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
// 防止重复初始化
|
|
66
|
+
if (isInitializedRef.current) return;
|
|
67
|
+
|
|
68
|
+
// 获取设备 ID
|
|
69
|
+
try {
|
|
70
|
+
const devInfo = devices.common.getDevInfo();
|
|
71
|
+
devIdRef.current = devInfo.devId;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.error('Failed to get device info:', error);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const devId = devIdRef.current;
|
|
77
|
+
if (!devId) {
|
|
78
|
+
console.error('Device ID is not available');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 注册 MQTT 协议监听器
|
|
45
83
|
ty.device.registerMQTTProtocolListener({
|
|
46
|
-
protocol:
|
|
84
|
+
protocol: ProtocolEnum.robotToApp,
|
|
47
85
|
success: () => {
|
|
48
86
|
console.log('注册mqtt成功');
|
|
87
|
+
},
|
|
88
|
+
fail: error => {
|
|
89
|
+
console.error('注册mqtt失败:', error);
|
|
49
90
|
}
|
|
50
91
|
});
|
|
92
|
+
|
|
93
|
+
// 注册 MQTT 消息接收监听器
|
|
51
94
|
ty.device.onMqttMessageReceived(data => {
|
|
52
95
|
if (data.deviceId === devId) {
|
|
53
96
|
onMqttMessageReceived(data);
|
|
54
97
|
}
|
|
55
98
|
});
|
|
56
|
-
instanceRef.current = {
|
|
57
|
-
// 是否走mqtt64/65通道
|
|
58
|
-
useMqtt,
|
|
59
|
-
// 指令协议版本(1byte or 4bytes)
|
|
60
|
-
commandVersion,
|
|
61
|
-
// sdm
|
|
62
|
-
devices
|
|
63
|
-
};
|
|
64
|
-
setInstance(instanceRef.current);
|
|
65
|
-
}
|
|
66
99
|
|
|
67
|
-
|
|
100
|
+
// 标记为已初始化
|
|
101
|
+
isInitializedRef.current = true;
|
|
102
|
+
}, [devices, onMqttMessageReceived]);
|
|
103
|
+
|
|
104
|
+
// 将实例作为 value 传递给消费组件
|
|
68
105
|
return /*#__PURE__*/React.createElement(SingletonContext.Provider, {
|
|
69
106
|
value: instance
|
|
70
107
|
}, children);
|
package/lib/mqtt/promise.js
CHANGED
|
@@ -13,7 +13,7 @@ class MyError extends Error {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
// 2. 定义 Message
|
|
16
|
+
// 2. 定义 Message 类型(兼容 MQTT 响应格式)
|
|
17
17
|
|
|
18
18
|
// 3. 定义 PromiseWithRejection 类型
|
|
19
19
|
|
|
@@ -28,15 +28,20 @@ export function normalResolve(reqType, taskId) {
|
|
|
28
28
|
}));
|
|
29
29
|
}, 10 * 1000);
|
|
30
30
|
const handle = message => {
|
|
31
|
+
var _message$errCode;
|
|
32
|
+
// 通过 taskId 匹配响应
|
|
31
33
|
if (`${message.taskId}` !== `${taskId}`) {
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
34
36
|
clearTimeout(timer);
|
|
35
|
-
|
|
37
|
+
|
|
38
|
+
// 优先使用 errCode,如果没有则使用 success 字段判断
|
|
39
|
+
const errCode = (_message$errCode = message.errCode) !== null && _message$errCode !== void 0 ? _message$errCode : message.success === false ? -1 : 0;
|
|
40
|
+
if (errCode === 0) {
|
|
36
41
|
resolve(message);
|
|
37
42
|
} else {
|
|
38
43
|
reject(new MyError('Request failed', {
|
|
39
|
-
errCode
|
|
44
|
+
errCode,
|
|
40
45
|
reqType
|
|
41
46
|
}));
|
|
42
47
|
}
|
package/lib/mqtt/type/index.d.ts
CHANGED
|
@@ -6,6 +6,15 @@ export interface BaseResponse {
|
|
|
6
6
|
version: string;
|
|
7
7
|
taskId: string;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* MQTT 协议号枚举
|
|
11
|
+
*/
|
|
12
|
+
export declare enum ProtocolEnum {
|
|
13
|
+
/** 面板下发 */
|
|
14
|
+
appToRobot = 64,
|
|
15
|
+
/** 设备上报 */
|
|
16
|
+
robotToApp = 65
|
|
17
|
+
}
|
|
9
18
|
export declare enum PasswordEnum {
|
|
10
19
|
query = "passwordQry",
|
|
11
20
|
set = "passwordSet",
|
package/lib/mqtt/type/index.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
export * from './requestType';
|
|
2
2
|
// 设备接口响应的统一标准结构
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* MQTT 协议号枚举
|
|
6
|
+
*/
|
|
7
|
+
export let ProtocolEnum = /*#__PURE__*/function (ProtocolEnum) {
|
|
8
|
+
ProtocolEnum[ProtocolEnum["appToRobot"] = 64] = "appToRobot";
|
|
9
|
+
ProtocolEnum[ProtocolEnum["robotToApp"] = 65] = "robotToApp";
|
|
10
|
+
return ProtocolEnum;
|
|
11
|
+
}({});
|
|
4
12
|
export let PasswordEnum = /*#__PURE__*/function (PasswordEnum) {
|
|
5
13
|
PasswordEnum["query"] = "passwordQry";
|
|
6
14
|
PasswordEnum["set"] = "passwordSet";
|
|
@@ -70,3 +70,24 @@ export declare enum UseMapEnum {
|
|
|
70
70
|
query = "useMapRst",
|
|
71
71
|
set = "useMapSet"
|
|
72
72
|
}
|
|
73
|
+
export declare enum DevInfoEnum {
|
|
74
|
+
query = "devInfoQry"
|
|
75
|
+
}
|
|
76
|
+
export declare enum FurnitureModelEnum {
|
|
77
|
+
query = "modelQry",
|
|
78
|
+
set = "setFurnitureModel"
|
|
79
|
+
}
|
|
80
|
+
export declare enum DeviceModelEnum {
|
|
81
|
+
query = "deviceModelQry",
|
|
82
|
+
set = "setDeviceModel"
|
|
83
|
+
}
|
|
84
|
+
export declare enum CarpetEnum {
|
|
85
|
+
add = "addCarpet",
|
|
86
|
+
update = "updateCarpet",
|
|
87
|
+
delete = "removeCarpet",
|
|
88
|
+
query = "carpetQry"
|
|
89
|
+
}
|
|
90
|
+
export declare enum CarpetCleanEnum {
|
|
91
|
+
query = "carpetCleanQry",
|
|
92
|
+
set = "carpetCleanSet"
|
|
93
|
+
}
|
|
@@ -104,4 +104,36 @@ export let UseMapEnum = /*#__PURE__*/function (UseMapEnum) {
|
|
|
104
104
|
UseMapEnum["query"] = "useMapRst";
|
|
105
105
|
UseMapEnum["set"] = "useMapSet";
|
|
106
106
|
return UseMapEnum;
|
|
107
|
+
}({});
|
|
108
|
+
export let DevInfoEnum = /*#__PURE__*/function (DevInfoEnum) {
|
|
109
|
+
DevInfoEnum["query"] = "devInfoQry";
|
|
110
|
+
return DevInfoEnum;
|
|
111
|
+
}({});
|
|
112
|
+
|
|
113
|
+
// 家具模型枚举
|
|
114
|
+
export let FurnitureModelEnum = /*#__PURE__*/function (FurnitureModelEnum) {
|
|
115
|
+
FurnitureModelEnum["query"] = "modelQry";
|
|
116
|
+
FurnitureModelEnum["set"] = "setFurnitureModel";
|
|
117
|
+
return FurnitureModelEnum;
|
|
118
|
+
}({});
|
|
119
|
+
|
|
120
|
+
// 设备模型枚举
|
|
121
|
+
export let DeviceModelEnum = /*#__PURE__*/function (DeviceModelEnum) {
|
|
122
|
+
DeviceModelEnum["query"] = "deviceModelQry";
|
|
123
|
+
DeviceModelEnum["set"] = "setDeviceModel";
|
|
124
|
+
return DeviceModelEnum;
|
|
125
|
+
}({});
|
|
126
|
+
export let CarpetEnum = /*#__PURE__*/function (CarpetEnum) {
|
|
127
|
+
CarpetEnum["add"] = "addCarpet";
|
|
128
|
+
CarpetEnum["update"] = "updateCarpet";
|
|
129
|
+
CarpetEnum["delete"] = "removeCarpet";
|
|
130
|
+
CarpetEnum["query"] = "carpetQry";
|
|
131
|
+
return CarpetEnum;
|
|
132
|
+
}({});
|
|
133
|
+
|
|
134
|
+
// 地毯清洁模式
|
|
135
|
+
export let CarpetCleanEnum = /*#__PURE__*/function (CarpetCleanEnum) {
|
|
136
|
+
CarpetCleanEnum["query"] = "carpetCleanQry";
|
|
137
|
+
CarpetCleanEnum["set"] = "carpetCleanSet";
|
|
138
|
+
return CarpetCleanEnum;
|
|
107
139
|
}({});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { BaseResponse } from './type';
|
|
2
|
+
import { CarpetEnum } from './type/requestType';
|
|
3
|
+
interface AddCarpetInput {
|
|
4
|
+
shape: ('rectangle' | 'round')[];
|
|
5
|
+
polygons: string[];
|
|
6
|
+
num: number;
|
|
7
|
+
type: number[];
|
|
8
|
+
cleanMode: number[];
|
|
9
|
+
}
|
|
10
|
+
interface AddCarpetResponse extends BaseResponse {
|
|
11
|
+
reqType: CarpetEnum.add;
|
|
12
|
+
id: number;
|
|
13
|
+
}
|
|
14
|
+
type TAddCarpet = (carpetInfo: AddCarpetInput) => Promise<AddCarpetResponse>;
|
|
15
|
+
interface UpdateCarpetInfo {
|
|
16
|
+
ids: number[];
|
|
17
|
+
shape?: ('rectangle' | 'round')[];
|
|
18
|
+
type?: number[];
|
|
19
|
+
cleanMode?: number[];
|
|
20
|
+
}
|
|
21
|
+
type TUpdateCarpet = (carpetInfo: UpdateCarpetInfo) => Promise<BaseResponse>;
|
|
22
|
+
type TDeleteCarpet = (carpetIds: number[]) => Promise<BaseResponse>;
|
|
23
|
+
interface CarpetQueryResponse extends BaseResponse {
|
|
24
|
+
reqType: CarpetEnum.query;
|
|
25
|
+
num: number;
|
|
26
|
+
polygons: string[];
|
|
27
|
+
cleanMode: number[];
|
|
28
|
+
shape: string[];
|
|
29
|
+
type: number[];
|
|
30
|
+
ids: number[];
|
|
31
|
+
}
|
|
32
|
+
type TQueryCarpet = () => Promise<CarpetQueryResponse>;
|
|
33
|
+
export declare const useCarpet: (devId: string) => {
|
|
34
|
+
addCarpet: TAddCarpet;
|
|
35
|
+
updateCarpet: TUpdateCarpet;
|
|
36
|
+
deleteCarpet: TDeleteCarpet;
|
|
37
|
+
queryCarpet: TQueryCarpet;
|
|
38
|
+
};
|
|
39
|
+
export {};
|