产品定价 立即试用
社区版
文档 > 规则引擎 > 数据处理与操作 > 检查实体间关系
入门
指南 安装 架构 API 常见问题
目录

检查实体间 Relation

本教程演示如何使用 check relation presence 节点检查实体间的 relation。

使用场景

假设有如下场景:

  • 有 2 个设备:

    • Smoke Detector:带 Smoke Sensor,检测到烟雾时向ThingsBoard发送数据。

    • Fire Alarm System:检测到烟雾时触发火灾警报。

该场景有多种实现方式,例如可使用 Switch 节点将入站消息路由到一个或多个输出链。
更多关于 Switch 节点的用法,请参阅 See Also 中的 Switch Node 文章。

前置条件

开始本教程前请阅读以下指南:

添加设备并创建关系

在ThingsBoard中添加两个 Device 实体:

  • Smoke Detector 表示为 Device,名称为 Smoke Detector,类型为 Smoke Sensor

  • Fire Alarm System 表示为 Device,名称为 Fire Alarm System,类型为 Fire Alarm Device

创建类型为 Uses 的 relation:

  • 从 Smoke Detector 指向 Fire Alarm System;

以下截图展示操作步骤:

image image
image


消息流

本节说明本教程中各节点的作用:

  • Node A:check relation presence 节点。
    • 按 relation 类型和方向,检查从设备 Fire Alarm System 到消息 originator Smoke Detector 的 relation 是否存在。
  • Node B:change originator 节点。
    • 将 originator 从设备 Smoke Detector 改为关联设备 Fire Alarm System,后续消息按来自 Fire Alarm System 处理。
  • Node C:transformation script 节点。
    • 将原始消息转换为 RPC request 消息。
  • Node D:RPC call request 节点。
    • 将消息 payload 作为响应发送给 Fire Alarm System
  • Node E:filter script 节点。
    • 检查入站消息的数据是否为 smoke
  • Node F:clear alarm 节点。
    • 加载 Message Originator Smoke Detector 的、配置了 Alarm Type 的最新 Alarm,若存在则清除。
  • Node G:create alarm 节点。
    • 尝试加载 Message Originator(即 Smoke Detector)的、配置了 Alarm Type 的最新 Alarm。
  • Node H:rule chain 节点。
    • 将入站消息转发到指定 Rule Chain Related Fire Alarm System


配置 Rule Chains

本教程中修改了 Root Rule Chain 并新建了 Rule Chain Related Fire Alarm System


以下截图展示上述 Rule Chains 的布局:

  • Related Fire Alarm System:

image

  • Root Rule Chain:

image


下载附带的 json file 作为 Root Rule Chain。请勿忘记将该 rule chain 标记为 root


image

此外,你还需要创建 Related Fire Alarm System Rule Chain,或者下载并导入该链路对应的 json file

下文将展示如何创建该 Rule Chain。

新建 Rule Chain(Related Fire Alarm System

进入 Rule Chains -> Add new Rule Chain

配置如下:

  • Name : Related Fire Alarm System

image

新 Rule Chain 创建完成后,点击 Edit 按钮进行配置。

添加所需节点

在该 Rule Chain 中,你需要创建 4 个节点,具体如下:

Node A: Check Relation

  • 添加 Check Relation 节点,并连接到 Input 节点。

    该节点会根据关系类型和方向,检查设备 Fire Alarm System 到消息源设备 Smoke Detector 的关系是否存在。 若关系存在,消息将沿 True 链路继续流转。

  • 按下表填写字段:

FieldInput Data
Name Check Relation
Direction To
Type Device
Device Fire Alarm System
Relation type Uses

image

Node B: Change Orignator

  • 添加 Change Orignator 节点,并通过关系类型 True 连接到 Check Relation 节点。
    该节点会将消息源从设备 Smoke Detector 切换为关联设备 Fire Alarm System,之后消息将按来自 Fire Alarm System 的消息处理。

  • 按下表填写字段:

FieldInput Data
Name Change Originator
Originator source Related
Direction From
Max relationship level 1
Relation type Uses
Entity type Device

image

Node C: Script Transformation

  • 添加 Script Transformation 节点,并通过关系类型 Success 连接到 Change Orignator 节点。

该节点会将原始消息转换为 RPC request 消息。

  • 该 RPC 调用包含 2 个属性:

    PropertyValue
    method ON
    params {}
  • 为实现上述转换,请添加以下 Script:

1
2
3
4
5
6
    var newMsg = {};
    if(msg.smoke == 'true'){
        newMsg.method = 'ON';
    }
    newMsg.params={};
    return {msg: newMsg, metadata: metadata, msgType: msgType};
  • 名称填写 New RPC message

image

Node D: RPC call request node

  • 添加 RPC call request 节点,并通过关系类型 Success 连接到 Script Transformation 节点。
    该节点会读取消息 payload,并将其作为响应发送给消息源 Fire Alarm System
  • 名称填写 Fire Alarm System
  • Timeout 填写 60 秒。

image

该 Rule Chain 配置完成后请保存。

修改 Root Rule Chain

初始 Rule Chain 需要新增以下节点:

Node E: Filter Script

  • 添加 Filter Script 节点,并通过关系类型 Success 连接到 Save Timeseries 节点。
    该节点会使用如下脚本检查入站消息是否为 smoke
1
return msg.smoke== 'true';
  • 名称填写 Smoke Alarm Filter

image

Node F: Clear Alarm

  • 添加 Clear Alarm 节点,并通过关系类型 False 连接到 Filter Script 节点。
    该节点会加载消息源 Smoke Detector 上配置 Alarm Type 的最新 Alarm,若存在则清除。

  • 名称填写 Clear Smoke Alarm,Alarm type 填写 Smoke Alarm

image

Node G: Create alarm

  • 添加 Create alarm 节点,并通过关系类型 True 连接到 Filter Script 节点。
    该节点会尝试加载消息源(即 Smoke Detector)上配置 Alarm Type 的最新 Alarm。

  • 名称填写 Create Smoke Alarm,Alarm type 填写 Smoke Alarm

image

Node H: Rule Chain

  • 添加 Rule Chain 节点,并通过关系类型 True 连接到 Filter Script 节点。
    该节点会将入站消息转发到指定 Rule Chain Related Fire Alarm System

  • 名称填写 Related Fire Alarm System

image

下图展示最终 Root Rule Chain 的形态:

image



如何验证 Rule Chain 并上报 telemetry

  • 使用以下 javascript 代码模拟 Fire Alarm System 设备。

    • FireAlarmEmulator.js.

    • 运行脚本前,请完成以下步骤:

    • 复制 Fire Alarm System 设备的 access token,并粘贴到脚本中。
      你可以在 Device 页面复制 access token。

  • 使用 Rest APIs 的 Telemetry upload APIs 从设备 Smoke Detector 上报 telemetry。

1
2
3
curl -v -X POST -d '{"smoke":"true"}' https://thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

**你需要将 $ACCESS_TOKEN 替换为真实设备令牌**


imageimage


此外,你还可以:

  • 通过添加 alarm widget 配置 Dashboard,以可视化告警;

  • 增加额外的告警处理逻辑,例如发送邮件。

具体可参考 See Also 小节中的第三、第四个链接。


See Also

下一步