# 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)

Spring Boot Vue3 MQTT

## 项目简介 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 推送 → 状态更新 ``` ## 效果展示 ![设备管理](./docs/images/img.png) ![数据监控](./docs/images/img_1.png) ![告警管理](./docs/images/img_2.png) ![地理分布](./docs/images/img_3.png) ## 项目初衷 本项目作为毕业设计作品,旨在将物联网平台的核心技术进行整合实践。系统实现了从设备接入到数据可视化展示的完整链路,涵盖了物联网中台系统的主要功能模块。 > **声明**:本项目仅供学习参考,请勿用于商业用途。 ## License 本项目遵循开源协议,具体协议信息请查看项目根目录 LICENSE 文件。