砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页
    • 开发板介绍
    • micropython环境搭建
    • esp32开发板
    • 面包板
    • 万能表使用
  • 面包板
    • 点灯
  • esp32
    • 点亮开发板led灯
    • 点亮外接led
    • 点亮外接oled文字
    • 红外传感器
    • 红外传感器+olde
    • esp32+面包板
  • MQTT编程

    • MQTT入门

      • 物联网 MQTT
      • 物联网 MQTT和Socket
      • 物联网 MQTT订阅性能优势
      • 物联网 MQTT简易版Broker
    • HiveMQ

      • hivemq实战入门
    • Protobuf

      • Protobuf入门
      • Protobuf入门+梳理
      • Protobuf实战第一篇
    • emqx

      • emqx入门
    • mica

      • mica入门
    • netty

      • 入门

        • 基于netty构建入门
        • 理解粘包/拆包
        • 编解码器机制与自定义协议
        • 心跳和ack机制
        • mqtt服务demo演示
        • mqtt服务协议支持
        • mqtt服务udp支持
      • 协议规范

        • mqtt协议规范(发布/订阅模式)
        • mqtt协议规范(轻量级二进制协议)
        • mqtt协议规范(三种 QoS 等级)
        • mqtt协议规范(主题通配符订阅)
        • mqtt协议规范(遗嘱与保留消息)
      • 报文结构

        • 控制报文结构(报文分类)
        • 控制报文结构(连接与握手)
        • 控制报文结构(发布与接收)
      • 核心实战

        • 核心实战(握手与认证)
        • 核心实战(心跳保活机制)
        • 核心实战(会话管理)
        • 核心实战(安全)
    • mqtt-模拟器|客户端

      • 集成Paho

        • 设备模拟器设计
        • 设备模拟器演示
        • Paho拆解入门
        • Paho拆解核心
        • Paho拆解高性能
        • 其他客户端框架比较
      • NetAssist

        • 设备模拟器设计
      • hiveMq

        • hiveMq客户端
    • netty-mqtt-boot

      • 模块化设计
      • 统一接入层
      • 消息路由与流转层
      • 核心服务层
      • 业务应用层
      • 整体项目管理
      • 测试脚手架
      • 兼容支持
    • mqtt-压测

      • mqtt-jmeter

        • 模块化设计
      • ‌emqtt-bench

        • 模块化设计
    • mqtt-规则引擎

      • MQTT规则引擎
      • sql

        • 基于sql规则
      • ice

        • 模块化设计
      • Aviator

        • 模块化设计
      • Drools

        • 模块化设计
    • mqtt-实战问题

      • MQTT分布式集群

        • 分布式集群

          • 分布式集群意义
          • 如何构建分布式集群
          • 分布式集群简易版
          • mqtt入口HAProxy模拟负载
        • ignite

          • ignite入门
          • 模块化设计
      • 实战汇总

        • 分布式集群意义
  • mqtt-netty源码拆解

    • mqtt-netty源码拆解

      • Pipeline双向链表
      • MqttEncoder.INSTANCE
      • 分布式集群简易版
      • mqtt入口HAProxy模拟负载
  • 1. 产品概述
  • 2. 核心功能
    • 2.1 用户角色
    • 2.2 功能模块
    • 2.3 页面详情
  • 3. 核心流程
    • 3.1 订单执行流程
    • 3.2 用户登录流程
    • 3.3 指令下发流程
  • 4. 用户界面设计
    • 4.1 设计风格
    • 4.2 页面设计概述
    • 4.3 响应式设计
  • 5. 对外API接口设计
    • 5.0 接口使用场景说明
    • 5.1 接口列表
    • 5.3 接口详细定义
      • 5.3.0 接口认证
      • 5.3.1 login
      • 5.3.2 find_nearest_device
      • 5.3.3 create_order
      • 5.3.4 get_order_status
      • 5.3.5 cancel_order
      • 5.3.6 get_order_media
  • 6. 数据模型设计
    • 6.1 核心实体
      • 6.1.1 用户表 (users)
      • 6.1.2 基础设施表 (infrastructures)
      • 6.1.3 移动设备表 (mobile_devices)
      • 6.1.4 事件表 (events)
      • 6.1.5 订单表 (orders)
      • 6.1.6 指令表 (commands)
      • 6.1.7 系统配置表 (system_config)
      • 6.1.8 告警规则表 (alert_rules)
  • 7. 业务规则
    • 7.1 设备管理规则
    • 7.2 订单执行规则
    • 7.3 设备管理规则补充
    • 7.4 指令下发规则
  • 8. 非功能需求
    • 8.1 性能要求
    • 8.2 安全要求
    • 8.3 可用性要求
    • 8.4 可扩展性要求
    • 8.5 数据存储策略
      • 8.5.1 历史状态数据存储分析
      • 8.5.2 分层存储策略
      • 8.5.3 历史状态数据聚合规则
      • 8.5.4 数据清理机制
  • 9. MQTT通信设计
    • 9.1 协议概述
    • 9.2 MQTT主题设计
      • 9.2.1 设备上报主题
      • 9.2.2 指令下发主题
      • 9.2.3 指令响应主题
    • 9.3 消息格式定义
      • 9.3.1 设备状态上报消息
      • 9.3.2 设备事件上报消息
      • 9.3.3 指令下发消息
      • 9.3.4 指令响应消息
    • 9.4 连接管理
      • 9.4.1 设备认证
      • 9.4.2 心跳机制
      • 9.4.3 消息QoS
  • 10. 技术栈建议
    • 10.1 前端
    • 10.2 后端
    • 10.3 基础设施
  • 11. 里程碑规划

1. 产品概述

智能设备后台管理系统是一个面向无人机、无人船、无人车及其配套基础设施(机库、船坞、车桩)的综合性管理平台。系统通过MQTT协议与设备进行实时通信,提供设备基础信息管理、实时状态监控、事件日志记录、远程指令操控等核心功能,并对外提供标准HTTP接口供小程序等第三方系统调用。

  • 主要目的:实现对多种智能设备的统一管理、实时监控和远程控制
  • 目标用户:设备运维人员、系统管理员、第三方开发者(通过API)
  • 市场价值:提高设备管理效率,降低运维成本,支持业务系统对接

2. 核心功能

2.1 用户角色

角色注册方式核心权限
系统管理员手动创建完整权限,包括用户管理、系统配置
设备管理员手动创建设备管理、指令下发、订单管理

2.2 功能模块

  1. 仪表盘:设备概览统计、实时状态监控、告警信息展示
  2. 设备管理:设备基础信息增删改查、设备分类管理、设备状态维护
  3. 实时监控:设备周期上报数据展示、位置追踪、传感器数据可视化
  4. 事件管理:设备上报事件记录、事件类型分类、事件历史查询
  5. 远程控制:泊点指令下发、移动设备指令下发、指令执行状态追踪
  6. 订单管理:订单创建、订单状态追踪、订单历史查询、视频管理
  7. 系统管理:用户管理、日志管理、系统配置、告警规则管理

2.3 页面详情

页面名称模块名称功能描述
登录页用户登录用户名、密码输入,登录验证,防止未授权访问系统
仪表盘概览统计设备总数、在线设备数、告警数量、今日任务数统计展示
仪表盘实时监控设备状态实时卡片展示(绿色在线/黄色异常/红色未连接/灰色离线),地图位置实时标记
设备管理设备列表设备编号、类型、名称、状态、位置等信息列表展示,支持筛选和搜索
设备管理设备详情设备基础信息、实时状态、传感器数据、历史事件的详细展示
设备管理设备编辑设备基础信息的新增和编辑表单
实时监控监控大屏多设备状态实时展示、地图轨迹回放、数据图表展示
事件管理事件列表设备上报事件记录,支持按时间、设备、类型筛选
远程控制指令下发泊点指令和移动设备指令的下发界面
远程控制指令历史已下发指令的执行状态和结果查询
订单管理订单列表订单信息列表,支持状态筛选和搜索
订单管理订单详情订单执行进度、设备指令状态、视频下载链接
系统管理用户管理用户列表、新增用户、权限配置
系统管理操作日志系统操作记录查询
系统管理系统配置异常阈值配置、超时时间配置、其他系统参数配置
系统管理告警规则告警规则配置、告警通知方式设置

3. 核心流程

3.1 订单执行流程

用户通过小程序调用 create_order 接口创建订单,系统根据订单参数自动执行以下流程:

flowchart TD
    A[接收订单请求] --> B{设备是否在线}
    B -->|否| C[返回设备离线错误]
    B -->|是| D{设备是否充电中}
    D -->|是| E[停止充电]
    D -->|否| F{设备是否已激活}
    E --> F
    F -->|否| G[激活设备]
    F -->|是| H{仓门是否打开}
    G --> H
    H -->|否| I[打开仓门]
    H -->|是| J[发送启动指令]
    I --> J
    J --> K[执行任务中]
    K --> L{电量是否充足}
    L -->|否| M[自动返航]
    L -->|是| N{任务是否完成}
    N -->|否| K
    N -->|是| O[发送返回指令]
    M --> O
    O --> P[返回中]
    P --> Q{是否成功返回}
    Q -->|否| R{重试次数<2?}
    R -->|是| S[重试]
    S --> O
    R -->|否| T[标记任务失败]
    Q -->|是| U[关闭仓门]
    U --> Z[订单完成]

3.2 用户登录流程

flowchart TD
    A[访问系统] --> B{是否已登录?}
    B -->|是| C[进入仪表盘]
    B -->|否| D[显示登录页面]
    D --> E[输入用户名和密码]
    E --> F[点击登录]
    F --> G[验证用户名密码]
    G --> H{验证成功?}
    H -->|否| I[提示错误信息]
    I --> E
    H -->|是| J[生成登录令牌]
    J --> K[存储会话信息]
    K --> C

3.3 指令下发流程

flowchart TD
    A[选择设备] --> B[选择指令类型]
    B --> C[填写指令参数]
    C --> D[确认下发]
    D --> E[保存指令记录]
    E --> F[发送指令到设备]
    F --> G[等待设备响应]
    G --> H{响应超时?}
    H -->|是| I[标记指令超时]
    H -->|否| J[更新指令状态]

4. 用户界面设计

4.1 设计风格

  • 主色调:深蓝色系(#1a365d),搭配浅蓝色作为辅助色(#3182ce)
  • 按钮样式:圆角矩形,主按钮采用渐变背景,强调按钮使用橙色(#ed8936)
  • 字体:中文使用思源黑体,英文使用Roboto,标题字号18-24px,正文14px
  • 布局风格:侧边栏导航 + 顶部导航栏 + 主内容区的三栏布局
  • 图标风格:使用Font Awesome图标库,线条简洁清晰

4.2 页面设计概述

页面名称模块名称UI元素
登录页用户登录居中登录表单,包含用户名输入框、密码输入框、登录按钮,支持记住密码、忘记密码功能
仪表盘概览统计统计卡片网格布局,数字+图标组合,支持点击跳转
仪表盘实时监控设备状态卡片(绿色在线/黄色异常/红色未连接/灰色离线),地图组件展示位置
设备管理设备列表表格形式展示,支持分页、筛选、搜索,每行包含操作按钮
设备管理设备详情标签页切换(基础信息/实时数据/历史事件),数据以卡片和图表展示
远程控制指令下发表单布局,参数输入区,实时状态反馈区
订单管理订单列表表格展示,状态标签(不同颜色区分),操作列
系统管理系统配置配置项列表,支持修改和保存,包含异常阈值、超时时间等
系统管理告警规则告警规则列表,支持新增、编辑、启用/禁用告警规则

4.3 响应式设计

  • 桌面端:完整三栏布局,侧边栏展开
  • 平板端:侧边栏可折叠,主内容区自适应
  • 移动端:侧边栏隐藏,通过菜单按钮切换,列表转为卡片式布局

5. 对外API接口设计

5.0 接口使用场景说明

以下API接口同时服务于后台管理系统和小程序前端:

使用场景适用前端调用接口说明
手动创建订单后台管理系统find_nearest_device → create_order选择设备类型和位置,查找最近可用设备,创建订单
实时查看订单状态后台管理系统/小程序get_order_status(轮询)轮询获取订单状态,实时展示进度
取消订单后台管理系统/小程序cancel_order取消未执行或执行中的订单
查看媒体文件后台管理系统/小程序get_order_media获取订单完成后的视频/图片下载链接

5.1 接口列表

接口名称HTTP方法路径功能描述
loginPOST/api/v1/auth/login用户登录验证,获取访问令牌
find_nearest_deviceGET/api/v1/device/nearest根据经纬度和设备类型查找最近可用的移动设备
create_orderPOST/api/v1/order创建订单并触发设备执行任务
get_order_statusGET/api/v1/order/{order_id}查询订单状态和执行进度
cancel_orderPOST/api/v1/order/{order_id}/cancel取消订单
get_order_mediaGET/api/v1/order/{order_id}/media获取订单关联的媒体文件(视频/图片)

5.3 接口详细定义

5.3.0 接口认证

所有对外API(除login接口外)均需进行身份认证,认证方式为Bearer Token。 认证方式:

  • 在请求Header中添加 Authorization: Bearer <token>
  • Token有效期:2小时
  • Token过期后需重新调用login接口获取

未认证响应(401):

{
  "code": 401,
  "message": "未授权,请重新登录"
}

5.3.1 login

请求体:

参数名类型必填描述
usernamestring是用户名
passwordstring是密码
remember_meboolean否是否记住登录状态,默认false
{
  "username": "admin",
  "password": "123456",
  "remember_me": false
}

成功响应(200):

{
  "code": 0,
  "message": "登录成功",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user_info": {
      "id": "USER_001",
      "username": "admin",
      "role": "ADMIN",
      "real_name": "管理员"
    }
  }
}

失败响应(200):

{
  "code": 1,
  "message": "用户名或密码错误"
}

5.3.2 find_nearest_device

请求参数:

参数名类型必填描述
longitudenumber是经度
latitudenumber是纬度
device_typestring是设备类型(DRONE/SHIP/CAR)
成功响应(200):
{
  "code": 0,
  "message": "success",
  "data": {
    "device_id": "DRONE_001",
    "device_type": "DRONE",
    "infrastructure_id": "HANGAR_001"
  }
}

失败响应(200):

{
  "code": 1,
  "message": "无设备可用"
}

5.3.3 create_order

请求体:

参数名类型必填描述
order_idstring是订单编号
device_idstring是移动设备编号(无人机/无人船/无人车)
device_typestring是设备类型(DRONE/SHIP/CAR)
route_pathstring是航线/路径文件的URL
open_idstring是下单用户ID
task_typestring否任务类型,默认"拍摄"
task_paramsobject否任务参数,如拍照间隔、录像时长等
{
  "order_id": "ORD_202401010001",
  "device_id": "DRONE_001",
  "device_type": "DRONE",
  "route_path": "https://storage.example.com/routes/route_001.json",
  "open_id": "USER_OPEN_001",
  "task_type": "拍摄",
  "task_params": {
    "recording_duration": 1800,
    "photo_interval": 10
  }
}

成功响应(200):

{
  "code": 0,
  "message": "订单已创建",
  "data": {
    "order_id": "ORD_202401010001",
    "status": "未开始",
    "device_type": "DRONE",
    "infrastructure_id": "HANGAR_001"
  }
}

5.3.4 get_order_status

请求路径参数:

参数名类型必填描述
order_idstring是订单编号
成功响应(200):
{
  "code": 0,
  "message": "success",
  "data": {
    "order_id": "ORD_202401010001",
    "status": "执行中",
    "progress": 65
  }
}

状态枚举:

  • 未开始
  • 开仓门
  • 已启动
  • 执行中
  • 返回中
  • 已返回
  • 关仓门
  • 媒体上传中
  • 已完成
  • 任务失败
  • 已取消

5.3.5 cancel_order

请求路径参数:

参数名类型必填描述
order_idstring是订单编号
请求体:
参数名类型必填描述
--------------------------
reasonstring否取消原因
{
  "reason": "用户主动取消"
}

成功响应(200):

{
  "code": 0,
  "message": "订单已取消",
  "data": {
    "order_id": "ORD_202401010001",
    "status": "已取消"
  }
}

失败响应(200):

{
  "code": 1,
  "message": "订单已执行,无法取消"
}

取消规则:

  • 订单状态为"未开始"时可取消
  • 订单状态为"开仓门"时可取消,系统会发送关仓门指令
  • 订单状态为"已启动"及之后不可取消

5.3.6 get_order_media

请求路径参数:

参数名类型必填描述
order_idstring是订单编号
成功响应(200):
{
  "code": 0,
  "message": "success",
  "data": {
    "order_id": "ORD_202401010001",
    "media": [
      {
        "type": "video",
        "url": "https://storage.example.com/videos/ORD_202401010001.mp4",
        "duration": 1800
      },
      {
        "type": "photo",
        "url": "https://storage.example.com/photos/ORD_202401010001_001.jpg"
      }
    ]
  }
}

失败响应(200):

{
  "code": 1,
  "message": "媒体文件尚未上传完成"
}

6. 数据模型设计

6.1 核心实体

6.1.1 用户表 (users)

字段名类型约束描述
idstringPRIMARY KEY用户ID
usernamestringNOT NULL UNIQUE用户名
passwordstringNOT NULL密码(加密存储)
rolestringNOT NULL用户角色(ADMIN/DEVICE_ADMIN)
real_namestring真实姓名
phonestring手机号码
emailstring邮箱地址
statusstringNOT NULL用户状态(ACTIVE/INACTIVE)
last_login_attimestamp最后登录时间
created_attimestampNOT NULL创建时间
updated_attimestampNOT NULL更新时间

6.1.2 基础设施表 (infrastructures)

字段名类型约束描述
idstringPRIMARY KEY设备编号
typestringNOT NULL设备类型(HANGAR/DOCK/CHARGER)
namestringNOT NULL设备名称
statusstringNOT NULL设备状态(ONLINE/OFFLINE)
firmware_versionstring固件版本
location_longitudedecimal经度
location_latitudedecimal纬度
battery_levelinteger电量百分比
temperaturedecimal内部温度
wind_speeddecimal风速(仅机库)
rainfalldecimal雨量(仅机库)
door_statusstring舱门状态(打开中/已打开/关闭中/已关闭,仅机库/船坞)
bound_device_idstringFOREIGN KEY绑定的移动设备编号(机库绑定无人机、船坞绑定无人船、车桩绑定无人车)
vehicle_returnedboolean移动设备归位标识(机库/船坞/车桩)
vehicle_activatedboolean移动设备激活标识(机库/船坞/车桩)
vehicle_chargingboolean移动设备充电标识(机库/船坞/车桩)
created_attimestampNOT NULL创建时间
updated_attimestampNOT NULL更新时间

6.1.3 移动设备表 (mobile_devices)

字段名类型约束描述
idstringPRIMARY KEY设备编号
typestringNOT NULL设备类型(DRONE/SHIP/CAR)
namestringNOT NULL设备名称
statusstringNOT NULL设备状态(NOT_CONNECTED/CONNECTED/OFFLINE)
software_versionstring软件版本
location_longitudedecimal经度
location_latitudedecimal纬度
location_altitudedecimal高度(仅无人机)
battery_levelinteger电量百分比
pitch_angledecimal俯仰角(仅无人机)
yaw_angledecimal偏航角(仅无人机)
roll_angledecimal翻滚角(仅无人机)
horizontal_speeddecimal水平速度
vertical_speeddecimal垂直速度(仅无人机)
created_attimestampNOT NULL创建时间
updated_attimestampNOT NULL更新时间

6.1.4 事件表 (events)

字段名类型约束描述
idstringPRIMARY KEY事件ID
device_idstringFOREIGN KEY设备编号
event_typestringNOT NULL事件类型
event_datajsonb事件详细数据
occurred_attimestampNOT NULL事件发生时间
事件类型枚举:
  • VEHICLE_DEPLOY(已起飞/已起航/已启动)
  • VEHICLE_RETURN(已落地/已停靠/已停车)
  • MEDIA_UPLOAD_START(开始上传媒体)
  • MEDIA_UPLOAD_COMPLETE(媒体上传完成)
  • DOOR_OPEN(舱门/船坞门/车桩门打开)
  • DOOR_CLOSE(舱门/船坞门/车桩门关闭)
  • BATTERY_LOW(电量低告警)
  • CONNECTION_LOST(连接断开)

6.1.5 订单表 (orders)

字段名类型约束描述
idstringPRIMARY KEY订单编号
device_idstringFOREIGN KEY移动设备编号(无人机/无人船/无人车)
device_typestringNOT NULL设备类型(DRONE/SHIP/CAR)
route_pathstring航线/路径文件的URL
open_idstring下单用户ID
task_typestring任务类型
task_paramsjsonb任务参数
statusstringNOT NULL订单状态
progressinteger执行进度(0-100)
media_datajsonb媒体文件数据(视频、图片等)
retry_countinteger重试次数(复飞/重试)
created_attimestampNOT NULL创建时间
updated_attimestampNOT NULL更新时间

6.1.6 指令表 (commands)

字段名类型约束描述
idstringPRIMARY KEY指令ID
device_idstringFOREIGN KEY设备编号(基础设施或移动设备)
order_idstring关联订单编号
command_typestringNOT NULL指令类型
command_paramsjsonb指令参数
statusstringNOT NULL指令状态
response_datajsonb设备响应数据
created_attimestampNOT NULL创建时间
executed_attimestamp执行时间
指令类型枚举:
  • OPEN_DOOR(开舱门/开船坞门/开车桩门)
  • CLOSE_DOOR(关舱门/关船坞门/开车桩门)
  • ACTIVATE_VEHICLE(激活移动设备)
  • DEACTIVATE_VEHICLE(去激活移动设备)
  • START_CHARGING(开始充电)
  • STOP_CHARGING(停止充电)
  • DEPLOY(起飞/起航/启动)
  • HOVER(悬停/驻停)
  • RETURN(降落/停靠/停车)
  • RETURN_HOME(自动返航)
  • EMERGENCY_STOP(紧急停止)
  • TAKE_PHOTO(拍照)
  • START_RECORDING(开始录像)
  • STOP_RECORDING(结束录像)
  • START_STREAMING(打开推流)
  • STOP_STREAMING(关闭推流)

6.1.7 系统配置表 (system_config)

字段名类型约束描述
idstringPRIMARY KEY配置项ID
config_keystringNOT NULL UNIQUE配置项键名
config_valuejsonbNOT NULL配置项值
config_descriptionstring配置项描述
created_attimestampNOT NULL创建时间
updated_attimestampNOT NULL更新时间
配置项说明:
config_key说明默认值
--------------------------
battery_low_threshold电量低告警阈值(%)20
battery_full_threshold电量充满停止充电阈值(%)90
wind_speed_high_threshold风速过大告警阈值(m/s)15
rainfall_high_threshold雨量过大告警阈值(mm/h)10
order_timeout_minutes订单执行超时时间(分钟)30
device_offline_timeout_minutes设备离线告警时间(分钟)5
max_retry_count设备返回失败最大重试次数2

6.1.8 告警规则表 (alert_rules)

字段名类型约束描述
idstringPRIMARY KEY告警规则ID
rule_namestringNOT NULL规则名称
alert_typestringNOT NULL告警类型
thresholdjsonb告警阈值配置
enabledbooleanNOT NULL是否启用
notify_channelsjsonb通知渠道(邮件/短信/钉钉等)
created_attimestampNOT NULL创建时间
updated_attimestampNOT NULL更新时间
告警类型枚举:
  • BATTERY_LOW(电量低)
  • WIND_SPEED_HIGH(风速过大)
  • RAINFALL_HIGH(雨量过大)
  • DEVICE_OFFLINE(设备离线)
  • ORDER_TIMEOUT(订单超时)
  • ORDER_FAILED(订单失败)

7. 业务规则

7.1 设备管理规则

  1. 设备绑定关系:基础设施与移动设备采用一对一绑定方式,通过bound_device_id字段建立关联(机库绑定无人机、船坞绑定无人船、车桩绑定无人车)
  2. 设备类型关联:每个移动设备(无人机、无人船、无人车)必须关联到对应的基础设施(机库、船坞、车桩)
  3. 设备状态流转:设备状态在"离线→在线→连接中→执行任务"之间流转
  4. 唯一标识:设备编号全局唯一,格式为设备类型_序号(如DRONE_001)

7.2 订单执行规则

  1. 订单前置检查:
    • 订单执行前若设备正在充电,需先停止充电
    • 订单执行前若设备未激活,需先激活设备
    • 订单执行前若仓门未打开,需先打开仓门
  2. 安全规则:
    • 设备未成功归位时尝试重试,最多两次
    • 任务执行超时自动停机
  3. 订单完成规则:
    • 设备成功返回并关闭仓门后,订单标记为完成
    • 充电逻辑由设备端自行处理,不属于订单执行流程

7.3 设备管理规则补充

电池保护规则:

  • 设备电量超过90%后停止充电
  • 电量低于20%时触发告警并强制返航

7.4 指令下发规则

  1. 指令优先级:紧急指令(如返航、降落)优先级高于普通指令(如拍照、录像)
  2. 指令去重:同一设备同一类型指令在执行中时,不接受重复下发
  3. 超时机制:指令下发后30秒无响应标记为超时,可手动重试

8. 非功能需求

8.1 性能要求

  • 响应时间:页面加载时间≤2秒,API响应时间≤500毫秒
  • 并发能力:支持≥1000个设备同时在线,≥100个并发API请求
  • 数据更新:设备实时数据更新频率≤5秒

8.2 安全要求

  • 接口认证:所有对外API需进行身份认证
  • 数据加密:传输层采用HTTPS加密,敏感数据存储加密
  • 权限控制:基于角色的访问控制(RBAC)

8.3 可用性要求

  • 系统可用性:≥99.9%
  • 数据备份:每日自动备份,支持数据恢复
  • 故障恢复:系统故障后恢复时间≤30分钟

8.4 可扩展性要求

  • 模块化设计:各功能模块独立,便于后续扩展新设备类型
  • 接口标准化:对外API遵循RESTful标准,便于第三方对接
  • 配置化管理:关键参数支持配置化,无需修改代码即可调整

8.5 数据存储策略

8.5.1 历史状态数据存储分析

不建议保存所有历史状态数据,原因如下:

分析维度说明
数据量巨大假设1000个设备,每5秒上报一次状态,每天产生约1728万条记录,存储成本极高
数据价值递减实时状态的价值随时间快速衰减,超过一定时间后仅用于趋势分析
查询性能大量历史数据会影响实时查询性能,需要额外的索引和分区策略

8.5.2 分层存储策略

数据类型存储方式保留策略使用场景
实时状态PostgreSQL(设备表)仅保留最新状态实时监控、指令下发判断
历史状态InfluxDB(时序数据库)分钟级聚合数据保留7天趋势分析、历史回放
事件数据PostgreSQL(事件表)长期保留故障追溯、审计日志
指令数据PostgreSQL(指令表)长期保留指令执行审计、问题排查
订单数据PostgreSQL(订单表)长期保留业务统计、视频关联

8.5.3 历史状态数据聚合规则

聚合级别时间间隔数据内容保留策略
原始数据5秒完整状态信息不存储,仅用于实时更新和分钟级聚合计算
分钟级聚合1分钟平均值、最大值、最小值保留7天

8.5.4 数据清理机制

  • 自动清理:定时任务自动清理超过保留期限的历史数据
  • 手动导出:支持按设备、时间范围导出历史数据
  • 备份策略:聚合数据定期备份到冷存储

9. MQTT通信设计

9.1 协议概述

服务器与设备之间的通信采用MQTT 3.1.1协议,实现设备状态上报、事件推送和指令下发的双向实时通信。

9.2 MQTT主题设计

9.2.1 设备上报主题

主题路径用途示例
device/{device_id}/status设备周期上报实时状态信息device/DRONE_001/status
device/{device_id}/event设备上报事件信息device/DRONE_001/event

9.2.2 指令下发主题

主题路径用途示例
command/{device_id}/execute服务器向设备下发指令command/DRONE_001/execute

9.2.3 指令响应主题

主题路径用途示例
command/{device_id}/response设备响应指令执行结果command/DRONE_001/response

9.3 消息格式定义

9.3.1 设备状态上报消息

主题:device/{device_id}/status

{
  "device_id": "DRONE_001",
  "device_type": "DRONE",
  "timestamp": 1704067200,
  "status": "CONNECTED",
  "software_version": "v2.1.0",
  "location": {
    "longitude": 116.4074,
    "latitude": 39.9042,
    "altitude": 100
  },
  "battery_level": 78,
  "attitude": {
    "pitch_angle": 5.2,
    "yaw_angle": 180.5,
    "roll_angle": -2.1
  },
  "speed": {
    "horizontal_speed": 12.5,
    "vertical_speed": 0
  }
}

机库状态上报消息示例:

{
  "device_id": "HANGAR_001",
  "device_type": "HANGAR",
  "timestamp": 1704067200,
  "status": "ONLINE",
  "firmware_version": "v1.5.0",
  "location": {
    "longitude": 116.4074,
    "latitude": 39.9042
  },
  "battery_level": 95,
  "temperature": 25.3,
  "wind_speed": 3.5,
  "rainfall": 0,
  "door_status": "CLOSED",
  "bound_device_id": "DRONE_001",
  "vehicle_returned": true,
  "vehicle_activated": false,
  "vehicle_charging": true
}

9.3.2 设备事件上报消息

主题:device/{device_id}/event

{
  "device_id": "DRONE_001",
  "event_id": "EVT_202401010001",
  "event_type": "DRONE_TAKEOFF",
  "timestamp": 1704067200,
  "event_data": {
    "location": {
      "longitude": 116.4074,
      "latitude": 39.9042,
      "altitude": 0
    },
    "battery_level": 85
  }
}

9.3.3 指令下发消息

主题:command/{device_id}/execute

{
  "command_id": "CMD_202401010001",
  "device_id": "DRONE_001",
  "order_id": "ORD_202401010001",
  "command_type": "DEPLOY",
  "timestamp": 1704067200,
  "params": {
    "route_path": "https://storage.example.com/routes/route_001.json",
    "target_altitude": 100
  }
}

9.3.4 指令响应消息

主题:command/{device_id}/response

{
  "command_id": "CMD_202401010001",
  "device_id": "DRONE_001",
  "status": "SUCCESS",
  "timestamp": 1704067210,
  "response_data": {
    "current_altitude": 100,
    "battery_level": 84
  }
}

响应状态枚举:

  • SUCCESS(执行成功)
  • FAILED(执行失败)
  • TIMEOUT(超时)
  • REJECTED(指令被拒绝)

9.4 连接管理

9.4.1 设备认证

  • 设备连接时需提供设备编号和密钥作为客户端ID和密码
  • 服务器验证设备身份,非法设备拒绝连接

9.4.2 心跳机制

  • 设备需保持MQTT连接,断开后自动重连
  • 心跳间隔:30秒
  • 服务器检测设备离线后,更新设备状态为"离线"

9.4.3 消息QoS

  • 状态上报:QoS 1(确保重要状态数据不丢失)
  • 事件上报:QoS 1
  • 指令下发:QoS 1
  • 指令响应:QoS 1

10. 技术栈建议

10.1 前端

  • 框架:React 18 + TypeScript
  • UI组件:Ant Design 5.x
  • 状态管理:Redux Toolkit / Zustand
  • 地图组件:Leaflet / Mapbox GL JS
  • 图表组件:ECharts / Recharts
  • 构建工具:Vite

10.2 后端

  • 框架:Node.js + Express / NestJS
  • 关系型数据库:PostgreSQL(设备信息、事件、订单、指令)
  • 时序数据库:InfluxDB(设备历史状态数据)
  • 缓存:Redis(实时数据缓存)
  • MQTT Broker:EMQX / Mosquitto(设备通信)
  • 文件存储:对象存储(AWS S3 / 阿里云OSS)
  • API文档:Swagger / OpenAPI

10.3 基础设施

  • 部署方式:Docker + Kubernetes
  • 负载均衡:Nginx
  • 监控告警:Prometheus + Grafana
  • 日志管理:ELK Stack

11. 里程碑规划

阶段时间交付内容
第一阶段第1-2周项目初始化、基础架构搭建、数据库设计
第二阶段第3-4周设备管理模块、实时监控模块开发
第三阶段第5-6周远程控制模块、事件管理模块开发
第四阶段第7-8周订单管理模块、对外API开发
第五阶段第9-10周系统管理模块、测试与优化
第六阶段第11-12周部署上线、文档编写、培训
最近更新: 2026/6/18 14:29
Contributors: kcnf
Prev
核心服务层
Next
整体项目管理