# zhitan-gateway **Repository Path**: rtdata01/zhitan-gateway ## Basic Information - **Project Name**: zhitan-gateway - **Description**: 能源项目数据采集代码,自带一个mqtt案例,能帮助新手跑起来 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 29 - **Created**: 2025-11-20 - **Last Updated**: 2025-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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`: ```yaml 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 ``` ### 启动应用 ```bash # 编译 mvn clean compile # 运行 mvn spring-boot:run # 打包 mvn clean package java -jar target/MQTTGateway.jar ``` ## 数据格式 ### MQTT 消息示例 ```json { "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` ### 日志配置 ```yaml logging: level: com.zhitan: debug org.springframework: warn ``` ## 部署 ### Docker 部署 ```bash # 构建镜像 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 的连接参数。