feat(docs): 添加设备心跳表SQL文档
新增TDengine超级表device_heartbeat的建表语句及EMQX规则引擎配置示例。
This commit is contained in:
32
docs/sql/device_heartbeat.sql
Normal file
32
docs/sql/device_heartbeat.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
-- 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})
|
||||
Reference in New Issue
Block a user