技术交流

学习资料

立即试用 商务报价
社区版
社区版 专业版 云服务 Edge Edge PE 网关 授权服务 Trendz分析 Mobile 应用程序 Mobile PE应用程序
文档 > 规则引擎 > 规则节点 > Filter节点
入门
指南 安装 架构 API 常见问题

本页目录

Filter

Filter节点用于消息过滤和路由。

支持TB版本2.0.1+

image

根据类型和方向检查从所选实体到消息发起者的关系。

image

如果存在关系-消息通过True链发送否则使用False链。

注意: 从Thingsboard 2.3版开始规则节点可以通过禁用规则节点配置进行根据方向和关系类型检查与特定实体或任何实体的关系是否存在:

image

如果禁用复选框并且存在任何关系-消息通过True链发送否则使用False链。

检查字段
支持TB版本2.3+

image

检查入站的消息数据和元数据中所选键的是否存在。

image

如果选中复选框Check that all selected keys are present表示消息数据和元数据中的所有键是否存在,如果为True则通过此链发送消息否则使用False链。

如果未选中此复选框并且消息的数据或元数据中至少有一个键存在通过True链发送消息否则使用False链。

消息类型
支持TB版本2.0+

image

系统中有[预定义的消息类型]predefined Message Types;例如:Post AttributesPost TelemetryRPC Request等。
管理员可以在节点配置中定义任何自定义消息类型。

image

如果入站消息类型-通过True链发送消息否则使用False链。

消息选择
支持TB版本2.0+

image

如果入站的消息具有已知的消息类型则将其发送到相应的链否则将消息发送到Other链。

如果使用自定义消息类型则可以通过消Message Type Switch NodeOther链将这些消息路由到配置了所需路由逻辑的Switch NodeMessage Type Filter Node

发起者类型
支持TB版本2.1+

image

管理员配置发起者[实体]Entity类型过滤入站消息。

image

如果是预期的入站发起者类型-通过True链发送消息否则使用False链。

发起者选择
支持TB版本2.0+

image

通过发起者实体类型路由入站消息。

脚本
支持TB版本2.0

image

使用配置的JavaScript条件传入的消息。

JavaScript函数接收3个输入参数:

  • msg - 消息payload
  • metadata - 消息metadata
  • msgType - 消息类型

脚本应返回布尔值如果为True-通过True链发送消息否则使用False链。

image

消息payload可以通过msg变量访问。例如msg.temperature < 10;
可以通过metadata变量访问消息。例如metadata.customerName === 'John';
可以通过msgType变量访问。例如msgType === 'POST_TELEMETRY_REQUEST'

完整脚本示例:

1
2
3
4
5
6
7
8
9
if(msgType === 'POST_TELEMETRY_REQUEST') {
    if(metadata.deviceType === 'vehicle') {
        return msg.humidity > 50;
    } else if(metadata.deviceType === 'controller') {
        return msg.temperature > 20 && msg.humidity > 60;
    }
}

return false;

可以使用Test JavaScript function来验证JavaScript条件。

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

交换
支持TB 2.0+版本

image

根据入站消息路由到一个或多个输出链节点执行已配置的JavaScript函数。

JavaScript函数接收3个输入参数:

  • msg - 消息payload
  • metadata - 消息metadata
  • msgType - 消息类型

该脚本应返回一个将消息路由到的下一关系名称的数组

如果返回的数组为空-消息将不会路由到任何节点并被丢弃。

image

消息payload可以通过msg变量访问。例如msg.temperature < 10;
可以通过metadata变量访问消息。例如metadata.customerName === 'John';
可以通过msgType变量访问。例如msgType === 'POST_TELEMETRY_REQUEST'

完整脚本示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (msgType === 'POST_TELEMETRY_REQUEST') {
    if (msg.temperature < 18) {
        return ['Low Temperature Telemetry'];
    } else {
        return ['Normal Temperature Telemetry'];
    }
} else if (msgType === 'POST_ATTRIBUTES_REQUEST') {
    if (msg.currentState === 'IDLE') {
        return ['Idle State', 'Update State Attribute'];
    } else if (msg.currentState === 'RUNNING') {
        return ['Running State', 'Update State Attribute'];
    } else {
        return ['Unknown State'];
    }
}
return [];

可以使用Test JavaScript function来验证JavaScript条件。

指定自定义关系名称请选择自定义类型将允许输入自定义关系名称定制关系名称不区分大小写。

image

GPS围栏
支持TB版本2.3.1+

image

通过参数过滤消息的传入基于GPS的从数据或元数据中提取纬度和经度并检查它们是否在配置的边界(地理围栏)内。

image

默认情况下规则节点从消息元数据中获取外围信息如果未Fetch perimeter information from message metadata则应配置其他信息。


元数据边界
  • 多边形

    入站消息的元数据必须包含具有名称范围和以下数据结构的密钥:

1
[[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]]
  • 圆形
1
2
3
4
5
"centerLatitude": "value1", "centerLongitude": "value2", "range": "value3"

密钥的值均以双精度浮点数据类型为单位

The "rangeUnit" key requires specific value from a list of METER, KILOMETER, FOOT, MILE, NAUTICAL_MILE (capital letters obligatory).
消息边界

根据边界类型有两种区域定义选项:

  • 多边形

image

  • 圆形

image

如果配置的纬度和经度在通过True链发送的配置的周界消息内部则使用False链。

在以下情况下将使用Failure链:

  • 入站消息在数据或元数据中没有配置的纬度或经度键;
  • 缺少边界定义。