规则
规则是 EMQX Platform 内置基于 SQL 的数据处理组件,搭配连接器使用无需编写代码即可实现一站式的 IoT 数据提取、过滤、转换、存储与处理,以加速应用集成和业务创新。
规则的组成
规则描述了 数据来源、数据处理过程、处理结果去向 三个方面:
数据来源:规则的数据源可以是消息或事件,也可以是外部的数据系统。规则通过 SQL 的 FROM 子句指定数据的来源,SQL 的 WHERE 子句用于过滤数据。有关支持的各种类型数据源和可以在 WHERE 子句中引用的字段的更多信息,请参阅 SQL 数据源和字段。
数据处理过程:规则通过 SQL 语句和函数来描述数据的处理过程。SQL 的 SELECT 子句以及 SQL 函数用于提取和转换数据;嵌入的 SQL 示例语句可用于实现高级转换,例如向输出消息添加时间戳。
有关语法和内置 SQL 函数的详细解释,请参阅规则 SQL 语法与示列和内置 SQL 函数。要了解更多关于 SQL 函数的信息,您还可以参考 jq 函数。
处理结果去向:动作解决了“将处理后的数据发送到哪里”的问题。它们告诉 EMQX Platform 如何处理规则产生的数据。在根据指定的规则处理输入之后,可以定义一个或多个动作来处理 SQL 执行结果。规则引擎将依次执行相应的动作。目前,规则支持以下两种类型的动作:
规则 SQL 语句简介
SQL 语句用于指定规则的数据来源、定义数据处理过程等。下面给出了一个 SQL 语句的例子:
SELECT
payload.data as d
FROM
"t/#"
WHERE
clientid = "foo"
在上述 SQL 语句里:
- 数据来源:主题为 t/# 的消息;
- 数据处理过程:如果发送消息的客户端 ID 为 foo,则从消息内容中选出 data 字段并赋值给新的变量 d。
TIP
"." 语法要求数据必须是 JSON 或者 Map 类型,如果是其他数据类型,须要使用 SQL 函数做数据类型转换。
关于规则的 SQL 语句格式和用法,详见 SQL 手册。
创建规则
进入到您的部署,并从左侧导航菜单点击数据集成进入数据集成页面。当您首次进入数据集成的初始页面,您可以根据需要选择数据集成的类型,通过点击相应的图标创建一个用于连接到目标服务的连接器。具体的连接器创建步骤,参阅创建连接器和各数据集成页面。
TIP
您可以通过点击新建连接器回到数据集成初始页面。
当您已经完成了连接器的创建,点击规则列表左上角的新建规则按钮,进入新建规则页面。您也可以通过点击连接器列表中的规则创建图标来创建新的规则。
对于消息重新发布类型,您无需创建连接器,可以在数据集成初始页面直接点击图标开始规则的创建过程。
您还可以在调试分类下点击空动作进入规则创建过程。空动作只配置规则,不关联任何动作,可以用来专门做规则的调试。具体内容参阅空动作(调试)。
定义数据源
在新建规则页面上,为您的规则输入名称并添加备注以便未来管理。
在 SQL 编辑器中,您可以自定义语句以添加适合您业务需求的数据源。可以输入以下 SQL 语句用于演示:
SELECT
timestamp as up_timestamp, clientid as client_id, payload.temp as temp, payload.hum as hum
FROM
"temp_hum/emqx"
通过指定此 SQL 语句,规则从发布到 temp_hum/emqx
主题的消息中读取报告的时间戳、clientid 以及包含在消息 payload 中的温度和湿度。
SQL 生成器
从 EMQX 5.91 以及之后的专有版部署开始,SQL 编辑器支持通过 AI 驱动的 SQL 生成器,使用自然语言生成规则 SQL。该功能允许您用自然语言描述预期行为,系统将自动生成相应的 SQL 语句用于规则引擎。
SQL 生成器默认处于启用状态。您可以通过 Dashboard 右上角的设置菜单中的开关将其禁用。
要使用该功能,请按照以下步骤操作:
进入创建规则页面,找到 SQL 编辑器区域。
点击 SQL 生成器按钮,打开使用 AI 生成 SQL 对话框。
根据以下提示填写字段:
任务描述(必填):使用自然语言描述您希望 SQL 实现的逻辑。
示例: “从 MQTT 消息的元数据中提取
clientid
,并从 payload 中提取device_id
和temperature
。仅匹配来自主题sensors/temperature
且温度大于 30 的消息。”相关主题(可选):指定要匹配的主题过滤器,如
sensors/temperature
。输入示例(JSON)(可选但推荐):提供一条 MQTT 消息的 payload 示例,帮助 AI 更好地理解数据结构。 示例:
json{ "device_id": "sensor001", "temperature": 32.5, "unit": "C" }
输出示例(JSON)(可选):指定期望的输出格式。 示例:
json{ "clientid": "client_a1b2c3", "device_id": "sensor001", "temperature": 32.5 }
TIP
提供输入和输出示例可以显著提升 SQL 生成的准确性。
点击生成以预览生成的 SQL。
在预览对话框中,您可以:
- 查看并手动编辑生成的 SQL;
- 点击应用 SQL,将其插入到 SQL 编辑器中;
- 或点击返回表单,修改任务描述或示例后重新生成。
如果点击应用 SQL,生成的 SQL 将自动出现在 SQL 编辑器中,您可继续查看和修改。
示例结果
根据上面的任务描述和示例,生成的 SQL 可能如下所示:
SELECT
clientid,
payload.device_id AS device_id,
payload.temperature AS temperature
FROM
"sensors/temperature"
WHERE
payload.temperature > 30
该规则从主题 sensors/temperature
中提取 clientid
、device_id
和 temperature
字段,并只处理温度大于 30 的消息。
使用 SQL 生成器的场景
SQL 生成器特别适用于以下情况:
- 您不熟悉 EMQX SQL 语法;
- 您希望快速原型设计一个规则;
- 您正在处理结构化的 JSON 消息 payload。
如需更多自定义功能和语法说明,请参阅 SQL 语法与示例文档。
测试 SQL 语句
点击启用调试开关来创建新的测试 SQL。填写适当的测试参数,并点击测试按钮。
在输出结果中,您可以看到预期的数据处理结果。
动作
创建规则之后,您可以为规则添加动作。详细内容,参考动作。
测试规则
注意
测试规则功能仅适用于专有版部署。
规则引擎提供了规则测试功能,可以使用模拟数据或真实客户端触发规则,执行规则 SQL 以及规则中添加的所有动作,并获得每个步骤的执行结果。
通过测试规则,可以验证规则是否按预期工作,快速排查并解决存在的问题。这不仅加快了开发速度,还确保了规则在实际运行时能够如期运行,避免在真实环境中出现故障。
测试步骤
点击启用调试开关,并将测试目标选择为规则。注意,开始测试之前需要先保存规则。
点击开始测试按钮开始测试,浏览器将等待当前规则触发以生成测试结果。
触发规则进行测试,支持以下 2 种方式:
模拟数据:点击输入模拟数据按钮,在弹出的窗口中选择与 SQL 匹配的数据来源,并确保它与规则中指定的来源(FROM 子句)保持一致。
EMQX 为所有字段提供了默认值,例如客户端 ID、用户名、主题、QoS、Payload 等。可以修改为需要的值,点击提交测试按钮即可触发一次规则进行测试。
真实设备:保持当前页面打开,使用真实客户端或 MQTT 客户端工具连接到 EMQX,触发对应的事件,进行测试。
查看测试结果:当规则被触发时,会将执行结果输出到控制台上,详细展示每个步骤的执行结果。
测试示例
以测试一个使用了默认规则 SQL 并添加了消息重发布动作的规则为例,您可以使用 MQTTX 创建一个客户端,然后使用此客户端订阅主题 a/1
并发送一条 t/1
的消息。您将在对话框中看到此消息被重新发布到主题 a/1
:
相应的,控制台测试界面上将显示整个规则的执行结果,显示内容如下:
- 左侧为规则执行记录,每次规则触发会产生一条记录,点击可以切换到对应的消息或事件详情。
- 右侧为选中规则记录下的动作列表,点击可以展开查看动作执行结果和日志。
当规则 SQL 或任意动作执行失败时,整个规则记录将标记为失败状态,可以选中记录查看对应动作的错误信息进行排查。
从上图可以看到,规则被触发了 4 次,其中 3 次规则执行完全成功,第 4 次由于 HTTP 服务动作执行失败,错误原因是服务不可用。
查看规则统计
您可以使用 MQTTX 连接到部署并模拟温湿度数据上报,发送消息到 temp_hum/emqx
主题以进行验证。
{
"temp": "27.5",
"hum": "41.8"
}
在规则列表点击规则 ID,在运行统计页面可以查看到规则的统计以及此规则下所有动作的统计。
查看单个动作统计
您可以在动作列表点击动作 ID,在运行统计页面可以查看到此动作的指标统计和速率统计。
TIP
目前只有专有版 v5 部署支持查看单个动作的指标。
编辑规则
您可以直接点击规则列表上的编辑图标来编辑该规则,也可以通过点击规则 ID,然后选择设置页签来编辑该规则。在设置页面,你可以编辑规则的 SQL 模板,同时可以编辑、添加动作。
启用和停用规则
可以在规则列表上启用和停用规则。点击是否启用开关即可开启或停用规则。
删除规则
可以在规则列表删除规则。点击删除按钮,输入规则 ID 后可删除规则。
启用或停用动作
注意
该功能仅适用于专有版部署。
可以在动作列表上启用和停用动作。点击是否启用开关即可开启或停用动作。
编辑和删除动作
可以在动作列表点击动作名称或编辑按钮,重新编辑动作。点击删除按钮删除动作。