本文将为您提供 EMQX 数据集成规则的调试指南,通过调试步骤的详细介绍,帮助您充分了解并利用这一强大的功能。
EMQX 规则引擎介绍
EMQX 规则引擎是一个基于 SQL 的数据处理组件,借助数据集成,用户无需编写代码即可完成物联网数据的提取、过滤、转换、存储和处理任务。
数据源:通过 SQL 中的 FROM 子句指定。 数据处理:通过 SQL 语句和函数进行描述。 结果输出:通过动作来处理输出结果,比如将其存储到数据库或重新发布到 MQTT 主题中。
将消息重新发布到 MQTT 主题。 输出到控制台。 发送到外部数据系统,如 Kafka、MySQL、PostgreSQL 等。
本指南将重点介绍如何在 EMQX 数据集成中调试这些规则,以确保它们在生产环境中能够按预期工作。
为什么需要规则测试?
4. 保障系统稳定性:通过预先测试和验证规则,降低了生产环境中出现未预见问题的风险。
规则测试功能使用教程
安装 EMQX Enterprise
docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.7.1
创建规则
{
"vehicle_id": "VH-958-XYZ",
"speed": 72,
"location": {
"latitude": 40.7128,
"longitude": -74.0060
},
"safety_features": {
"airbag_deployed": false,
"abs_status": "active"
},
"timestamp": "2024-07-11T15:45:00Z"
}
devices/#
主题,并设置条件为车速超过 120km/h 时触发。SELECT
username,
clientid,
payload.vehicle_id as vehicle_id,
payload.speed as speed,
payload.location.latitude as latitude,
payload.location.longitude as longitude,
payload.safety_features.airbag_deployed as airbag_deployed,
payload.safety_features.abs_status as abs_status,
timestamp
FROM
"devices/#"
WHERE payload.speed > '120'
设置 HTTP 服务
const express = require("express");
const app = express();
app.use(express.json());
app.post("/speed", (req, res) => {
const { speed, latitude, longitude } = req.body;
console.log(`Received data: Speed is ${speed} km/h at coordinates (${latitude}, ${longitude}).`);
res.status(200. send("Data received successfully!");
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
配置 PostgreSQL 数据库
services:
postgres:
image: postgres
environment:
POSTGRES_DB: emqx
POSTGRES_USER: admin
POSTGRES_PASSWORD: public
ports:
"5432:5432"
volumes:
/var/lib/postgresql/data :
CREATE TABLE car_infos (
id SERIAL PRIMARY KEY,
username VARCHAR(255),
clientid VARCHAR(255),
timestamp TIMESTAMP,
vehicle_id VARCHAR(255),
speed INT
);
INSERT INTO car_infos (
username,
clientid,
timestamp,
vehicle_id,
speed
) VALUES (
${username},
${clientid},
TO_TIMESTAMP(${timestamp}::bigint / 1000),
${vehicle_id},
${speed}
);
开始测试
devices/1
。speed
小于 120),您将在输出中看到 SQL No Result
,表示规则触发条件未被满足。speed
超过 120),每个测试实例将按时间顺序显示在测试界面的左侧面板中,显示事件或主题消息以及测试开始的时间。点击任意实例即可查看测试的详细结果。vehicle_id
的长度设置为超过 255 个字符,然后触发规则并测试上述修改。/
,则可能会出现「无法发布」之类的错误消息。/speed
路径,然后保存。此更改无需重新保存整个规则,只需重新发送测试数据即可。如果配置正确,HTTP 服务器将返回操作成功,相关数据也会显示在 HTTP 服务控制台上。string_data_right_truncation (22001)
vehicle_id
的长度调短,重新发送数据,并检查插入操作是否成功。您可以在结果部分查看,并使用 Postico 等工具验证数据库中的数据是否已正确存储。这种结构化的方法使得规则测试更为准确,同时增强了调试能力,能够帮助用户有效地调整和优化规则。
总结