Skip to content

条件与动作

条件与动作用于配置图元的触发条件和执行动作,实现基于条件的自动化交互。

1. 条件

条件是相对动作而言,当条件满足时,才会触发动作

TIP

  • 未配置条件时,动作直接触发。
  • 条件可以配置多个,多个条件根据触发条件决定是否执行动作
  • 比较条件可以比较固定值以及其他的图元属性值
SceneV Preview

比较运算符

在条件配置中,可以使用以下比较运算符:

运算符说明
>大于
>=大于等于
<小于
<=小于等于
=等于
!=不等于
[]包含
![]不包含

高级条件

高级条件需要自行根据函数参数中的pen来实现自定义逻辑,需结合图元pen的 API 来实现, 最后在函数体中返回 true 或 false 来判断条件是否满足。

2. 动作

动作是满足条件后要执行的操作,可以执行一个或多个动作。

TIP

  • 动作可通过配置条件触发。
  • 动作可以配置多个,多个动作同时触发
  • 依靠动作的延迟,可执行连贯的行为
SceneV Preview

动作类型

动作类型如下:

动作类型说明
Link打开链接
SetProps更改属性
StartAnimate开始动画
PauseAnimate暂停动画
StopAnimate停止动画
JSFunction 执行 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:更改属性

动作配置

  1. 在条件配置后,选择"动作"选项
  2. 选择动作类型
  3. 配置动作的具体参数
  4. 可以添加多个动作,按顺序执行

动作执行顺序

当配置多个动作时,动作会按照配置的顺序依次执行。可以通过调整动作的顺序来控制执行流程。

3. 条件与动作组合示例

示例 1:发送http请求

通过Http请求,将数据发送到指定的数据源。

SceneV Preview

示例 2:通过ThingsBoard 给设备下发 RPC

配置了ThingsBoard 数据源,支持设备下发单向、双向 RPC 调用。

rpc类型:

  • 单向:sendOneWayCommand
  • 双向:sendTwoWayCommand

参数说明:

  • deviceId:设备ID,用于指定要调用的设备。
  • method:RPC方法名称,用于指定要调用的 RPC 方法。
  • params:可选参数,用于传递 RPC 方法的参数。
  • timeout:可选参数,用于指定 RPC 调用的超时时间(单位:毫秒)。
  • persistent:可选参数,用于指定是否启用持久化调用。
  • persistentPollingInterval:可选参数,用于指定持久化调用的轮询间隔(单位:毫秒)。
  • retries:可选参数,用于指定 RPC 调用的重试次数。

TIP

persistentpersistentPollingIntervalretries 参数多用于 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) => {});
}
SceneV PreviewSceneV Preview

示例 3:监听系统消息

监听系统消息,可根据消息类型自定义行为

消息监听

typescript
const fn = (event, data) => {};
meta2d.on("event", fn);

// 监听全部消息
meta2d.on("*", fn);
// 取消监听
meta2d.off("event", fn);
meta2d.off("*", fn);

触发自定义消息

typescript
meta2d.emit("自定义消息", data);
SceneV PreviewSceneV Preview

示例 4:全局消息

触发全局消息提示

SceneV Preview