过滤节点
过滤器节点用于消息过滤和路由。您可能会在下面找到可用节点的列表。
资产配置切换
根据资产配置文件的名称路由传入消息。资产配置文件名称区分大小写。自v3.4.4起可用。
输出
规则节点的输出连接对应于资产配置文件名称。例如:“冷冻室”、“建筑物”等。
使用示例
经验丰富的平台用户利用资产配置文件并为每个资产配置文件配置特定的规则链。这对于自动路由平台生成的消息非常有用:资产创建、删除、属性更新等。但大多数消息都源自传感器数据。假设我们的房间资产中有温度传感器,其配置文件为:“冷冻室”和“锅炉房”。我们还认为房间资产和“包含”类型的温度设备之间存在关系。以下规则链会将消息的发起者从设备更改为相关资产,并将传入消息路由到“冷冻室”或“锅炉房”规则链。
您可以下载并导入规则链。请注意,“规则链”节点将指向您的环境中不存在的规则链。
设备配置文件切换
根据设备配置文件的名称路由传入消息。设备配置文件名称区分大小写。自v3.4.4起可用。
输出
规则节点的输出连接对应于设备配置文件名称。例如:“温度传感器”、“湿度传感器”等。
使用示例
经验丰富的平台用户会利用设备配置文件并为每个设备配置文件配置特定的规则链。这在大多数情况下都很有用,除非设备数据是从其他消息派生的。例如,您可以使用 BLE 到 MQTT 网关和 BLE 信标。网关有效负载通常包含信标的 MAC 和信标数据:
{"mac":"7085C2F13DCD","rssi":-25,"payload":"AABBCC"}
假设您有不同的信标配置文件 - 室内空气质量(“IAQ 传感器”)和泄漏传感器(“泄漏传感器”)。下面的规则链会将消息的发起者从网关更改为设备,并将消息转发到相应的规则链:
您可以下载并导入规则链。请注意,“规则链”节点将指向您的环境中不存在的规则链。
检查报警状态
检查警报状态是否与指定状态之一匹配。
配置
- 警报状态过滤器 - 包含警报状态列表。可用状态:“活动已确认”、“活动未确认”、“已清除已确认”、“已清除未确认”。
输出
输出连接类型:“True”或“False”。
例子
下面的规则链将检查已确认的警报是否仍然有效或已清除。
您可以下载并导入规则链。
检查字段存在
检查消息或元数据中是否存在指定字段。消息和元数据通常都是 JSON 对象。用户在配置中指定消息或元数据字段名称。
配置
- 消息字段名称 - 消息中应出现的字段名称列表;
- 元数据字段名称 - 应出现在元数据中的字段名称列表;
- “检查所有指定字段是否存在”复选框 - 检查所有字段(如果选中)或至少一个字段(如果未选中)是否存在。
输出
输出连接类型:“True”或“False”。
例子
请参阅配置屏幕截图。
检查关系
检查消息的发起者和其他实体之间是否存在关系。如果选择“检查与特定实体的关系”,则必须指定相关实体。否则,规则节点检查与方向和关系类型标准匹配的任何实体的关系是否存在。
配置
- “检查与特定实体的关系”复选框允许配置用于检查关系的特定实体。
- 方向 - 配置关系的方向。它是“从”或“到”。该值对应于从特定/任何实体到发起者的关系方向。参见示例。
- 关系类型 - 任意关系类型。默认关系类型为“包含”和“管理”,但您可以创建任何类型的关系。
输出
输出连接类型:“True”或“False”。
例子
假设您在办公室和仓库内都有温度传感器。在数据处理过程中,您可能想知道传感器位于办公室还是仓库。为了实现这一目标,应该提供从办公室资产到位于办公室的传感器设备的“OfficeToDevice”关系。 请参阅配置屏幕截图以了解如何为此特定情况配置规则节点。
实体类型
按消息发起者实体的类型过滤传入消息。检查传入消息发起者的实体类型是否与过滤器中指定的值之一匹配。
配置
- 发起者类型过滤器 - 实体类型列表:设备、资产、用户等。
输出
输出连接类型:“True”或“False”。
例子
请参阅配置屏幕截图。
实体类型切换
按消息发起者实体的类型切换传入消息。
输出
规则节点的输出连接对应于消息发起者的实体类型。例如:“设备”、“资产”、“用户”等。
例子
假设您有来自不同实体的消息在一个规则链中进行处理。您可能希望根据实体类型拆分消息流。见下文:
消息类型
根据一种或多种预定义或自定义消息类型过滤传入消息。检查传入消息的消息类型是否与过滤器中指定的值之一匹配。
配置
- 消息类型过滤器 -预定义消息类型的列表。还支持自定义消息类型。
输出
输出连接类型:“True”或“False”。
例子
请参阅配置屏幕截图。
消息类型切换
按消息类型值路由传入消息。如果传入的消息已知消息类型 ,则将其发送到相应的链,否则,将消息发送到其他链。
如果您使用自定义消息类型,则可以通过消息类型切换节点的其他链将这些消息路由 到配置了所需路由逻辑的消息类型。
输出
规则节点的输出连接对应于消息的类型。例如:“设备”、“资产”、“用户”等。
例子
假设您在一个规则链中处理不同类型的消息。您可能希望根据消息类型拆分消息流。见下文:
脚本
使用传入消息评估布尔函数。该函数可以使用纯 JavaScript 编写。 脚本函数应返回布尔值并接受三个参数。
配置
YiCONNECTEL/JavaScript函数接收3个输入参数:
msg
- 是消息负载,通常是 JSON 对象或数组。metadata
- 是消息元数据。表示为键值映射。键和值都是字符串。msgType
- 是消息类型,字符串。
输出
输出连接类型:“True”或“False”。
例子
消息有效负载可以通过变量访问msg
。例如,msg.temperature < 10;
可以通过变量访问消息元数据metadata
。例如,消息类型可以通过变量metadata.deviceType === 'DHT11';
访问。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;
YiCONNECTEL/JavaScript条件可以使用测试过滤器功能进行验证。
转变
将传入消息路由到一个或多个输出连接。节点执行配置的YiCONNECTEL或返回字符串数组(连接名称)的 JavaScript 函数。
配置
YiCONNECTEL/JavaScript函数接收3个输入参数:
msg
- 是消息负载,通常是 JSON 对象或数组。metadata
- 是消息元数据。表示为键值映射。键和值都是字符串。msgType
- 是消息类型,字符串。
该脚本应返回一个包含消息应路由的 下一个关系名称的数组。 如果返回的数组为空 - 消息将不会被路由到任何节点并被丢弃。
输出
规则节点的输出连接对应脚本执行的结果。例如:“低温遥测”、“常温遥测”、“空闲状态”等。
例子
消息有效负载可以通过变量访问msg
。例如,msg.temperature < 10;
可以通过变量访问消息元数据metadata
。例如,消息类型可以通过变量metadata.customerName === 'John';
访问。msgType
例如msgType === 'POST_TELEMETRY_REQUEST'
完整脚本示例:
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 [];
YiCONNECTEL/JavaScript条件可以使用测试过滤器功能进行验证。
GPS 地理围栏过滤器
通过基于 GPS 的地理围栏过滤传入消息。从传入消息中提取纬度和经度参数,并根据配置的周界检查它们。
配置
- Latitude key name - 包含位置纬度的消息字段的名称;
- Longitude key name - 包含位置经度的消息字段的名称;
- 周边类型 - 多边形或圆形;
- 从消息元数据中获取周界 - 用于从消息元数据加载周界的复选框;如果您的周界特定于设备/资产并且您将其存储为设备/资产属性,则启用;
- 周界键名称 - 存储周界信息的元数据键的名称;
- 对于多边形周长类型:
- 多边形定义 - 包含以下格式的坐标数组的字符串:[[lat1, lon1],[lat2, lon2],[lat3, lon3], … , [latN, lonN]]
- 对于圆周长类型:
- 中心纬度——圆周界中心的纬度;
- 中心经度——圆周长中心的经度;
- Range——圆周长范围的值,双精度浮点值;
- 范围单位 - 以下之一:米、公里、英尺、英里、海里;
如果启用了“从消息元数据获取边界”并且未配置“边界键名称”,则规则节点将使用默认元数据键名称。多边形周界类型的默认元数据键名称是“perimeter”。圆周长的默认元数据键名称为:“centerLatitude”、“centerLongitude”、“range”、“rangeUnit”。
圆周长定义的结构(例如,存储在服务器端属性中):
{"latitude":48.198618758582384,"longitude":24.65322245153503,"radius":100.0,"radiusUnit":"METER"}
可用半径单位:米、千米、英尺、英里、航海英里;
输出
输出连接类型:“True”或“False”。当出现以下情况时,将使用“失败”连接:a) 传入消息在数据或元数据中没有配置纬度或经度键,或 b) 缺少周界定义;
例子
静态圆周长
假设您想要检查设备的位置是否距离位于基辅市中心的乌克兰独立纪念碑 100 米以内。纪念碑的坐标如下:纬度 = 50.4515652,经度 = 0.5236963。规则节点的配置非常简单:
静态多边形周长
让我们假设一个简单的牲畜位置监控用例。让我们配置规则节点来监控羊是否在区域边界内:
我们将使用农田的静态多边形坐标:
[[48.19736726399899,24.652353415807884],[48.19800374220741,24.65060461551745],[48.19918370897885,24.65317953619048],[48.19849718616351,24.65420950445969]]
如果您在消息中提交以下坐标,则可以测试规则节点返回“True”:
{latitude:48.198618758582384,longitude:24.65322245153503}
动态圆/多边形周长
让我们回顾一下更复杂的牲畜位置监控案例,其中您可能有位于不同农场的羊。假设我们创建了两个农场:农场 A 和农场 B。每个牲畜跟踪器设备都与农场 A 或农场 B 资产相关。
我们将使用 JSON 值配置名为“perimeter”的服务器端属性:“[[48.19736726399899, 24.652353415807884], [48.19800374220741, 24.65060461551745], [48.19918370897885, 24. 65317953619048],[48.19849718616351,24.65420950445969]]”;
以下规则链将从相关资产(农场 A)获取属性并在地理围栏节点中使用它:
规则节点配置相当简单。请注意,外围键名称没有任何前缀:
您可以下载并导入规则链。请注意,“规则链”节点将指向“绵羊跟踪器生成器”节点中不存在的设备。您将需要配置设备和资产来复制该示例。