TB规则引擎是一个可高度定制,可配置的处理复杂事件的系统。使用规则引擎可以过滤、富集和转换来自物联网设备和相关资产的传入消息。您还可以触发各种操作,例如通知或与外部系统通信等。

关键概念

规则引擎消息

规则引擎消息是一个可排序的、不可变的数据结构,它表示系统中的各种消息。例如:

  • 传入的遥测数据、属性更新或者设备RPC请求;
  • 实体生命周期事件:创建、更新、删除、分配、未分配、属性更新;
  • 设备状态事件:连接、未连接、激活、未激活等;
  • 其他系统事件

规则引擎消息包含以下信息:

  • 消息ID:基于时间的通用唯一标识符;
  • 消息发起者:设备、资产或其他实体标识符;
  • 消息类型:“Post telemetry” 或 “Inactivity Event”等;
  • 消息的有效载荷:实际消息有效载荷的JSON体;
  • 元数据:消息相关的附加数据键值对列表。

重新定义消息类型 预定义消息类型列表如下表所示:

消息类型 显示名称 描述 消息元数据 消息有效负载
POST_ATTRIBUTES_REQUEST Post attributes 设备请求发布客户端属性(参见属性api) deviceName-消息发起者名称, deviceType - 发起者设备类型 key/value json: { "currentState": "IDLE" }
POST_TELEMETRY_REQUEST Post telemetry 设备请求发布遥测(参见遥测上传api) deviceName - 消息发起者名称,deviceType - 发起者设备类型,ts - 时间戳(毫秒) key/value json: { "temperature": 22.7 }
TO_SERVER_RPC_REQUEST RPC Request from Device 设备的RPC请求(参考客户端RPC) deviceName - 发起者设备名称,deviceType - 发起者设备类型,requestId - 客户端提供的RPC请求ID Json包含方法和参数: { "method": "getTime", "params": { "param1": "val1" } }
RPC_CALL_FROM_SERVER_TO_DEVICE RPC Request to Device 从服务器到设备的RPC请求(请参阅服务器端RPC api) requestUUID - 内部请求ID由持续支持用于识别应答目标,expirationTime - 请求将过期的时间,oneway - 指定请求类型:true -无响应,false -带响应 json containing method and params: { "method": "getGpioStatus", "params": { "param1": "val1" } }
ACTIVITY_EVENT Activity Event 指示设备变得活跃的事件 deviceName - 发起者名称,deviceType - 发起者类型 json包含设备活动信息: {"active": true,"lastConnectTime": 1526979083267,"lastActivityTime": 1526979083270,"lastDisconnectTime": 1526978493963,"lastInactivityAlarmTime": 1526978512339,"inactivityTimeout": 10000}
INACTIVITY_EVENT Inactivity Event 指示设备不活跃的事件 deviceName - 发起者设备名称,deviceType - 发起者设备类型 json 包含设备活动信息, 参见 Activity Event 有效负载
CONNECT_EVENT Connect Event 设备连接上时发生的事件 deviceName - 发起者设备名称,deviceType - 发起者设备类型 json 包含设备活动信息, 参见 Activity Event 有效负载
DISCONNECT_EVENT Disconnect Event 设备断开连接时发生的事件 deviceName - 发起者设备名称,deviceType - 发起者设备类型 json 包含设备活动信息, 参见 Activity Event 有效负载
ENTITY_CREATED Entity Created 在系统中创建新实体时产生的事件 userName - 创建实体的用户名称,userId - 用户 Id json containing created entity details: {"id": {"entityType": "DEVICE","id": "efc4b9e0-5d0f-11e8-8559-37a7f8cdca74" },"createdTime": 1526918366334,..."name": "my-device","type": "temp-sensor"}
ENTITY_UPDATED Entity Updated 更新现有实体时产生的事件 userName - 更新实体的用户名称,userId - 用户 Id json 包含更新的实体详情, see Entity Created payload
ENTITY_DELETED Entity Deleted 删除现有实体产生的事件 userName - 删除实体的用户名称,userId - 用户Id json containing deleted entity details, see Entity Created payload
ENTITY_ASSIGNED Entity Assigned 将现有实体分配给客户时产生的事件 userName - 执行分配操作的用户名,userId - 用户Id,assignedCustomerName - 分配客户名称,assignedCustomerId - 分配的客户ID json containing assigned entity details, see Entity Created payload
ENTITY_UNASSIGNED Entity Unassigned 当现有实体未从客户分配时产生的事件 userName - 执行未分配操作的用户名,userId - 用户Id,unassignedCustomerName - 未分配的用户名称,unassignedCustomerId - 未分配的用户Id json containing unassigned entity details, see Entity Created payload
ADDED_TO_ENTITY_GROUP Added to Group 将实体添加到实体组时产生的事件。这种消息类型是特定于ThingsBoard PE的。 userName - 执行分配操作的用户名,userId - 用户Id,addedToEntityGroupName -实体组名称,addedToEntityGroupId - 实体组Id 清空 json 有效负载
REMOVED_FROM_ENTITY_GROUP Removed from Group 从实体组中删除实体时产生的事件。这种消息类型是特定于ThingsBoard PE的。 userName - 执行未分配操作的用户名,userId - 用户Id,removedFromEntityGroupName -实体组名称,removedFromEntityGroupId - 实体组ID 清空json有效负载
ATTRIBUTES_UPDATED Attributes Updated 执行实体属性更新时产生的事件 userName - 执行属性更新的用户名,userId - 用户Id,scope - 更新属性范围 (can be either SERVER_SCOPE or SHARED_SCOPE) key/value json with updated attributes: { "softwareVersion": "1.2.3" }
ATTRIBUTES_DELETED Attributes Deleted 删除某些实体属性时产生的事件 userName - 删除属性的用户名,userId - 用户Id,scope - 删除属性范围(can be either SERVER_SCOPE or SHARED_SCOPE) json 包含已删除属性键列表的属性字段: { "attributes": ["modelNumber", "serial"] }
ALARM Alarm event 当创建、更新或删除警报时产生的事件 来自原始消息元数据的所有字段。 isNewAlarm - true 如果一个新的alram刚刚被创建 isExistingAlarm - true 如果警报已经存在 isClearedAlarm - true 如果清楚警报 json containing created alarm details: { "tenantId": { ... }, "type": "High Temperature Alarm", "originator": { ... }, "severity": "CRITICAL", "status": "CLEARED_UNACK", "startTs": 1526985698000, "endTs": 1526985698000, "ackTs": 0, "clearTs": 1526985712000, "details": { "temperature": 70, "ts": 1526985696000 }, "propagate": true, "id": "33cd8999-5dac-11e8-bbab-ad47060c9431", "createdTime": 1526985698000, "name": "High Temperature Alarm" }

规则节点

规则节点是规则引擎的基础组件。使用规则节点在同一时间处理单个传入消息,并传出一个或多个消息。规则节点是规则引擎的主要逻辑单元。规则节点可以过滤、富集、转换传入消息、执行操作或与外部系统通信。

规则节点关系

每个规则节点都有可能会有其他规则节点有关联。每一个节点关系都会有各自的节点类型,使用标签来识别关系之间的逻辑意义。规则节点生成传出消息时,指定关系类型来路由消息到下一个节点。 典型的节点关系是“成功”和“失败”。代表逻辑操作的规则节点会使用“true”或“false”类型。其他一些特定的规则节点可能会使用完全不同的关系类型,例如:“Post Telemetry”, “Attributes Updated”, “Entity Created”, 等。

规则链

规则链指规则节点的逻辑组及其之前的关系。例如,以下规则链可以:

  • 保存所有遥测消息到数据库;
  • 若消息显示温度高于50度,则启动“高温报警”;
  • 若消息显示温度低于-40度,则启动低温报警;
  • 记录失败过程,执行温度检查脚本以便在控制台中检查是否为逻辑或语法错误。

租户管理员可以定义一个根规则链和任意多个其他规则链。根规则链处理所有传入的消息,并可能将它们转发给其他规则链以进行其他处理。其他规则链也可以将消息转发给不同的规则链。 例如,下面的规则链将:

  • 若消息显示温度高于50度,则启动“高温报警”;
  • 若消息显示温度低于50度,则清楚“高温报警”;
  • 将有关“创建”和“清除”警报的事件转发到外部规则链,该规则链将会向相应用户发送通知。

消息队列

所有传入的消息都存储在队列中,然后由根规则链进行处理。消息处理完成后,将会被从队列中删除。考虑到安全性和性能因素,系统管理员可以为每个租户配置最大的队列尺寸和其他重要参数。要了解更多关于消息队列、确认标准和规则引擎内部的信息,请参阅架构页面。

规则节点类型

根据节点的特性将节点分类到不同的组:

  • 过滤节点--用于过滤和路由消息;
  • 富集节点--用于更新传入消息的元数据;
  • 转换节点--用于改变传入消息字段,如发起人、类型、有效负载、元数据;
  • 动作节点--根据传入消息执行各种动作;
  • 外部节点--用于与外部系统交互。

配置

每个规则节点都可能有特定的配置参数,这些参数取决于规则节点的实现方式。例如,“Filter - script”规则节点可以通过处理传入数据的定制JS函数进行配置。“外部发送电子邮件”节点配置允许指定邮件服务器连接参数。 可以通过双击规则链编辑器中的节点打开规则节点配置窗口:

测试JS函数

一些规则节点具有特定的UI特性,允许用户测试JS函数。单击Test Filter函数之后,您将看到JS编辑器,可以使用该编辑器替换输入参数并验证函数的输出。

你可以定义如下参数:

  • 消息类型--左上角区域
  • 消息有效负载--左侧消息模块
  • 右侧元数据模块的元数据
  • 过滤器模块JS脚本
  • 按下测试输出后,将返回到正确的输出部分。

故障调试

TB为每个规则节点提供检查传入和传出消息的功能。用户可在主配置窗口中选择“debug模式”复选框(参见配置部分的第一个图像)启用调试功能。 调试功能启用后,用户就可以查看相应关系类型中的传入和传出的消息信息。清参照以下调试示例图:

导入/导出

你可以将规则链导出为JSON格式,并将其导入到同一个或另一个TB实例中。 打开规则链页并单击位于特定规则链卡上的export按钮,可以导出规则链。

要导入规则链,您应该打开规则链页面并单击屏幕右下角的“+”按钮,然后单击import按钮。

results matching ""

    No results matching ""