跳转至

入门

什么是 YiCONNECT 规则引擎?

规则引擎是一个易于使用的框架,用于构建基于事件的工作流程。有 3 个主要组成部分:

  • 消息 - 任何传入事件。它可以是来自设备的传入数据、设备生命周期事件、REST API 事件、RPC 请求等。
  • 规则节点 - 对传入消息执行的函数。有许多不同的节点类型可以对传入消息进行过滤、转换或执行某些操作。
  • 规则链 - 节点通过关系相互连接,因此来自规则节点的出站消息被发送到下一个连接的规则节点。

典型用例

YiCONNECT 规则引擎是一个高度可定制的框架,用于复杂事件处理。以下是一些可以通过 YiCONNECT 规则链进行配置的常见用例:

  • 在保存到数据库之前,对传入遥测或属性进行数据验证和修改。
  • 将遥测数据或属性从设备复制到相关资产,以便您可以聚合遥测数据。例如,来自多个设备的数据可以聚合在相关资产中。
  • 根据定义的条件创建/更新/清除警报。
  • 根据设备生命周期事件触发操作。例如,如果设备在线/离线,则创建警报。
  • 加载处理所需的附加数据。例如,在设备的客户或租户属性中定义的设备的负载温度阈值。
  • 触发对外部系统的 REST API 调用。
  • 当复杂事件发生时发送电子邮件,并使用电子邮件模板内其他实体的属性。
  • 在事件处理期间考虑用户偏好。
  • 根据定义的条件进行 RPC 调用。
  • 与 Kafka、Spark、AWS 服务等外部管道集成。

HelloWorld示例

假设您的设备使用 DHT22 传感器来收集温度并将其推送到 YiCONNECT。DHT22传感器可以测量-40°C至+80°C的温度。

在本教程中,我们将配置 YiCONNECT 规则引擎来存储 -40 到 80°C 范围内的所有温度,并将所有其他读数记录到系统日志中。

添加温度验证节点

在 YiCONNECT UI 中,转到规则链部分并打开 根规则链

图像

脚本过滤器规则节点拖放到链中。将打开节点配置窗口。

可以使用YICONNECT EL(YiCONNECT 表达式语言)或 JavaScript 来开发用户定义的函数。我们建议使用YICONNECT EL,因为与 JS 相比,它在 YiCONNECT 中的执行效率要高得多。

我们将使用此脚本进行数据验证:

return msg.temperature == null
|| (msg.temperature >= -40 && msg.temperature <= 80);

如果未定义温度属性或温度有效 - 脚本将返回 True ,否则将返回 False 。如果脚本返回True,传入消息将被路由到以True关系连接的下一个节点。

现在我们希望所有遥测请求都通过此验证脚本。我们需要删除消息类型切换节点和保存遥测节点 之间现有的后遥测关系:

图像

并使用Post Telemetry关系将Message Type Switch节点与Script Filter节点连接:

图像

图像

接下来,我们需要使用True关系将Script Filter节点与Save Telemetry节点连接起来。因此所有有效的遥测数据都将被保存:

图像

此外,我们将使用False关系将Script Filter节点与Log Other节点连接起来。这样所有无效的遥测数据都将记录在系统日志中:

图像

按“保存”按钮应用更改。

验证结果

为了验证结果,我们需要创建设备并将遥测数据提交到 YiCONNECT。因此,转到设备部分并创建新设备:

图像

为了发布设备遥测,我们将使用Rest API。为此,我们需要从设备DHT22复制设备访问令牌。

图像

使用终端将发送一条温度读数 = 99 的消息。将$ACCESS_TOKEN替换为实际设备令牌。

curl -v -X POST -d '{"temperature":99}' https://demo.yiqisoft.cn/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

图像

我们将看到设备最新遥测部分中添加遥测:

图像

现在发送一条温度读数 = 24 的消息。

curl -v -X POST -d '{"temperature":24}' https://demo.yiqisoft.cn/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

我们将看到遥测数据已成功保存。

图像