ThingsBoard3.9.1规则链-变换节点全面解析

        最近在整理thingsboard课程,基于最新thingsboard版本3.9.1/4.0,欢迎大家收藏关注我提问在评论区留言,我争取把最新、最准、最好的课程,呈现在各位亦师亦友的csdn广大读者面前。

目录

1. 变换节点

1.1节点-change originator

1.2节点-copy key-value pairs

1.3节点-deduplication

1.4节点-delete key-value pairs

1.5节点-json path

1.6节点-rename keys

1.7节点-script

1.8节点-splite array msg

1.9节点-to email


1. 变换节点

1.1节点-change originator

本节点:修改传入消息的发起者。

传入消息都具有标识提交消息的发起者实体(originator字段),originator可以是设备、资产、客户、租户等。(消息格式参见Mark-20250204-1)

使用场景:

当传入消息应作为来自一个实体(比如机床设备)的消息时,在应用层需要知道这个消息属于哪个范畴,应该把遥测数据复制给更高级别的实体(比如资产或客户)。

(应该在Save Timeseries node之前添加该节点)

更高阶别的实体,在此有五种选择,如下:

选择客户,如下:

选择租户,如下:

选择Alarm originator,如下:

说明:当传入消息发起者是告警时才可以选择Alarm Originator这个选项。

选择Related entity,如下:

说明:

如果发现多个关联实体,则只使用第一个实体作为新的发起者,其他实体将被丢弃。

如果没有找到相关实体,则失败,否则成功。

选择 Entity by name pattern,如下:

说明:

如果发现多个关联实体,则只使用第一个实体作为新的发起者,其他实体将被丢弃。

如果没有找到相关实体(设备/资产/实体视图/用户/边缘),则失败,否则成功。


1.2节点-copy key-value pairs

本节点:清除告警。

注意:本节点的相反操作节点:create alarm

默认脚本:

var details = {};
if (metadata.prevAlarmDetails != null) {
    details = JSON.parse(metadata.prevAlarmDetails);
    //remove prevAlarmDetails from metadata
    metadata.remove('prevAlarmDetails');
    //now metadata is the same as it comes IN this rule node
}
return details;


1.3节点-deduplication

本节点:删除重复消息。删除重复时可指定某一时间段、指定删除重复策略。

说明:

FIRST - return first message that arrived during deduplication period.FIRST.

-获取执行期间的第一条到达消息。

LAST - return last message that arrived during deduplication period.LAST.

-获取在执行期间的最后一条到达消息。

ALL - return all messages as a single JSON array message. Where each element represents object with msg and metadata inner properties.

-返回所有消息并封装成一个JSON数组消息。其中每个元素表示具有和内部属性的对象。


1.4节点-delete key-value pairs

本节点:从消息或消息元数据中删除key-value键值对。

本节点输出:Success/Failure。


1.5节点-json path

本节点:对json结构提取相关字段。

本节点输出:Success/Failure。

应用场景:

(1)设备上传复杂json,需要提取关键字段,用JSON Path提取;

(2)消息体嵌套多层结构,可以用JSON Path直接定位到某个key;

(3)先把字段提取到metadata,以便再用Switch节点做分流;

(4)数据预处理、简化后续节点逻辑;

举例说明,

{

  "msg_Id": "u67e89363yd5722"

  "device_id": "meter001",

"meteraddress": 23

  "reports": {

        "activepower": 4900,

    "temerature": 35,

    "current": 22,

"voltage": 320,

"frequency": 58

  }

}

或者

{

    "meterName": "TEST2",

    "meterAddress": 12,

    "reports": {"activepower": 4811, "temerature": 32, "current": 18, "voltage": 319, "frequency": 60}

}

应用场景测试:

1:

{

    "meterName": "TEST2",

    "meterAddress": 12,

    "reports": {

        "activepower": 4811,

        "temerature": 32,

        "current": 18,

        "voltage": 319,

        "frequency": 60

    }

}

2:

{

    "deviceName": "Test Device A2",

    "deviceType": "default",

    "ts": "1746673231902"

}

3:

319

4:

{

    "deviceName": "Test Device A2",

    "deviceType": "default",

    "ts": "1746673231902"

}


1.6节点-rename keys

本节点:重命名消息体或消息元数据的字段key名字

说明:

如果current key name 的某个key名字在消息体或消息元数据中不存在,它将被直接忽略。


1.7节点-script

本节点:脚本编程。

举例说明,脚本如下:

var tempC = msg.temperature;
var tempF = (tempC * 9/5) + 32;
msg.temperature = tempF;
return {msg: msg, metadata: metadata, msgType: msgType};

1.8节点-splite array msg

本节点:将数组消息拆分为多个消息。

将数组消息拆分为单独的元素,每个元素作为单独的消息发送。所有出站消息将具有与原始数组消息相同的类型和元数据。

流程说明:

把一个数组消息(比如设备一次上报了很多条数据打包在一起);

拆分成一条一条单独的小消息,一条一条地继续流转后续规则节点;

场景说明:

主要用于处理批量上报、批量控制等场景。

批量上传多条传感器数据,需要单独报警;

一次下发多个控制指令,逐条处理;

应用场景测试说明:

(1)消息中有数组的情况

body本身就是一个数组:

[

  {"temperature": 25, "sensor": "A"},

  {"temperature": 30, "sensor": "B"}

]

消息体中有包含数组:

{

  "deviceId": "SN-001",

  "timestamp": 1625097600000,

  "readings": [

    {"sensor": "temp1", "value": 25.6},

    {"sensor": "temp2", "value": 26.1},

    {"sensor": "temp3", "value": 24.9}

  ]

}

(2)对于有数组消息的拆分

1:

{

    "roomName": "R001",

    "status": "open",

    "temps": [{

        "sensor": "temperatureIn",

        "value": 25.1

    }, {

        "sensor": "temperatureOut",

        "value": 26.1

    }, {

        "sensor": "temperatureDoor",

        "value": 23.1

    }]

}

2:

{

    "deviceName": "Test Device A2",

    "deviceType": "default",

    "ts": "1745757814249"

}

5:

(3)对于原始遥测上报消息格式就是数组形式,系统自动分割。

原始消息格式[{"key1": "value1"}, {"key2": "value2"}]

不显式调用 split array msg节点。

1:

{

    "key1": "value1"

}

2:

{

    "key2": "value2"

}

1:

{

    "key1": "value1"

}

3:

{

    "key2": "value2"

}

5:

原始遥测上报消息格式:

[{"key1": [{"key11": "value11"}, {"key111": "value111"}] }, {"key2": [{"key22": "value22"}, {"key222": "value222"}] }]

1:

{

    "key1": [{

        "key11": "value11"

    }, {

        "key111": "value111"

    }]

}

2:

{

    "key2": [{

        "key22": "value22"

    }, {

        "key222": "value222"

    }]

}

1.9节点-to email

本节点:把消息转为邮件并发送。

使用方法:

收件邮件地址,

cc抄送邮件地址,

bcc密送邮件地址,

subject邮件主题,

content邮件正文,

节点的传入消息,如下

假设在创建警报之后,我们获取的消息:

{

  "msg": {

    "temperature": 32

  },

  "metadata": {

    "deviceType": "Thermostat",

    "deviceName": "TH-001",

"ts": "1705379440000",

"GuardUser": "monitor@qeeking.cn",

    "AdminUser": "david.jing@163.com",

    "Subscribers": "mike.wang@aliyun.net,tom.zhao@qq.com,jeff.zhang@126.com"

  }

}

配置 to email节点的方法如下:

Email Sender

  From*:${GuardUser}

Recipients

  To*:${AdminUser}

  Cc*:${Subscribers}

  Ccc:jingweidong@gmail.com

Message subject and content

  subject*:Device ${deviceType} temperature high

  mail body type:plain text

  body:Device ${deviceName} has high temperature ${temperature}

节点的传出消息如下:(紫色部分是to email节点构造出来的email消息数据)

{

  "msg": {

    "from": "monitor@qeeking.cn",

    "to": "david.jing@163.com",

    "cc": "mike.wang@aliyun.net,tom.zhao@qq.com,jeff.zhang@126.com",

    "bcc": "jingweidong@gmail.com",

    "subject": "Device Thermostat temperature high",

    "body": "Device TH-001 has high temperature 32",

    "images": null,

    "html": false

  },

  "metadata": {

    "deviceType": "Thermostat",

    "deviceName": "TH-001",

"ts": "1705379440000",

"GuardUser": "monitor@qeeking.cn",

"AdminUser": "david.jing@163.com",

    "Subscribers": "mike.wang@aliyun.net,tom.zhao@qq.com,jeff.zhang@126.com"

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值