场景
IOT设备上报数据中,需要帮助我们去刷选出符合我们业务需求的数据,例如电量小于30%、多设备通讯需要知道设备的上下线状态等。
规则引擎概述
EMQ提供了开源的规则引擎,使用WebHook资料类型,将数据发送到Web服务。企业版支持更多方式。
下图是EMQ规则引擎架构 :
基于SQL、动态配置EMQX消息流与设备事件的处理、响应规则,进行消息存储、事件处理。
当设备发送消息时,消息路由正常流转,发布到消息订阅者应用上,与此同时EMQ还会将消息流转到规则引擎,规则引擎进行刷选、匹配、处理,最后将符合条件的数据进行输出到MYSQL、HTTP等动作里面。
最小规则
- 触发事件 : 规则通过事件触发,触发时事件给规则注入事件的上下文信息,通过SQL的FROM字句指定事件类型;
- 处理规则(SQL) : 使用SELECT 字句和 WHERE字句以及内置处理函数,从上下文信息中过滤和处理数据
- 响应动作 : 如果有处理结果输出,规则将执行响应的动作,如持久化到数据库、重新发布处理后的消息、转发消息到消息队列等,一条规则可以配置多个响应动作。
事件主题
动作
十余种,例保存到MYSQL、转发到kafka、Redis、HTTP等
更多EMQ规则引擎介绍详见文档 : 官方文档
管理设备上下线
首先在EMQ的 Dashboard
页面创建规则,$events/client_connected
为设备上线事件、$events/client_disconnected
为设备下线事件。两者应在FROM字句后。
-
创建设备上线规则SQL :
SELECT clientid, connected_at FROM "$events/client_connected"
-
创建设备下线规则SQL:
SELECT clientid, disconnected_at FROM "$events/client_disconnected"
-
创建响应动作,以webhook为例:
点击保存,我们就可以收到设备上下线的消息了。