2025-10-27 17:27:22 +08:00
|
|
|
|
# Zhitan Gateway
|
2025-07-21 10:51:20 +00:00
|
|
|
|
|
2025-10-27 17:27:22 +08:00
|
|
|
|
基于 Spring Boot 的物联网 MQTT 数据网关,用于接收电力监测设备数据并存储至 InfluxDB 时序数据库。
|
2025-07-21 10:51:20 +00:00
|
|
|
|
|
2025-10-27 17:27:22 +08:00
|
|
|
|
## 技术栈
|
2025-07-21 10:51:20 +00:00
|
|
|
|
|
2025-10-27 17:27:22 +08:00
|
|
|
|
- **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** - 嵌入式服务器
|
2025-07-21 10:51:20 +00:00
|
|
|
|
|
2025-10-27 17:27:22 +08:00
|
|
|
|
## 核心功能
|
|
|
|
|
|
|
|
|
|
|
|
- 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
|
2025-07-21 10:51:20 +00:00
|
|
|
|
- Redis
|
2025-10-27 17:27:22 +08:00
|
|
|
|
|
|
|
|
|
|
### 配置文件
|
|
|
|
|
|
|
|
|
|
|
|
编辑 `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 连接池参数
|
2025-07-21 10:51:20 +00:00
|
|
|
|
|
|
|
|
|
|
## 许可证
|
2025-10-27 17:27:22 +08:00
|
|
|
|
|
|
|
|
|
|
Apache-2.0 License
|
2025-07-21 10:51:20 +00:00
|
|
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
- 本项目需要依赖 MQTT Broker 和 InfluxDB/MySQL 等数据库,请确保相关服务已启动。
|
|
|
|
|
|
- 配置文件中需根据实际环境修改配置,特别是数据库和 MQTT 的连接参数。
|