43 lines
1.1 KiB
SQL
43 lines
1.1 KiB
SQL
USE iot_log;
|
||
|
||
-- 创建同时记录上下线状态的超级表
|
||
CREATE STABLE IF NOT EXISTS device_status_log (
|
||
ts TIMESTAMP, -- 事件发生时间
|
||
event VARCHAR(16), -- 事件类型: 'connected' 或 'disconnected'
|
||
reason VARCHAR(64), -- 下线原因(上线时填 'clean_start' 或 'none')
|
||
peername VARCHAR(64) -- 客户端 IP 及端口
|
||
) TAGS (
|
||
clientid VARCHAR(128),
|
||
username VARCHAR(128)
|
||
);
|
||
|
||
-- emqx 设备离线 rules
|
||
SELECT
|
||
clientid,
|
||
username,
|
||
peername,
|
||
reason,
|
||
disconnected_at AS ts,
|
||
'disconnected' AS event
|
||
FROM
|
||
"$events/client_disconnected"
|
||
|
||
-- emqx 设备离线 action
|
||
INSERT INTO mqtt.device_${clientid}
|
||
USING mqtt.device_status_log TAGS ('${clientid}', '${username}')
|
||
VALUES (${ts}, '${event}', '${reason}', '${peername}');
|
||
|
||
-- emqx 设备上线 rules
|
||
SELECT
|
||
clientid,
|
||
username,
|
||
peername,
|
||
connected_at AS ts,
|
||
'connected' AS event
|
||
FROM
|
||
"$events/client_connected"
|
||
|
||
-- emqx 设备上线 action
|
||
INSERT INTO mqtt.device_${clientid}
|
||
USING mqtt.device_status_log TAGS ('${clientid}', '${username}')
|
||
VALUES (${ts}, '${event}', 'none', '${peername}'); |