筛选器节点用于邮件筛选和路由

检查节点关系节点

image.png
根据类型和方向检查从所选实体到消息发起者的关系。
image.png
如果存在关系-消息通过True链发送否则使用False链。
注意: 可以通过禁用规则节点配置进行根据方向和关系类型检查与特定实体或任何实体的关系是否存在:
筛选器 - 图3
如果禁用复选框并且存在任何关系-消息通过True链发送否则使用False链。

检查存在字段节点

image.png
检查入站的消息数据和元数据中所选键的是否存在。
筛选器 - 图5
如果选中复选框Check that all selected keys are present表示消息数据和元数据中的所有键是否存在,如果为True则通过此链发送消息否则使用False链。

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

消息类型过滤节点

image.png
管理员为入站消息定义了一组允许的消息类型。
系统中有预定义的消息类型;例如:Post AttributesPost TelemetryRPC Request等。
筛选器 - 图7
如果入站消息类型-通过True链发送消息否则使用False链。

消息类型切换节点

image.png
根据消息类型路由入站的消息。
如果入站的消息具有已知的消息类型则将其发送到相应的链否则将消息发送到Other链。
如果使用自定义消息类型则可以通过消Message Type Switch NodeOther链将这些消息路由到配置了所需路由逻辑的Switch NodeMessage Type Filter Node

发起者类型节点

image.png
管理员配置发起者实体类型过滤入站消息。
筛选器 - 图10
如果是预期的入站发起者类型-通过True链发送消息否则使用False链。

发起者类型转换节点

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

过滤脚本节点

image.png
使用配置的JavaScript条件传入的消息。
JavaScript函数接收3个输入参数:

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

脚本应返回布尔值如果为True-通过True链发送消息否则使用False链。
筛选器 - 图13
消息payload可以通过msg变量访问。例如msg.temperature < 10;
可以通过metadata变量访问消息。例如metadata.customerName === ‘John’;
可以通过msgType变量访问。例如msgType === ‘POST_TELEMETRY_REQUEST’

完整脚本示例:
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条件.
在下一面教程中你可以看到使用该节点的真实示例:

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

    转变节点

    image.png
    根据入站消息路由到一个或多个输出链节点执行已配置的JavaScript函数。
    JavaScript函数接收3个输入参数:

  • msg - 消息payload

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

该脚本应返回一个将消息路由到的下一关系名称的数组
如果返回的数组为空-消息将不会路由到任何节点并被丢弃。
筛选器 - 图15
消息payload可以通过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”功能来验证JavaScript切换功能.
为了指定自定义关系名称,这将允许输入自定义关系名称。定制关系名称不区分大小写。
image.png
image.png

GPS地理围栏过滤器节点

image.png
通过参数过滤消息的传入基于GPS的从数据或元数据中提取纬度和经度并检查它们是否在配置的边界(地理围栏)内。
筛选器 - 图19
默认情况下规则节点从消息元数据中获取外围信息如果未Fetch perimeter information from message metadata则应配置其他信息。

从消息元数据中获取边界信息

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

  • 多边形(Polygon)入站消息的元数据必须包含具有名称范围和以下数据结构的密钥:

[[lat1,lon1],[lat2,lon2], ,[latN,lonN]]

  • 圈(Circle)

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

从节点配置中获取周边信息

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

  • 多边形(Polygon)

筛选器 - 图20

  • 圈(Circle)

筛选器 - 图21
如果配置的纬度和经度在通过True链发送的配置的周界消息内部则使用False链。
在以下情况下将使用故障链:
传入消息在数据或元数据中没有配置的纬度或经度键。 缺少周界定义;