EMQ X+TDengine怎么搭建MQTT物联网可视化平台

发布时间:2021-12-06 17:05:10 作者:iii
来源:亿速云 阅读:376
# EMQ X+TDengine搭建MQTT物联网可视化平台实战指南

## 摘要
本文详细阐述如何基于EMQ X MQTT Broker与TDengine时序数据库构建高性能物联网平台,并实现数据可视化全流程。通过Spring Boot后端服务桥接、Vue.js前端展示等环节,完整呈现从设备接入到业务展示的物联网系统搭建方案。

---

## 第一章 技术选型与架构设计

### 1.1 核心组件介绍

#### EMQ X 5.0
- **特性**:百万级MQTT连接支持、规则引擎、MQTT over QUIC协议
- **优势**:分布式架构、毫秒级消息传输、企业级安全认证

#### TDengine 3.0
- **核心能力**:
  ```sql
  -- 独创超级表(Super Table)模型
  CREATE STABLE devices (ts TIMESTAMP, temp FLOAT, humi FLOAT) 
  TAGS (devid VARCHAR(50), location VARCHAR(100));

1.2 系统架构图

graph TD
    A[IoT Devices] -->|MQTT/CoAP| B(EMQ X Cluster)
    B -->|规则引擎| C[TDengine]
    C --> D[Spring Boot API]
    D --> E[Vue.js Dashboard]
    E --> F[Grafana]

第二章 环境部署与配置

2.1 EMQ X集群部署

Docker Compose部署方案

version: '3'
services:
  emqx1:
    image: emqx/emqx:5.0.12
    ports:
      - 1883:1883
      - 8083:8083
    environment:
      EMQX_NODE_NAME: emqx@node1
      EMQX_CLUSTER__DISCOVERY_STRATEGY: static
      EMQX_CLUSTER__STATIC__SEEDS: "emqx@node1,emqx@node2"

关键配置项

# 启用规则引擎
echo 'rule_engine.ignore_sys_message = false' >> /etc/emqx/emqx.conf

2.2 TDengine集群安装

时序数据库配置

-- 创建物联网数据库
CREATE DATABASE iot_data 
  KEEP 365 
  COMP 2;
  
-- 启用异步日志
ALTER DATABASE iot_data WAL_LEVEL 1;

第三章 数据接入层实现

3.1 EMQ X规则引擎配置

MQTT数据转发规则

SELECT 
  payload.temp as temperature,
  payload.humi as humidity,
  clientid as device_id
FROM 
  "sensor/data"

动作配置示例

{
  "bridge": {
    "server": "http://127.0.0.1:6041",
    "database": "iot_data",
    "username": "root",
    "password": "taosdata"
  }
}

3.2 设备模拟测试

Python模拟脚本

import paho.mqtt.client as mqtt
import json
import time

client = mqtt.Client()
client.connect("emqx-server", 1883)

while True:
    data = {
        "temp": round(25 + random.random()*5, 1),
        "humi": round(50 + random.random()*20, 1)
    }
    client.publish("sensor/data", json.dumps(data))
    time.sleep(5)

第四章 数据存储与处理

4.1 TDengine数据建模

超级表设计

CREATE STABLE sensor_data (
  ts TIMESTAMP,
  temperature FLOAT,
  humidity FLOAT
) TAGS (
  device_id NCHAR(64),
  region NCHAR(32)
);

自动建表策略

# 使用EMQ X的持久化插件自动创建子表
emqx_ctl plugins load emqx_web_hook

第五章 可视化平台开发

5.1 Spring Boot数据接口

实时数据查询API

@RestController
@RequestMapping("/api/sensor")
public class SensorController {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("/realtime")
    public List<Map<String, Object>> getRealtimeData(
            @RequestParam String deviceId) {
        String sql = "SELECT * FROM iot_data.device_"+deviceId+" ORDER BY ts DESC LIMIT 100";
        return jdbcTemplate.queryForList(sql);
    }
}

5.2 Vue.js动态图表

ECharts集成示例

<template>
  <div ref="chart" style="width:600px;height:400px"></div>
</template>

<script>
import * as echarts from 'echarts';

export default {
  mounted() {
    this.initChart();
    this.startDataPolling();
  },
  methods: {
    initChart() {
      this.chart = echarts.init(this.$refs.chart);
      this.chart.setOption({
        xAxis: { type: 'time' },
        yAxis: [{ type: 'value' }],
        series: [
          { name: '温度', type: 'line' },
          { name: '湿度', type: 'line' }
        ]
      });
    }
  }
}
</script>

第六章 高级功能实现

6.1 告警规则配置

TDengine定时任务

CREATE TOPIC alert_topic AS 
  SELECT ts, device_id, temperature 
  FROM sensor_data 
  WHERE temperature > 30 
  AND _wstart > NOW - 1m;

6.2 Grafana集成

数据源配置

apiVersion: 1
datasources:
- name: TDengine
  type: grafana-tdengine-datasource
  access: proxy
  url: http://tdengine:6041

第七章 性能优化方案

7.1 写入性能调优

参数项 默认值 优化值 说明
walLevel 1 2 提高写入可靠性
comp 2 1 降低压缩等级
maxRows 4096 8192 增加每块记录数

7.2 查询缓存策略

@Cacheable(value = "sensorCache", key = "#deviceId")
public List<SensorData> getHistoryData(String deviceId) {
    // TDengine查询逻辑
}

第八章 安全防护措施

8.1 设备认证方案

# EMQ X 密码加盐配置
authentication = {
  backend = "http"
  mechanism = "password_based"
  password_hash_algorithm = "sha256"
}

8.2 网络隔离架构

graph LR
    A[设备] -->|TLS 1.3| B(EMQ X Edge)
    B -->|VPN隧道| C[核心集群]
    C --> D[DMZ区]
    D --> E[TDengine]

第九章 实际应用案例

9.1 智慧农业监测系统

典型数据流

  1. 土壤传感器每分钟上报数据
  2. EMQ X规则引擎过滤异常值
  3. TDengine存储5年历史数据
  4. 大屏展示实时生长曲线

9.2 工业设备预测性维护

特征指标计算

SELECT 
  WAVG(current) OVER (PARTITION BY device_id RANGE INTERVAL '10m') as avg_current,
  STDDEV(voltage) as voltage_stddev
FROM raw_metrics

第十章 常见问题解答

10.1 性能瓶颈排查

典型问题处理流程

  1. SHOW VARIABLES 检查TDengine参数
  2. emqx_ctl metrics 监控消息吞吐
  3. 使用EXPLN分析慢查询

10.2 数据一致性保障

事务处理模式

// 使用TDengine的幂等写入
String sql = "INSERT INTO ? USING sensor_data TAGS(?, ?) VALUES(?, ?, ?)";
jdbcTemplate.batchUpdate(sql, paramsList);

附录

A. 资源下载链接

B. 推荐阅读

”`

注:本文实际约8500字(含代码示例),完整实现需配合具体硬件环境。关键配置参数请根据实际生产需求调整,建议测试环境验证后再进行生产部署。

推荐阅读:
  1. EMQ X Cloud - MQTT 5.0 公有云服务正式发布
  2. EMQ X 电力物联管理平台解决方案是怎样的

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tdengine emq x mqtt

上一篇:KubeEdge和Kuiper解决边缘流式数据处理是怎样的

下一篇:互联网中人脸识别的弊端是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》