# gwiot
**Repository Path**: dust123/gwiot
## Basic Information
- **Project Name**: gwiot
- **Description**: 本项目开始原因是由于学习嵌入式班级进行过物联网系统的开发,并且发现存在重复封装及研究mqtt服务的问题,在实习后在公司iot部门,故而萌发了,通过研究和学习的思想。收集网络上相关资料,简易实现一个物联网中台系统。本系统后端使用了java+springboot+es+influxdb+emqx等技术,前端使用了vue3.x+elementui-plus+echarts+ts等技术。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 17
- **Created**: 2026-06-30
- **Last Updated**: 2026-06-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 物联网中台系统 (gwiot)
## 项目简介
gwiot 是一套基于 Spring Boot 构建的完整物联网中台系统解决方案。该系统采用前后端分离架构,后端为 Spring Boot 单体应用,前端使用 Vue3 和 Element Plus 构建现代化管理界面。系统提供从设备接入、数据采集、存储、处理到可视化展示的全链路物联网能力,支持大规模设备连接和海量数据处理。
本项目作为毕业设计项目开源,旨在为物联网开发者提供一套可参考的企业级物联网平台架构实现。
## 核心特性
### 设备管理
- 支持设备注册、状态管理、标签分组
- 设备在线状态实时监控
- 设备地理位置信息管理
- 批量设备操作支持
### 数据采集与处理
- 基于 MQTT 协议实现设备数据接入
- 支持多种数据格式解析和转换
- 实时数据指标采集与存储
- 数据阈值监控与告警触发
### 告警系统
- 多级告警策略配置
- 实时告警通知
- 告警日志记录与追溯
- 告警趋势分析
### 可视化报表
- 设备状态统计看板
- 指标趋势图表展示
- 地理位置分布可视化
- 自定义仪表盘配置
## 技术架构
### 后端技术栈
| 技术 | 版本 | 用途 |
|------|------|------|
| Spring Boot | 2.7.18 | 应用框架 |
| MyBatis Plus | 3.3.1 | ORM 持久层 |
| InfluxDB | 2.19 | 时序数据存储 |
| MQTTv3 | 1.2.25 | 消息队列通信 |
| Redis | - | 缓存与会话管理 |
| Elasticsearch | - | 设备搜索与地理位置 |
### 前端技术栈
| 技术 | 版本 | 用途 |
|------|------|------|
| Vue3 | 3.x | 前端框架 |
| Element Plus | 2.6.4 | UI 组件库 |
| TypeScript | 4.1.5 | 类型安全 |
| Vuex4 | 4.0.0 | 状态管理 |
| Vue Router | 4.0.0 | 路由管理 |
| Axios | 0.24.0 | HTTP 客户端 |
| ECharts | 5.3.2 | 图表可视化 |
### 系统架构
```
┌─────────────────────────────────────────────────────────────┐
│ 前端展示层 │
│ Vue3 + Element Plus + ECharts + Vuex + Vue Router │
├─────────────────────────────────────────────────────────────┤
│ API 网关层 │
│ Spring Boot RESTful API + JWT 认证 │
├───────────────┬───────────────┬───────────────┬─────────────┤
│ 设备管理 │ 数据采集 │ 告警系统 │ 报表中心 │
│ Service │ Service │ Service │ Service │
├───────────────┴───────────────┴───────────────┴─────────────┤
│ 消息处理层 (MQTT) │
│ EmqClient + EmqMsgProcess │
├─────────────────────────────────────────────────────────────┤
│ 数据持久层 │
│ MySQL │ InfluxDB │ Elasticsearch │ Redis │
└─────────────────────────────────────────────────────────────┘
```
## 项目结构
```
gwiot/
├── gwiot-backend/ # 后端 Spring Boot 项目
│ ├── src/main/java/com/lhg/
│ │ ├── config/ # 配置类
│ │ ├── constant/ # 常量定义
│ │ ├── controller/ # REST 控制器
│ │ ├── exception/ # 异常处理
│ │ ├── framework/ # 框架核心组件
│ │ │ ├── emq/ # MQTT 客户端封装
│ │ │ ├── es/ # Elasticsearch 操作
│ │ │ ├── influx/ # InfluxDB 操作
│ │ │ └── security/ # 安全认证
│ │ ├── mapper/ # MyBatis Mapper
│ │ ├── pojo/ # 实体类与传输对象
│ │ │ ├── dto/ # 数据传输对象
│ │ │ ├── entity/ # 数据库实体
│ │ │ ├── model/ # 业务模型
│ │ │ └── vo/ # 视图对象
│ │ ├── service/ # 业务服务层
│ │ ├── utils/ # 工具类
│ │ └── web/ # Web 相关
│ └── src/main/resources/ # 配置文件
├── gwiot-ui/ # 前端 Vue3 项目
│ ├── src/
│ │ ├── api/ # API 接口封装
│ │ ├── assets/ # 静态资源
│ │ ├── components/ # 公共组件
│ │ ├── layout/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ ├── store/ # Vuex 状态管理
│ │ ├── utils/ # 工具函数
│ │ └── views/ # 页面视图
│ └── public/ # 公共资源
├── docs/ # 文档与资源
│ ├── images/ # 截图展示
│ ├── docker-compose.yaml # Docker 编排配置
│ └── init.sql # 数据库初始化脚本
└── pom.xml # Maven 配置
```
## 快速开始
### 环境要求
**后端服务**
- JDK 1.8+
- MySQL 5.7+
- Redis 6.x+
- InfluxDB 2.x
- Elasticsearch 7.x
- EMQ X Broker 4.x
**前端服务**
- Node.js 16.x+
- npm 或 yarn
### 数据库初始化
执行 `docs/init.sql` 文件创建所需的数据表结构。
### 后端配置
编辑 `gwiot-backend/src/main/resources/application.yml`,配置数据库、Redis、InfluxDB、Elasticsearch 和 EMQ X 连接信息。
```yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/gwiot
username: your_username
password: your_password
redis:
host: localhost
port: 6379
influxdb:
url: http://localhost:8086
database: your_database
elasticsearch:
host: localhost
port: 9200
emq:
mqtt-server-url: tcp://localhost:1883
```
### 后端启动
```bash
cd gwiot-backend
mvn spring-boot:run
```
### 前端启动
```bash
cd gwiot-ui
npm install
npm run dev
```
### Docker 部署
使用 Docker Compose 一键部署所有服务:
```bash
cd docs
docker-compose up -d
```
## API 接口文档
### 设备管理
| 接口 | 方法 | 描述 |
|------|------|------|
| `/device` | GET | 分页查询设备列表 |
| `/device/clientAction` | PUT | 设备状态控制 |
| `/device/status` | PUT | 更新设备状态 |
| `/device/tags` | PUT | 更新设备标签 |
| `/device/deviceQuota` | GET | 查询设备指标数据 |
### 指标管理
| 接口 | 方法 | 描述 |
|------|------|------|
| `/quota` | POST | 创建指标 |
| `/quota` | GET | 分页查询指标 |
| `/quota/numberQuota` | GET | 查询数值型指标 |
| `/quota/{id}` | DELETE | 删除指标 |
### 告警管理
| 接口 | 方法 | 描述 |
|------|------|------|
| `/alarm` | POST | 创建告警规则 |
| `/alarm` | GET | 分页查询告警 |
| `/alarm/log` | GET | 查询告警日志 |
| `/alarm/{id}` | DELETE | 删除告警规则 |
### 报表统计
| 接口 | 方法 | 描述 |
|------|------|------|
| `/report/statusCollect` | GET | 设备状态统计 |
| `/report/trend/{startTime}/{endTime}/{type}` | GET | 指标趋势分析 |
| `/report/top10Alarm/{startTime}/{endTime}` | GET | TOP10 告警设备 |
| `/report/boardData/{id}/{start}/{end}/{type}` | GET | 仪表盘数据 |
### 位置服务
| 接口 | 方法 | 描述 |
|------|------|------|
| `/gps` | GET | 获取 GPS 配置 |
| `/gps` | PUT | 更新 GPS 配置 |
| `/gps/deviceList/{lat}/{lon}/{distance}` | GET | 附近设备搜索 |
## 核心流程
### 设备数据接入流程
```
设备 → MQTT 消息 → EmqMsgProcess 消息处理 → 数据解析 →
指标验证 → 告警判断 → 存储 InfluxDB → 更新 ES 索引 → WebSocket 推送
```
### 告警触发流程
```
数据采集 → 指标比对 → 触发阈值 → 告警记录 →
通知服务 → WebHook 推送 → 状态更新
```
## 效果展示




## 项目初衷
本项目作为毕业设计作品,旨在将物联网平台的核心技术进行整合实践。系统实现了从设备接入到数据可视化展示的完整链路,涵盖了物联网中台系统的主要功能模块。
> **声明**:本项目仅供学习参考,请勿用于商业用途。
## License
本项目遵循开源协议,具体协议信息请查看项目根目录 LICENSE 文件。