
本文将为您提供 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 时触发。
SELECTusername,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,timestampFROM"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: postgresenvironment:POSTGRES_DB: emqxPOSTGRES_USER: adminPOSTGRES_PASSWORD: publicports:- "5432:5432"volumes:- pgdata:/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 等工具验证数据库中的数据是否已正确存储。


这种结构化的方法使得规则测试更为准确,同时增强了调试能力,能够帮助用户有效地调整和优化规则。
总结


文章转载自EMQX,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




