-- 1. 创建数据库 mqtt(如果不存在) -- 建议指定时间精度为 ms(毫秒),与 EMQX 规则中的 now_timestamp('millisecond') 匹配 CREATE DATABASE IF NOT EXISTS mqtt PRECISION 'ms' KEEP 3650; -- 2. 切换到 mqtt 数据库 USE mqtt; -- 3. 创建超级表 device_heartbeat CREATE STABLE IF NOT EXISTS device_heartbeat ( ts TIMESTAMP, -- 必填,时间戳 (毫秒级),8字节 online BOOL, -- 设备状态:true=online, false=offline,1字节 ip VARCHAR(15), -- IPv4 地址,最多15字符,1字节/字符 + 1字节长度 rssi SMALLINT, -- 信号强度 (-128 到 127/32767),2字节 screen_on BOOL -- 屏幕开启状态 (true / false) 1字节 ) TAGS ( sn VARCHAR(32) -- 设备SN码,可变长字符串,比NCHAR省一半以上空间 ); -- 4.emqx rules SELECT payload.sn AS sn, payload.status AS status, payload.ip AS ip, payload.rssi AS rssi, payload.screenOn AS screen_on, now_timestamp('millisecond') AS ts FROM "ttstd/device/status" WHERE is_not_null(payload.sn) -- 5.emqx action 没有数据打开 "未定义变量作为 NULL" 开关 INSERT INTO mqtt.`hb_${sn}` USING mqtt.device_heartbeat TAGS ('${sn}') VALUES (${ts}, '${status}', '${ip}', ${rssi}, ${screen_on})