2026-01-05 16:17:09 +08:00
2026-01-05 16:17:09 +08:00
2025-03-31 14:59:45 +08:00
2025-03-18 17:30:22 +08:00
2025-03-31 14:59:45 +08:00
2025-10-27 17:27:22 +08:00

Zhitan Gateway

基于 Spring Boot 的物联网 MQTT 数据网关,用于接收电力监测设备数据并存储至 InfluxDB 时序数据库。

技术栈

  • Spring Boot 2.6.15 - 应用框架
  • Spring Integration MQTT - MQTT 消息集成
  • InfluxDB 6.6.0 - 时序数据库
  • MyBatis Plus 3.5.6 - ORM 框架
  • PostgreSQL - 关系数据库
  • Redis - 缓存中间件
  • Druid 1.2.20 - 数据库连接池
  • Undertow - 嵌入式服务器

核心功能

  • MQTT 消息订阅与实时接收
  • 电力数据 JSON 解析与转换
  • 点位模板映射(支持 Redis 缓存)
  • InfluxDB 时序数据批量写入
  • Druid 连接池监控

项目结构

src/main/java/com/zhitan/
├── config/
│   ├── influxdb/          # InfluxDB 配置
│   ├── mqtt/              # MQTT 客户端配置
│   ├── mybatis/           # MyBatis Plus 配置
│   ├── redis/             # Redis 配置
│   └── DruidConfig.java   # Druid 数据源配置
├── handler/
│   └── MqttMessageHandler.java  # MQTT 消息处理器
├── influxdb/
│   └── InfluxdbRepository.java  # InfluxDB 数据操作
├── mapper/
│   └── CommonMapper.java        # 数据访问接口
├── model/
│   ├── entity/ElectricPower.java  # 电力数据实体
│   └── IndexTemplate.java         # 点位模板
├── redis/
│   └── RedisCache.java           # Redis 缓存工具
├── service/
│   └── impl/DataServiceImpl.java # 数据处理服务
└── MQTTGatewayApplication.java   # 启动类

快速开始

环境要求

  • JDK 8+
  • Maven 3.6+
  • MQTT Broker
  • InfluxDB 2.x
  • PostgreSQL
  • Redis

配置文件

编辑 application-dev.yml

spring:
  datasource:
    druid:
      master:
        url: jdbc:postgresql://localhost:5432/energy
        username: postgres
        password: postgres
  mqtt:
    client-id: your-client-id
    broker-url: tcp://broker.emqx.io
    username: 
    password: 
    default-topic: zhitan
    timeout: 30
    keep-alive: 60
  redis:
    host: localhost
    port: 6379
    password: 

influxdb:
  host: http://localhost:8086
  org: your-org
  bucket: your-bucket
  token: your-token
  measurement: data
  enable: true

启动应用

# 编译
mvn clean compile

# 运行
mvn spring-boot:run

# 打包
mvn clean package
java -jar target/MQTTGateway.jar

数据格式

MQTT 消息示例

{
  "SN": "device001",
  "Pt": 2250.5,
  "Ua": 220.1,
  "Ub": 221.3,
  "Uc": 219.8,
  "Ia": 10.2,
  "Ib": 10.5,
  "Ic": 10.1,
  "Pw": 2250.0,
  "Pwa": 750.0,
  "Pwb": 750.0,
  "Pwc": 750.0,
  "Time": "2024-01-01 12:00:00",
  "Type": 1
}

支持的电力参数

  • 电压: Ua, Ub, Uc (相电压), Uab, Ubc, Uca (线电压)
  • 电流: Ia, Ib, Ic
  • 功率: Pt (总功率), Pw/Pwa/Pwb/Pwc (有功功率), Pq/Pqa/Pqb/Pqc (无功功率)
  • 电量: Q, Qa, Qb, Qc

数据流程

MQTT Broker → MqttInboundConfig → MqttMessageHandler 
    → DataServiceImpl → IndexTemplate 映射 → InfluxDB
                     ↓
                Redis 缓存
  1. 订阅 MQTT Topic 接收消息
  2. 解析 JSON 为 ElectricPower 对象
  3. 从数据库/缓存获取点位模板
  4. 映射字段并转换为 InfluxDB Point
  5. 批量写入时序数据库

监控管理

Druid 监控

访问: http://localhost:8080/druid/

  • 用户名: admin
  • 密码: 123456

日志配置

logging:
  level:
    com.zhitan: debug
    org.springframework: warn

部署

Docker 部署

# 构建镜像
docker build -t zhitan-gateway .

# 运行容器
docker run -d \
  -p 8080:8080 \
  -e MQTT_BROKER=tcp://mqtt-broker:1883 \
  -e INFLUXDB_HOST=http://influxdb:8086 \
  zhitan-gateway

生产环境建议

  • 调整日志级别为 INFO
  • 配置 MQTT 自动重连
  • 启用 InfluxDB 批量写入
  • 设置 Redis 缓存过期时间
  • 配置 Druid 连接池参数

许可证

Apache-2.0 License

注意事项

  • 本项目需要依赖 MQTT Broker 和 InfluxDB/MySQL 等数据库,请确保相关服务已启动。
  • 配置文件中需根据实际环境修改配置,特别是数据库和 MQTT 的连接参数。
Description
上海干巷注塑车间智慧能耗系统的MQTT数据网关,用于接收电力监测设备数据并存储至 InfluxDB 时序数据库
Readme 85 KiB