Thingsboard 3.1.0 - 规则链:转换数据结构

一、业务需求

ThingsBoard接受的默认格式为JSON,数据不能太复杂。
比如下面这种,能正常通过仪表板显示。

{"humidity": 30, "temperature": 21}

如果上传的数据是稍微复杂的结构,接受到的数据如下这样:

{
    "Data": {
        "C1_D1": [{
            "Tagname": "C1.D1.Tag001",
            "Value": 0,
            "Quality": 0,
            "Time": "2020-09-22T16:06:38.136+0800"
        }, {
            "Tagname": "C1.D1.Tag002",
            "Value": 0,
            "Quality": 0,
            "Time": "2020-09-22T16:06:38.136+0800"
        }]
    }
}

Thingsboard接受后,会显示为如下样子,不便于直接的展示。
在这里插入图片描述
所以需要通过规则链来调整数据结构。

二、规则链

1、规则链作用

能够用于接收任何事件,可以是来自设备的,设备生命周期事件、REST API 事件、RPC 请求等的传入;
能够处理单个传入消息并生成一个或多个传出消息,发往不同的规则链路进行消息的路由处理,同时可以过滤,丰富,转换传入消息,执行操作或与外部系统通信。

  1. 在设备数据保存到数据库之前,支持对接收的遥测数据或属性数据进行拦截验证和修改;
  2. 将设备遥测数据或者设备属性从设备复制到相关资产,以便可以汇总遥测;
  3. 自定义告警规则/函数,进行设备告警触发、更新、清除;
  4. 根据设备生命周期事件触发操作。如设备上线、设备离线状态,创建告警事件;
  5. 加载所需的其他处理数据。在客户设备或租户属性中定义的设备的负载阈值;
  6. 发生复杂事件时发送电子邮件,并使用 “电子邮件模板” 中其他实体的属性;
  7. 根据定义的条件进行远程设备控制的 RPC 调用。
  8. 将设备实时数据、远程控制 RPC 指令,或者由规则引擎触发的告警或者事件,推送到与外部消息中间件或者第三方系统(如 Kafka,MQTT,RabbitMQ, Spark,AWS 服务等等)

2、规则结点类型

  1. 过滤结点: 用于消息过滤和路由
  2. 属性集节点: 用于更新消息的 metadata
  3. 变换结点: 用于变换消息中的信息项,如 Originator, Type, Payload, Metadata.
  4. 动作结点: 基于传入消息执行各种动作。
  5. 外部结点: 用于和外部系统交互。

三、实际应用

1、建立一个新的规则链

内有三个规则节点,输入,变换,保存时序数据。
Thingsboard 3.1.0 - 规则链:转换数据结构_第1张图片
核心功能在变换上,选择变换节点中script,输入变换的javascript脚本。
Thingsboard 3.1.0 - 规则链:转换数据结构_第2张图片

var data = msg.Data;

var datas = [];
for (var key in data) {
    datas = data[key];
}

var newmsg = {}
for (var i in datas) {
    var od = datas[i];
    newmsg[od.Tagname] = od.Value;
}

return {
    msg: newmsg,
    metadata: metadata,
    msgType: msgType
};

2、修改根规则链

增加设备判断,转发到新建的规则链
Thingsboard 3.1.0 - 规则链:转换数据结构_第3张图片
判断的方式大致如下:

return metadata.deviceName === 'PLC-300'

这样接受到的数据结果如下:
Thingsboard 3.1.0 - 规则链:转换数据结构_第4张图片

你可能感兴趣的:(thingsboard,IOT,iot)