问题描述
如何标记接入EMQX的设备在线状态,并在MySQL中记录设备上下线日志。
准备数据库表
-- 设备表
CREATE TABLE devices (
id INT NOT NULL,
client_id VARCHAR(255) NOT NULL AUTO_INCREMENT COMMENT '客户端 ID',
status TINYINT(3) NOT NULL DEFAULT 0 COMMENT '状态 0 离线 1 在线',
connected_at VARCHAR(45) NULL COMMENT '连接时间,毫秒级时间戳',
PRIMARY KEY (id));
-- 初始化数据
INSERT INTO devices (client_id) VALUES ('emqx_c');
-- 连接记录表
CREATE TABLE device_connect_log (
id INT NOT NULL AUTO_INCREMENT COMMENT ,
client_id VARCHAR(255) NOT NULL '客户端 ID',
action TINYINT(3) NOT NULL DEFAULT 0 COMMENT '动作 0 其他 1 上线 2 下线 3 订阅 4 取消订阅',
target VARCHAR(255) NULL COMMENT '操作目标',
create_at VARCHAR(45) NULL COMMENT '记录时间',
PRIMARY KEY (id));
在资源中创建 MySQL 连接
在EMQX的Dashboard -->规则引擎–>资源页面点击‘创建’按钮,选择MySQL资源类,将相应的参数填入,测试连接,无问题后保存。
创建规则
规则引擎 --> 规则 页面中点击 新建 按钮进入规则创建页面
点击添加动作
UPDATE devices
SET satus=1, connected_at= ${connected_at}
WHERE client_id= ${client_id}
LIMIT 1
再添加一个动作,在设备连接表 中插入一条记录,记录设备上线历史:
INSERT INTO device_connect_log
(client_id, action, create_at)
VALUES (${client_id}, '1', ${connected_at});
点击 '创建 '完成规则的创建,该条规则包含两个动作。
相似的可以创建下线状态规则。