# iot-platform **Repository Path**: RudolphLiu/iot-platform ## Basic Information - **Project Name**: iot-platform - **Description**: 一个物联网设备管理平台雏形 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-03 - **Last Updated**: 2025-08-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🌐 IoT 设备管理平台文档 > 版本:v-bata 1.0 > 作者:子丙 > 更新时间:2025-08-03 --- ## 🏗️ 系统架构概览 ``` 前端页面(Vue/React) → REST 接口(Spring Boot) → 核心服务 → MySQL、MQTT ↑ Mosquitto MQTT Broker ↑ 模拟设备 / 真设备 ``` --- ## 📦 主要功能模块 ### iot-application 设备的信息、配置、下发指令等管理接口 MQTT接收事件处理 (接收订阅的消息之后,根据业务选择性处理各种事件) 定时任务(用于定时下发指令给设备,定时设备属性上报) ### iot-common 公共模块,包含一些工具类、常量等 ### iot-data 预留模块,用于针对数据处理、数据展示做一些接口,目前暂未完成 ### iot-driver 设备驱动模块,包含设备的协议解析、指令下发等逻辑,通过观察者模式对MQTT消息框架进行封装,项目启动后会自动根据iot-application 模块中的配置加载驱动,地址以及端口号,订阅的内容以及QOS均在application模块的yml文件中配置 ## 数据库 ### 设备下发指令表 用于存储要对设备下发的指令,包含设备ID、命令类型、命令内容、状态等信息。 ```sql CREATE TABLE `iot`.`无标题` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备ID', `command_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '命令类型(如restart、set_config)', `command_payload` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '命令内容(JSON格式)', `status` tinyint NULL DEFAULT 0 COMMENT '状态:0待发送 1已发送 2已执行 3失败', `send_time` datetime NULL DEFAULT NULL COMMENT '发送时间', `response_payload` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '设备响应内容', `response_time` datetime NULL DEFAULT NULL COMMENT '设备响应时间', `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备命令下发记录表' ROW_FORMAT = Dynamic ``` ### 设备配置表 用于存储设备的配置信息,包含设备ID、配置项、配置值等。 ```sql CREATE TABLE `iot`.`无标题` ( `id` bigint NOT NULL AUTO_INCREMENT, `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备ID', `config_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '配置项键', `config_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '配置项当前值', `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'active' COMMENT '配置状态:active/pending/fail/success', `source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'platform' COMMENT '来源:platform/device', `last_update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_device_config`(`device_id` ASC, `config_key` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备当前配置项表' ROW_FORMAT = Dynamic; ``` ### 设备信息表 ```sql CREATE TABLE `iot`.`无标题` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备唯一标识符(如SN、MAC等)', `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备名称', `device_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备类型,如thermometer、sensor等', `protocol` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通信协议,如MQTT、Modbus、HTTP等', `ip_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备IP地址(如有)', `status` tinyint NULL DEFAULT 0 COMMENT '设备状态:0离线 1在线', `last_online_time` datetime NULL DEFAULT NULL COMMENT '最后上线时间', `last_offline_time` datetime NULL DEFAULT NULL COMMENT '最后下线时间', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '描述信息', `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `device_id`(`device_id` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备信息表' ROW_FORMAT = Dynamic; ``` ### 设备数据表 该表为临时表,一般设备数据都会存储在mongodb、TDengine等时序数据库中,或者使用InfluxDB等专门的时序数据库中,不会存mysql这种关系数据库。 ```sql CREATE TABLE `iot`.`无标题` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备ID', `property_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '属性名(如temperature)', `property_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '属性值(字符串存储,前端做解析)', `data_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据类型:int、float、bool、string等', `timestamp` datetime NOT NULL COMMENT '数据产生时间', `received_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '接收时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备属性上报表' ROW_FORMAT = Dynamic; ``` ### MQTT通讯设计 通过EMQX搭建MQTT服务 下载镜像 `docker pull emqx/emqx-enterprise:5.10.0` 启动容器 ```bash docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.10.0 ``` 由于我租了一台腾讯云服务器,所以我在服务器中安装了docker,再将mqtt搭建在docker中,方便使用 在搭建完MQTT之后,需要对MQTT的消息做一定的设计,主要是为了方便设备与平台之间的通信。以下是一些设计原则: 1. **主题设计**:使用层级化的主题结构,便于设备和 Data/device001 在Data/之后紧跟着设备ID,表示该设备的数据上报 2. **消息格式**:使用JSON格式,便于解析和扩展。每条消息应包含以下字段: - `device_id`:设备唯一标识符 - `timestamp`:数据产生时间 - `data`:设备上报的数据内容(键值对形式) - `command`:下发给设备的指令(如有) 3. **示例设备上报Json** ```json { "device_id": "device001", "timestamp": "2025-08-03T12:00:00Z", "data": { "temperature": 22.5, "humidity": 45 } } ``` 在设备上报数据时,设备会将数据发送到`Data/device001`主题下,平台订阅该主题以接收设备上报的数据。