跳到主要内容

场景自动化

更新时间:2026-08-07 11:38:24

App端可以通过调用场景相关接口配置场景自动化任务,详细描述请见控制台场景自动化文档

// 导入文件
import 'package:airtc_engine/src/device_center/rtcx_device_scene.dart';

flutter提供场景自动化API接口如下:

class RTCXFluDeviceSceneApi {
/// 创建场景
@async
RTCXFluSceneResult sceneCreate(RTCXFluSceneCreateReq req);

/// 删除场景
@async
RTCXFluSceneResult sceneDelete(RTCXFluSceneDeleteReq req);

/// 重命名场景
@async
RTCXFluSceneResult sceneRename(RTCXFluSceneRenameReq req);

/// 更新场景
@async
RTCXFluSceneResult sceneUpdate(RTCXFluSceneUpdateReq req);

/// 执行场景
@async
RTCXFluSceneResult sceneExecute(RTCXFluSceneExecuteReq req);

/// 获取场景列表
@async
RTCXFluSceneListRsp sceneList(RTCXFluSceneListReq req);

/// 获取场景详情
@async
RTCXFluSceneDetailRsp sceneDetail(RTCXFluSceneDetailReq req);
}

使用RTCXFluDeviceSceneApi调用如下

// 初始化场景自动化API
final sceneApi = RTCXFluDeviceSceneApi();

创建场景

void sceneCreate() {
List<RTCXFluSceneConditionReq> conditions = [];
List<RTCXFluSceneActionReq> actions = [];

RTCXFluSceneConditionReq condition = RTCXFluSceneConditionReq(
uri: 'condition/device/property',
productKey: widget.productKey,
deviceName: widget.deviceName,
identifier: 'alarmCode',
propertyName: '',
compareType: '==',
compareValue: 'xxx',
);
conditions.add(condition);

RTCXFluSceneActionReq action = RTCXFluSceneActionReq(
uri: 'action/device/setProperty',
productKey: widget.productKey,
deviceName: widget.deviceName,
identifier: 'powerstate',
args: "{\"value\":\"0\"}",
);
actions.add(action);

RTCXFluSceneCreateReq req = RTCXFluSceneCreateReq(
enable: true,
name: '场景2',
conditions: conditions,
actions: actions,
mode: 'any',
);
sceneApi
.sceneCreate(req)
.then((result) {
print("sceneCreate result:$result");
getSceneList();
})
.catchError((err) {
if (err is PlatformException) {
PlatformException exception = err;
print(
"sceneCreate catchError:${exception.code}--${exception.message} typeof:${err.runtimeType}",
);
} else {
print("sceneCreate catchError:$err");
}
});
}

删除场景

void sceneDelete(int sceneId) {
RTCXFluSceneDeleteReq req = RTCXFluSceneDeleteReq(sceneId: sceneId);
sceneApi
.sceneDelete(req)
.then((result) {
print("sceneDelete result:$result");
getSceneList();
})
.catchError((err) {
print("sceneDelete catchError:$err");
});
}

重命名场景

void sceneRename(int sceneId) {
RTCXFluSceneRenameReq req = RTCXFluSceneRenameReq(
sceneId: sceneId,
name: "新名称",
enable: true,
);
sceneApi
.sceneRename(req)
.then((result) {
print("sceneRename result:$result");
getSceneList();
})
.catchError((err) {
print("sceneRename catchError:$err");
});
}

更新场景

void sceneUpdate(int sceneId) {
List<RTCXFluSceneConditionReq> conditions = [];
List<RTCXFluSceneActionReq> actions = [];

RTCXFluSceneConditionReq condition = RTCXFluSceneConditionReq(
uri: 'condition/device/property',
productKey: widget.productKey,
deviceName: widget.deviceName,
identifier: 'alarmCode',
propertyName: '',
compareType: '==',
compareValue: 'xxx',
);
conditions.add(condition);

RTCXFluSceneActionReq action = RTCXFluSceneActionReq(
uri: 'action/device/setProperty',
productKey: widget.productKey,
deviceName: widget.deviceName,
identifier: 'powerstate',
args: "{\"value\":\"1\"}",
);
actions.add(action);

RTCXFluSceneUpdateReq req = RTCXFluSceneUpdateReq(
sceneId: sceneId,
enable: true,
name: '场景2',
conditions: conditions,
actions: actions,
mode: 'any',
);
sceneApi
.sceneUpdate(req)
.then((result) {
print("sceneUpdate result:$result");
getSceneList();
})
.catchError((err) {
if (err is PlatformException) {
PlatformException exception = err;
print(
"sceneUpdate catchError:${exception.code}--${exception.message} typeof:${err.runtimeType}",
);
} else {
print("sceneUpdate catchError:$err");
}
});
}

执行场景

void sceneExecute(int sceneId) {
RTCXFluSceneExecuteReq req = RTCXFluSceneExecuteReq(sceneId: sceneId);
sceneApi
.sceneExecute(req)
.then((result) {
print("sceneExecute result:$result");
getSceneList();
})
.catchError((err) {
print("sceneExecute catchError:$err");
});
}

获取场景列表

void getSceneList() {
RTCXFluSceneListReq req = RTCXFluSceneListReq(pageNo: 1, pageSize: 20);

sceneApi
.sceneList(req)
.then((RTCXFluSceneListRsp data) {
if (data.sceneList != null) {
sceneInfoItems = data.sceneList!;
}
setState(() {});
})
.catchError((err) {
print("getSceneList catchError:$err");
});
}

获取场景详情

void sceneDetail(int sceneId) {
RTCXFluSceneDetailReq req = RTCXFluSceneDetailReq(
sceneId: sceneId,
);
sceneApi
.sceneDetail(req)
.then((result) {
print("sceneDetail result:$result");
})
.catchError((err) {
print("sceneDetail catchError:$err");
});
}