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

Filter(过滤节点) - 图1
按类型和方向检查所选实体与消息发起者的关系。
Filter(过滤节点) - 图2
如果关系存在-消息通过 True 链发送,否则使用 False 链。
注: 从 TB 2.3 版本开始,规则节点能够根据方向和关系类型检查与特定或任何实体的关系是否存在,方法是禁用规则节点配置中的以下复选框:
Filter(过滤节点) - 图3
如果复选框禁用并且存在任何关系,则通过 True 链路发送消息,否则使用 False 链路。

检查存在字段节点

Since TB Version 2.3

Filter(过滤节点) - 图4
规则节点检查传入消息数据和元数据中所选密钥的存在。
Filter(过滤节点) - 图5
如果选中复选框选中所有选定的键都存在,并且消息数据和元数据中的所有键都存在 — 通过 True 链发送消息,否则,使用 False 链。
如果没有选中复选框,并且消息的数据或元数据中至少有一个键存在,则通过 True 链发送消息,否则使用 False 链。

Message Type Filter Node

Since TB Version 2.0

Filter(过滤节点) - 图6
In the Node configuration, administrator defines set of allowed Message Types for incoming Message. There are predefined Message Types in the system, like ,, etc. An administrator can also define any Custom Message Types in the node configuration.
在节点配置中,管理员为传入消息定义了一组允许的消息类型。系统中有预定义的消息类型,如 Post attributesPost telemetryRPC Request 等。管理员还可以在节点配置中定义任何自定义消息类型。
Filter(过滤节点) - 图7
如果预期传入消息类型 — 消息是通过 True 链发送的,否则使用 False 链。

Message Type Switch Node

Since TB Version 2.0

Filter(过滤节点) - 图8
Route incoming messages by Message Type. If incoming Message has known Message Type then it is sent to the corresponding chain, otherwise, message is sent to chain.
按消息类型路由传入消息。如果传入的消息具有已知的消息类型,那么它将被发送到相应的链,否则,消息将被发送到 Other 链。
如果使用自定义消息类型,你则可以通过消息类型切换节点的 Other 链路由按照所需路由逻辑配置的交换节点消息类型过滤节点

发起者类型过滤节点

Since TB Version 2.1

Filter(过滤节点) - 图9
在节点配置中,管理员为传入消息定义了一组允许的发起者实体类型。
Filter(过滤节点) - 图10
If incoming Originator Type is expected - Message is sent via chain, otherwise chain is used.
如果有预期的传入发起者类型 — 消息是通过 True 链发送的,否则使用 False 链。

发起人类型开关节点

Since TB Version 2.0

Filter(过滤节点) - 图11
按发起者实体类型路由传入消息。

Script Filter Node

Since TB Version 2.0

Filter(过滤节点) - 图12
使用配置的 JavaScript 条件评估传入消息。
JavaScript 函数接收 3 个输入参数:

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

脚本应该返回布尔值。如果 True-通过 True 链发送消息,否则使用 False 链。
Filter(过滤节点) - 图13
消息有效负载可以通过 msg 变量访问.例如 msg.temperature < 10;
消息元数据可以通过 metadata 变量访问.例如 metadata.customerName === 'John';
消息类型可以通过 msgType 变量访问. 例如 msgType === 'POST_TELEMETRY_REQUEST'
完整脚本示例:

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

使用 Test JavaScript function 可以验证 JavaScript 条件。
您可以在下一个教程中看到使用此节点的现实生活示例:

  • 创建并清除警报
  • 回复 RPC 调用

    Switch Node

    Since TB Version 2.0

Filter(过滤节点) - 图14
将传入消息路由到一个或多个输出链。节点执行配置的 JavaScript 函数。
JavaScript 函数接收 3 个输入参数:

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

脚本应该返回一个包含下级关系名称的数组,其中消息应该被路由。如果返回的数组为空,消息将不会被路由到任何节点并被丢弃。
Filter(过滤节点) - 图15
消息有效负载可以通过 msg 变量访问.例如 msg.temperature < 10;
消息元数据可以通过 metadata 变量访问.例如 metadata.customerName === 'John';
消息类型可以通过 msgType 变量访问. 例如 msgType === 'POST_TELEMETRY_REQUEST'
完整脚本示例:

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

使用 Test JavaScript function可以验证 JavaScript 切换功能。
为了指定自定义关系名称,应选择 Custom 类型。这将允许输入自定义关系名称。自定义关系名称不区分大小写。
Filter(过滤节点) - 图16

GPS Geofencing Filter Node

Since TB Version 2.3.1

Filter(过滤节点) - 图17
通过基于 GPS 的参数过滤传入消息。从数据或元数据中提取经纬度,并检查它们是否在配置的周边 (地理围栏) 内。
Filter(过滤节点) - 图18
默认情况下,规则节点从消息元数据中获取区域信息。如果未选中从消息元数据中获取预期信息,则应配置其他信息。

从消息元数据中获取区域信息

基于 perimeter 类型的面积定义有两个选项:

  • 多边形

传入消息的元数据必须包括具有名称 perimeter 的键和以下结构的数据:

  1. [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]]
  • 圆形

    1. "centerLatitude": "value1", "centerLongitude": "value2", "range": "value3"
    2. All values for these keys are in double-precision floating-point data type.
    3. The "rangeUnit" key requires specific value from a list of METER, KILOMETER, FOOT, MILE, NAUTICAL_MILE (capital letters obligatory).

    从节点配置中获取区域信息

    基于 perimeter 类型的面积定义有两个选项:

  • 多边形

Filter(过滤节点) - 图19

  • 圆形

Filter(过滤节点) - 图20
如果配置的经纬度在配置的区域中,通过 True 链发送,否则使用 False 链。
Failure 链将会在以下情况时使用:

  • 传入消息在数据或元数据中没有配置的纬度或经度键。
  • 缺失区域定义;