Transformation节点用于更改入站的消息字段例如:发起者、消息类型、playload和元数据。

支持TB版本2.0+

Transformation(转换节点) - 图1
Thingsboard 中的所有传入消息都有 originator 字段,用于标识提交消息的实体。它可以是设备、资产、客户、租户等。
此节点用于提交的消息应该作为来自另一个实体的消息处理的情况。例如,设备提交遥测数据,该遥测数据需要复制到更高级别的资产或客户中。在这种情况下,管理员应该在保存到时间序列节点之前添加此节点。
发起者可以更改为:

  • 发起者所属的客户
  • 发起者所属的租户
  • 由关系查询所标识的相关实体

在 “Relations query(关系查询)” 配置中,管理员可以选择所需的Driection(方向)relation depth level(关系深度级别)。还可以用所需的关系类型和实体类型配置一组Relation Filters(关系过滤器)
Transformation(转换节点) - 图2
如果找到多个相关实体,则仅将第一个实体用作新的发起人,其他实体将被丢弃。
如果找不到相关实体/客户/租户,则使用 Failure 链,否则- Success 链。
输出的消息将有新的发起人 Id。

脚本Script Transformation Node

支持TB版本2.0

Transformation(转换节点) - 图3
使用配置的 JavaScript 函数更改消息有效内容、元数据或消息类型。
JavaScript 函数接收 3 个输入参数:

  • msg - 是消息有效内容。
  • metadata - 是消息元数据。
  • msgType - 是消息类型。

脚本应返回以下结构:

  1. {
  2. msg: new payload,
  3. metadata: new metadata,
  4. msgType: new msgType
  5. }

Transformation(转换节点) - 图4
结果对象中的所有字段都是可选的,如果没有指定,将从原始消息中获取。
来自该节点的输出消息将是使用配置的 JavaScript 函数构建的新消息。
使用 Test JavaScript function 可以验证 JavaScript 转换函数。
示例
节点接收带有payload的消息:

  1. {
  2. "temperature": 22.4,
  3. "humidity": 78
  4. }

原数据Original Metadata:

  1. { "sensorType" : "temperature" }

原始Message Type - POST_TELEMETRY_REQUEST
应该执行以下修改:

  • 将消息类型更改为’CUSTOM_UPDATE’
  • 将其他属性version添加到payload中值为v1.1
  • 将元数据中的sensorType属性值更改为roomTemp

以下转换函数将执行所有必要的修改:

  1. var newType = "CUSTOM_UPDATE";
  2. msg.version = "v1.1";
  3. metadata.sensorType = "roomTemp"
  4. return {msg: msg, metadata: metadata, msgType: newType};

在下一面教程中你可以看到使用该节点的真实示例:

Transformation(转换节点) - 图5
通过使用从消息元数据派生的值填充电子邮件字段后将消息转换为电子邮件并设置’SEND_EMAIL’为输出消息类型后使用发送邮件节点发送。
可以将所有电子邮件字段配置为元数据中的值。
Transformation(转换节点) - 图6
例如入站消息在元数据中具有deviceName字段并且电子邮件正文应包含其值。
在这种情况下可以像下面的示例一样引用deviceName${deviceName}:

  1. Device ${deviceName} has high temperature

如果入站消息元数据包含引用存储在数据库中的attachments字段可以做为电子邮件的附件使用。
注意: 这是ThingsBoard专业版支持的文件存储功能的一部分。

在下一面教程中你可以看到使用该节点的真实示例: