@ray-js/robot-data-stream 0.0.17-beta.7 → 0.0.17-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.
@@ -0,0 +1,2 @@
1
+ import type { SetCruiseData } from './type/protocols/cruiseProtocol';
2
+ export declare const createCruisePayload: (message: SetCruiseData) => SetCruiseData;
@@ -0,0 +1,9 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ export const createCruisePayload = message => {
3
+ if (message.polygons && message.num === undefined) {
4
+ return _objectSpread(_objectSpread({}, message), {}, {
5
+ num: message.polygons.length
6
+ });
7
+ }
8
+ return message;
9
+ };
@@ -21,5 +21,6 @@ import { useDeviceModel } from './useDeviceModel';
21
21
  import { useFurnitureModel } from './useFurnitureModel';
22
22
  import { usePurifierSchedule } from './usePurifierSchedule';
23
23
  import { useCruise } from './useCruise';
24
+ import { useSpotPolygons } from './useSpotPolygons';
24
25
  import { useMcsRoomInfo } from './useMcsRoomInfo';
25
- export { useCarpet, useCarpetClean, useVoice, MqttProvider, useDeviceModel, useFurnitureModel, useDevInfo, usePartMerge, usePartDivision, usePassword, useWifiMap, useQuiteHours, useVirtualArea, useSpotClean, useZoneClean, useSelectRoomClean, useVirtualWall, useSchedule, useHistoryMap, useRoomProperty, useResetMap, usePurifierSchedule, useCruise, useMcsRoomInfo, };
26
+ export { useCarpet, useCarpetClean, useVoice, MqttProvider, useDeviceModel, useFurnitureModel, useDevInfo, usePartMerge, usePartDivision, usePassword, useWifiMap, useQuiteHours, useVirtualArea, useSpotClean, useZoneClean, useSelectRoomClean, useVirtualWall, useSchedule, useHistoryMap, useRoomProperty, useResetMap, usePurifierSchedule, useCruise, useSpotPolygons, useMcsRoomInfo, };
package/lib/mqtt/index.js CHANGED
@@ -21,5 +21,6 @@ import { useDeviceModel } from './useDeviceModel';
21
21
  import { useFurnitureModel } from './useFurnitureModel';
22
22
  import { usePurifierSchedule } from './usePurifierSchedule';
23
23
  import { useCruise } from './useCruise';
24
+ import { useSpotPolygons } from './useSpotPolygons';
24
25
  import { useMcsRoomInfo } from './useMcsRoomInfo';
25
- export { useCarpet, useCarpetClean, useVoice, MqttProvider, useDeviceModel, useFurnitureModel, useDevInfo, usePartMerge, usePartDivision, usePassword, useWifiMap, useQuiteHours, useVirtualArea, useSpotClean, useZoneClean, useSelectRoomClean, useVirtualWall, useSchedule, useHistoryMap, useRoomProperty, useResetMap, usePurifierSchedule, useCruise, useMcsRoomInfo };
26
+ export { useCarpet, useCarpetClean, useVoice, MqttProvider, useDeviceModel, useFurnitureModel, useDevInfo, usePartMerge, usePartDivision, usePassword, useWifiMap, useQuiteHours, useVirtualArea, useSpotClean, useZoneClean, useSelectRoomClean, useVirtualWall, useSchedule, useHistoryMap, useRoomProperty, useResetMap, usePurifierSchedule, useCruise, useSpotPolygons, useMcsRoomInfo };
@@ -0,0 +1,7 @@
1
+ import type { SetSpotPolygonsData } from './type/protocols/spotPolygonsProtocol';
2
+ export declare const createSpotPolygonsPayload: ({ polygons, spotNames, version, }: SetSpotPolygonsData) => {
3
+ version?: string | undefined;
4
+ num: number;
5
+ polygons: string[];
6
+ spotNames: string[];
7
+ };
@@ -0,0 +1,18 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ export const createSpotPolygonsPayload = _ref => {
3
+ let {
4
+ polygons,
5
+ spotNames,
6
+ version
7
+ } = _ref;
8
+ if (polygons.length !== spotNames.length) {
9
+ throw new Error('polygons and spotNames must have the same length');
10
+ }
11
+ return _objectSpread({
12
+ num: polygons.length,
13
+ polygons,
14
+ spotNames
15
+ }, version && {
16
+ version
17
+ });
18
+ };
@@ -12,19 +12,26 @@ export interface SetCruiseData {
12
12
  cruiseType?: CruiseType;
13
13
  /** spot 定点巡航时的净化点坐标列表,格式 "x, y";不传表示全部净化点 */
14
14
  polygons?: string[];
15
+ /** spot 定点巡航时的净化点数量,= polygons.length;不传时由设备侧根据 polygons 长度推断 */
16
+ num?: number;
15
17
  version?: string;
16
18
  }
17
19
  export interface RequestCruiseData {
18
20
  version?: string;
19
21
  }
20
22
  export interface CruiseResponse extends BaseResponse {
21
- /** 巡航状态 */
22
- status: CruiseStatus;
23
- mapId: number;
23
+ /** Wiki 协议中的当前巡航指令/状态字段 */
24
+ cmd?: CruiseCmd;
25
+ /** 兼容旧设备的巡航状态 */
26
+ status?: CruiseStatus;
27
+ /** 当前地图 ID,设备可不返回 */
28
+ mapId?: number;
24
29
  /** 巡航类型;idle 时可不携带 */
25
30
  cruiseType?: CruiseType;
26
31
  /** spot 定点巡航时的净化点坐标列表,格式 "x, y" */
27
32
  polygons?: string[];
33
+ /** spot 定点巡航时的净化点数量 */
34
+ num?: number;
28
35
  /** 当前正在净化的坐标 "x, y" */
29
36
  currentPolygon?: string;
30
37
  }
@@ -20,4 +20,5 @@ export * from './devInfoProtocol';
20
20
  export * from './roomPropertyProtocol';
21
21
  export * from './purifierScheduleProtocol';
22
22
  export * from './cruiseProtocol';
23
+ export * from './spotPolygonsProtocol';
23
24
  export * from './mcsRoomInfoProtocol';
@@ -20,4 +20,5 @@ export * from './devInfoProtocol';
20
20
  export * from './roomPropertyProtocol';
21
21
  export * from './purifierScheduleProtocol';
22
22
  export * from './cruiseProtocol';
23
+ export * from './spotPolygonsProtocol';
23
24
  export * from './mcsRoomInfoProtocol';
@@ -0,0 +1,21 @@
1
+ import type { BaseResponse } from './base';
2
+ export interface SetSpotPolygonsData {
3
+ /** 定点位置坐标,格式为 "x,y" */
4
+ polygons: string[];
5
+ /** 定点位置名称,与 polygons 一一对应 */
6
+ spotNames: string[];
7
+ version?: string;
8
+ }
9
+ export interface RequestSpotPolygonsData {
10
+ version?: string;
11
+ }
12
+ export interface SpotPolygonsResponse extends BaseResponse {
13
+ /** 定点位置数量 */
14
+ num: number;
15
+ /** 定点位置坐标,格式为 "x,y" */
16
+ polygons: string[];
17
+ /** 定点位置名称,与 polygons 一一对应 */
18
+ spotNames: string[];
19
+ }
20
+ export type TRequestSpotPolygons = (message?: RequestSpotPolygonsData) => Promise<SpotPolygonsResponse>;
21
+ export type TSetSpotPolygons = (message: SetSpotPolygonsData) => Promise<SpotPolygonsResponse>;
@@ -0,0 +1 @@
1
+ export {};
@@ -100,6 +100,10 @@ export declare enum CruiseEnum {
100
100
  query = "purifierCruiseQry",
101
101
  set = "purifierCruiseSet"
102
102
  }
103
+ export declare enum SpotPolygonsEnum {
104
+ query = "spotPolygonsQry",
105
+ set = "spotPolygonsSet"
106
+ }
103
107
  export declare enum McsRoomInfoEnum {
104
108
  query = "McsRoomInfoQry"
105
109
  }
@@ -153,6 +153,13 @@ export let CruiseEnum = /*#__PURE__*/function (CruiseEnum) {
153
153
  return CruiseEnum;
154
154
  }({});
155
155
 
156
+ // 定点位置
157
+ export let SpotPolygonsEnum = /*#__PURE__*/function (SpotPolygonsEnum) {
158
+ SpotPolygonsEnum["query"] = "spotPolygonsQry";
159
+ SpotPolygonsEnum["set"] = "spotPolygonsSet";
160
+ return SpotPolygonsEnum;
161
+ }({});
162
+
156
163
  // 设备当前所在房间(MCS 房间信息;RVC SDK Alexa 语音方案协议,通常仅在任务中查询)
157
164
  export let McsRoomInfoEnum = /*#__PURE__*/function (McsRoomInfoEnum) {
158
165
  McsRoomInfoEnum["query"] = "McsRoomInfoQry";
@@ -2,6 +2,7 @@
2
2
  import { useContext } from 'react';
3
3
  import { handleMqttError, useStructuredMessage } from './hooks/useStructuredMessage';
4
4
  import { SingletonContext } from './mqttProvider';
5
+ import { createCruisePayload } from './cruise';
5
6
  import { CruiseEnum } from './type';
6
7
  /**
7
8
  * 自定义 Hook,用于移动设备巡航状态查询与控制(如移动空气净化器、移动垃圾桶)
@@ -55,7 +56,7 @@ export const useCruise = () => {
55
56
  reject(new Error('cruiseType is required when cmd is "start"'));
56
57
  return;
57
58
  }
58
- sendStructuredMessage(CruiseEnum.set, message, resolve, error => reject(handleMqttError(error, 'Failed to set cruise')), CruiseEnum.query // 响应类型是 query,不是 set
59
+ sendStructuredMessage(CruiseEnum.set, createCruisePayload(message), resolve, error => reject(handleMqttError(error, 'Failed to set cruise')), CruiseEnum.query // 响应类型是 query,不是 set
59
60
  );
60
61
  } catch (error) {
61
62
  reject(handleMqttError(error, 'Failed to set cruise'));
@@ -0,0 +1,9 @@
1
+ import { type TRequestSpotPolygons, type TSetSpotPolygons } from './type/protocols/spotPolygonsProtocol';
2
+ /**
3
+ * 自定义 Hook,用于定点位置查询与设置
4
+ * @returns 包含 requestSpotPolygons 和 setSpotPolygons 函数的对象
5
+ */
6
+ export declare const useSpotPolygons: () => {
7
+ requestSpotPolygons: TRequestSpotPolygons;
8
+ setSpotPolygons: TSetSpotPolygons;
9
+ };
@@ -0,0 +1,48 @@
1
+ import { useContext } from 'react';
2
+ import { handleMqttError, useStructuredMessage } from './hooks/useStructuredMessage';
3
+ import { SingletonContext } from './mqttProvider';
4
+ import { createSpotPolygonsPayload } from './spotPolygons';
5
+ import { SpotPolygonsEnum } from './type';
6
+ /**
7
+ * 自定义 Hook,用于定点位置查询与设置
8
+ * @returns 包含 requestSpotPolygons 和 setSpotPolygons 函数的对象
9
+ */
10
+ export const useSpotPolygons = () => {
11
+ const {
12
+ useMqtt
13
+ } = useContext(SingletonContext);
14
+ const {
15
+ sendStructuredMessage
16
+ } = useStructuredMessage();
17
+ return {
18
+ requestSpotPolygons: function () {
19
+ let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
20
+ version: '1.0.0'
21
+ };
22
+ return new Promise((resolve, reject) => {
23
+ try {
24
+ if (!useMqtt) {
25
+ reject(new Error('useMqtt is not used'));
26
+ return;
27
+ }
28
+ sendStructuredMessage(SpotPolygonsEnum.query, message, resolve, error => reject(handleMqttError(error, 'Failed to request spot polygons')));
29
+ } catch (error) {
30
+ reject(handleMqttError(error, 'Failed to request spot polygons'));
31
+ }
32
+ });
33
+ },
34
+ setSpotPolygons: message => {
35
+ return new Promise((resolve, reject) => {
36
+ try {
37
+ if (!useMqtt) {
38
+ reject(new Error('useMqtt is not used'));
39
+ return;
40
+ }
41
+ sendStructuredMessage(SpotPolygonsEnum.set, createSpotPolygonsPayload(message), resolve, error => reject(handleMqttError(error, 'Failed to set spot polygons')), SpotPolygonsEnum.query);
42
+ } catch (error) {
43
+ reject(handleMqttError(error, 'Failed to set spot polygons'));
44
+ }
45
+ });
46
+ }
47
+ };
48
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ray-js/robot-data-stream",
3
- "version": "0.0.17-beta.7",
3
+ "version": "0.0.17-beta.9",
4
4
  "description": "扫地机P2P数据流标准化组件",
5
5
  "main": "lib/index",
6
6
  "files": [