跳到主要内容

场景自动化

更新时间:2026-10-23 11:31:55

场景自动化SDK提供设备联动能力。

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';
/**
* 创建场景
*
* @param sceneCreateReq - 创建参数
* @public
*/
declare function sceneCreate(sceneCreateReq: SceneCreateReq): Promise<SceneCreateRsp>;

/**
* 场景删除
*
* @param sceneId - 场景ID
* @public
*/
declare function sceneDelete(sceneId: number): Promise<void>;


/**
* 场景详情
*
* @param sceneId - 场景ID
* @public
*/
declare function sceneDetail(sceneId: number): Promise<SceneListItem>;


/**
* 场景执行
*
* @param sceneId - 场景ID
* @public
*/
declare function sceneExecute(sceneId: number): Promise<void>;

/**
* 场景列表
*
* @param pageNo - 页码,从1开始
* @param pageSize - 分页大小,最大50
* @param withDetail - 是否请求详细
* @public
*/
declare function sceneList(pageNo: number, pageSize: number, withDetail?: boolean): Promise<SceneListRsp>;


/**
* 更新场景
*
* @param sceneUpdateReq - 更新参数
* @public
*/
declare function sceneUpdate(sceneUpdateReq: SceneUpdateReq): Promise<void>;

/**
* 更新场景名称和是否启用
*
* @param sceneUpdateBasicReq - 更新参数
* @public
*/
declare function sceneUpdateBasic(sceneUpdateBasicReq: SceneUpdateBasicReq): Promise<void>;

export declare namespace RTCXDeviceSceneMgr {
export {
sceneCreate,
sceneDelete,
sceneUpdate,
sceneUpdateBasic,
sceneExecute,
sceneList,
sceneDetail
}
}

创建场景​

创建场景

/**
* 创建场景
*
* @param sceneCreateReq - 创建参数
* @public
*/
declare function sceneCreate(sceneCreateReq: SceneCreateReq): Promise<SceneCreateRsp>;

示例

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';

// 表单数据结构(扩展以支持设备选择)
interface ConditionFormItem {
device: string; // iotId (用于前端选择,不提交到后端)
uri: RTCXDeviceSceneTypes.SceneConditionUriEnum; // 条件类型
productKey: string;
deviceName: string;
identifier: string; // 物模型属性标识
propertyName: string;
compareType: string; // 比较类型
compareValue: string; // 比较值
}

interface ActionFormItem {
device: string; // iotId (用于前端选择,不提交到后端)
uri: RTCXDeviceSceneTypes.SceneActionUriEnum; // 动作类型
productKey: string;
deviceName: string;
identifier: string;
args: string;
}

interface ICreateForm = {
name: string;
enable: boolean;
mode: RTCXDeviceSceneTypes.SceneModeEnum;
conditions: ConditionFormItem[];
actions: ActionFormItem[];
}

const createForm: ICreateForm = {
name: '',
enable: true,
mode: SceneModeEnum.Any,
conditions: [],
actions: []
};

const handleCreate = async () => {


// 构建符合SceneCreateReq格式的数据
const sceneCreateReq: RTCXDeviceSceneTypes.SceneCreateReq = {
name: createForm.name,
enable: createForm.enable,
mode: createForm.mode,
conditions: createForm.conditions.map(c => ({
uri: c.uri,
params: {
productKey: c.productKey,
deviceName: c.deviceName,
identifier: c.identifier,
propertyName: c.propertyName,
compareType: c.compareType as RTCXDeviceSceneTypes.SceneConditionCompareTypeEnum,
compareValue: c.compareValue
}
})),
actions: createForm.actions.map(a => ({
uri: a.uri,
params: {
productKey: a.productKey,
deviceName: a.deviceName,
identifier: a.identifier,
args: a.args || '{}'
}
}))
};


try {
await RTCXDeviceSceneMgr.sceneCreate(sceneCreateReq);
console.info('创建成功');

fetchList();
} catch (error) {
console.error('创建场景失败:', error);
}
};

删除场景​

/**
* 场景删除
*
* @param sceneId - 场景ID
* @public
*/
declare function sceneDelete(sceneId: number): Promise<void>;

示例

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';

const handleDelete = async (sceneId: number) => {
try {

await RTCXDeviceSceneMgr.sceneDelete(sceneId);
console.info('删除成功');
fetchList();
} catch (error) {

console.error('删除场景失败:', error);
}
};

更新场景​


/**
* 更新场景
*
* @param sceneUpdateReq - 更新参数
* @public
*/
declare function sceneUpdate(sceneUpdateReq: SceneUpdateReq): Promise<void>;

/**
* 更新场景名称和是否启用
*
* @param sceneUpdateBasicReq - 更新参数
* @public
*/
declare function sceneUpdateBasic(sceneUpdateBasicReq: SceneUpdateBasicReq): Promise<void>;

示例

更新全部信息

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';

interface IEditForm = {
name: string;
enable: boolean;
mode: RTCXDeviceSceneTypes.SceneModeEnum;
conditions: ConditionFormItem[];
actions: ActionFormItem[];
}
const editForm: IEditForm = {
name: '',
enable: true,
mode: SceneModeEnum.Any,
conditions: [],
actions: []
};
// 更新场景
const handleUpdate = async (sceneId: number) => {

// 构建符合SceneUpdateReq格式的数据
const sceneUpdateReq: RTCXDeviceSceneTypes.SceneUpdateReq = {
sceneId: sceneId,
name: editForm.name,
enable: editForm.enable,
mode: editForm.mode,
conditions: editForm.conditions.map(c => ({
uri: c.uri,
params: {
productKey: c.productKey,
deviceName: c.deviceName,
identifier: c.identifier,
propertyName: c.propertyName,
compareType: c.compareType as RTCXDeviceSceneTypes.SceneConditionCompareTypeEnum,
compareValue: c.compareValue
}
})),
actions: editForm.actions.map(a => ({
uri: a.uri,
params: {
productKey: a.productKey,
deviceName: a.deviceName,
identifier: a.identifier,
args: a.args || '{}'
}
}))
};

try {
await RTCXDeviceSceneMgr.sceneUpdate(sceneUpdateReq);
console.info('更新成功');

fetchList();
} catch (error) {
console.error('更新场景失败:', error);
}
};

更新基础信息

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from '@rtcx/websdk';

const handleEnableChange = async ( row: RTCXDeviceSceneTypes.SceneListItem,
val: boolean
) => {

try {
await RTCXDeviceSceneMgr.sceneUpdateBasic({
sceneId: row.sceneId,
name: row.name,
enable: val
});
console.info(val ? '已启用' : '已禁用');
} catch (error) {
row.enable = !val;
console.error('更新状态失败:', error);

}
};

场景执行​

/**
* 场景执行
*
* @param sceneId - 场景ID
* @public
*/
declare function sceneExecute(sceneId: number): Promise<void>;

示例

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';

const handleExecute = async (sceneId: number) => {
try {
await RTCXDeviceSceneMgr.sceneExecute(sceneId);
console.info('场景执行指令已下发');
} catch (error) {
console.error('执行场景失败:', error);
}
};

场景列表​

/**
* 场景列表
*
* @param pageNo - 页码,从1开始
* @param pageSize - 分页大小,最大50
* @param withDetail - 是否请求详细
* @public
*/
declare function sceneList(pageNo: number, pageSize: number, withDetail?: boolean): Promise<SceneListRsp>;

示例

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';

const fetchList = async (pageNo: number, pageSize: number) => {

try {
const rsp = await RTCXDeviceSceneMgr.sceneList(pageNo, pageSize, true);
} catch (error) {
console.error('获取场景列表失败:', error);
}
};

场景详细​

/**
* 场景详情
*
* @param sceneId - 场景ID
* @public
*/
declare function sceneDetail(sceneId: number): Promise<SceneListItem>;

示例

import { RTCXDeviceSceneMgr, RTCXDeviceSceneTypes, RTCXDeviceMgr, RTCXDeviceMgrTypes } from 'rtcxsdk';

const getDetal = async (sceneId: number) => {
try {
const detail = await RTCXDeviceSceneMgr.sceneDetail(sceneId);
} catch (error) {
console.error('获取场景列表失败:', error);
}
}