条件与动作
条件与动作用于配置图元的触发条件和执行动作,实现基于条件的自动化交互。
1. 条件
条件是相对动作而言,当条件满足时,才会触发动作
TIP
- 未配置条件时,动作直接触发。
- 条件可以配置多个,多个条件根据触发条件决定是否执行动作
- 比较条件可以比较固定值以及其他的图元属性值

比较运算符
在条件配置中,可以使用以下比较运算符:
| 运算符 | 说明 |
|---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
!= | 不等于 |
[] | 包含 |
![] | 不包含 |
高级条件
高级条件需要自行根据函数参数中的pen来实现自定义逻辑,需结合图元pen的 API 来实现, 最后在函数体中返回 true 或 false 来判断条件是否满足。
2. 动作
动作是满足条件后要执行的操作,可以执行一个或多个动作。
TIP
- 动作可通过配置条件触发。
- 动作可以配置多个,多个动作同时触发
- 依靠动作的延迟,可执行连贯的行为

动作类型
动作类型如下:
| 动作类型 | 说明 |
|---|---|
| Link | 打开链接 |
| SetProps | 更改属性 |
| StartAnimate | 开始动画 |
| PauseAnimate | 暂停动画 |
| StopAnimate | 停止动画 |
| JS | Function 执行 js 代码 |
| GlobalFn | 执行全局方法 |
| Emit | 发送消息 |
| StartVideo | 播放视频 |
| PauseVideo | 暂停视频 |
| StopVideo | 停止视频 |
| Navigator | 导航 |
| Dialog | 打开弹窗 |
| SendData | 下发数据 数据源选择 |
| PostMessage | 发送场景数据 |
| PostMessageToParent | 向父窗口发送消息 |
| message | 全局消息 |
属性动作
修改图元的属性值,例如:
- 修改颜色、大小、位置等样式属性
- 修改文本内容
- 修改显示/隐藏状态
- 修改透明度、旋转角度等
数据动作
操作数据源,例如:
- SendData:下发数据,数据源选择据
- 更新数据
- 请求数据
交互动作
触发交互行为,例如:
- StartAnimate:开始动画
- PauseAnimate:暂停动画
- StopAnimate:停止动画
- StartVideo:播放视频
- PauseVideo:暂停视频
- StopVideo:停止视频
- Dialog:打开弹窗
- Navigator:导航跳转
- Link:打开链接
消息动作
发送消息和通信,例如:
- Emit:发送消息
- PostMessage:发送场景数据
- PostMessageToParent:向父窗口发送消息
- message全局消息
脚本动作
执行自定义代码,例如:
- JS:Function 执行 js 代码
- GlobalFn:执行全局方法
- SetProps:更改属性
动作配置
- 在条件配置后,选择"动作"选项
- 选择动作类型
- 配置动作的具体参数
- 可以添加多个动作,按顺序执行
动作执行顺序
当配置多个动作时,动作会按照配置的顺序依次执行。可以通过调整动作的顺序来控制执行流程。
3. 条件与动作组合示例
示例 1:发送http请求
通过Http请求,将数据发送到指定的数据源。

示例 2:通过ThingsBoard 给设备下发 RPC
配置了ThingsBoard 数据源,支持设备下发单向、双向 RPC 调用。
rpc类型:
- 单向:sendOneWayCommand
- 双向:sendTwoWayCommand
参数说明:
- deviceId:设备ID,用于指定要调用的设备。
- method:RPC方法名称,用于指定要调用的 RPC 方法。
- params:可选参数,用于传递 RPC 方法的参数。
- timeout:可选参数,用于指定 RPC 调用的超时时间(单位:毫秒)。
- persistent:可选参数,用于指定是否启用持久化调用。
- persistentPollingInterval:可选参数,用于指定持久化调用的轮询间隔(单位:毫秒)。
- retries:可选参数,用于指定 RPC 调用的重试次数。
TIP
persistent,persistentPollingInterval,retries 参数多用于 sendTwoWayCommand
typescript
if (window.rpcService) {
const deviceId: string = "ADSE6";
const method: string = "";
const params: any = "";
const timeout: number = true;
const persistent: boolean = true;
const persistentPollingInterval: number = 10000;
const retries: number = 3;
// 单向rpc
window.rpcService
.sendOneWayCommand(deviceId, method, params, timeout)
.subscribe((res) => {});
// 双向rpc
window.rpcService
.sendTwoWayCommand(deviceId, method, params, timeout)
.subscribe((res) => {});
}

示例 3:监听系统消息
监听系统消息,可根据消息类型自定义行为
消息监听
typescript
const fn = (event, data) => {};
meta2d.on("event", fn);
// 监听全部消息
meta2d.on("*", fn);
// 取消监听
meta2d.off("event", fn);
meta2d.off("*", fn);触发自定义消息
typescript
meta2d.emit("自定义消息", data);

示例 4:全局消息
触发全局消息提示
