2025-10-27 17:27:22 +08:00

203 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 的连接参数。