入门
什么是 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"
我们将看到遥测数据已成功保存。