1. 项目概述与需求分析

1.1 数字工地管理背景

传统建筑工地管理长期面临“信息黑箱”困境:设备分布散乱、人员考勤滞后、环境数据采集靠人工巡检、异常事件无法实时预警。随着物联网(IoT)与可视化技术的成熟,数字工地管理已成为行业转型的必然方向。

本实战项目以设备跟踪为核心场景,通过传感器采集、MQTT 实时传输、Flask 后端处理、ECharts 前端渲染,构建一套可落地、可扩展的数字工地管理现场看板。学员将完整经历从需求分析到系统交付的全流程。

核心痛点: 工地设备“在哪、谁在用、状态如何、是否异常”——传统管理方式无法实时回答这四个问题。

1.2 现场看板核心功能

看板系统围绕“设备全生命周期跟踪”设计,包含以下五大功能模块:

功能模块 核心能力 用户价值
设备实时定位 基于 GPS/蓝牙信标,每 5 秒上报位置 快速查找设备,减少丢失与闲置
状态监控 运行/待机/故障/离线四种状态自动切换 提前发现故障,降低停机损失
使用记录 操作人员、开始/结束时间、工作时长 责任到人,优化设备调度
告警推送 超时未归、越界、电量低、异常震动 及时响应,保障安全
数据看板 设备总数、在线率、告警统计、热力图 管理层一目了然,辅助决策

1.3 数据可视化目标

可视化不是“把数据画出来”,而是让数据可读、可交互、可决策。本项目设定以下四个量化目标:

  1. 实时性: 看板数据刷新延迟 ≤ 2 秒(MQTT + WebSocket 保障)。
  2. 直观性: 设备位置通过地图散点图呈现,状态通过颜色编码(绿=正常,黄=待机,红=故障,灰=离线)。
  3. 可交互: 点击设备节点弹出详情卡片,支持按类型/状态/区域筛选。
  4. 可追溯: 保留 7 天历史轨迹与告警记录,支持时间轴回放。
设计原则: 看板默认展示“全局概览”,用户通过下钻操作获取细节,避免信息过载。

1.4 项目技术栈选型

技术选型遵循“轻量、高效、易学、可扩展”原则,前后端分离,数据流清晰:

层级 技术 选型理由
后端框架 Python + Flask 轻量灵活,生态丰富,适合快速原型与教学
前端可视化 ECharts 5.x 国产开源,图表类型全,交互能力强,社区活跃
实时通信 MQTT (Mosquitto) + Paho MQTT Client 物联网标准协议,低带宽低延迟,支持海量设备
数据存储 SQLite (开发) / MySQL (生产) 零配置起步,后期可平滑迁移
前端框架 原生 HTML + CSS + JavaScript 降低学习曲线,聚焦可视化逻辑本身

整体数据流架构如下:

数字工地看板系统数据流架构 IoT 设备层 GPS / 温湿度 / 震动 每 5s 上报 JSON MQTT Broker Mosquitto Topic: /devices/# Flask 后端 Paho 订阅 + API SQLite 存储 MQTT 发布 MQTT 订阅 前端看板 ECharts 图表 WebSocket 实时更新 REST API 筛选/查询 说明 MQTT 负责设备→后端 WebSocket 负责后端→前端

1.5 项目目录结构

为保障代码可维护性,项目采用分层目录结构,各模块职责清晰:

digital_worksite_dashboard/
├── app.py                  # Flask 应用入口
├── config.py               # 配置文件(MQTT 地址、数据库路径等)
├── models/
│   └── device.py           # 设备数据模型(SQLAlchemy ORM)
├── mqtt_client/
│   └── subscriber.py       # MQTT 订阅与消息处理
├── routes/
│   ├── api.py              # RESTful API 路由
│   └── pages.py            # 页面路由
├── static/
│   ├── css/
│   │   └── dashboard.css   # 看板样式
│   ├── js/
│   │   ├── echarts.min.js  # ECharts 库
│   │   ├── mqtt.js         # MQTT WebSocket 客户端
│   │   └── dashboard.js    # 看板主逻辑
│   └── data/               # 模拟数据(开发阶段使用)
├── templates/
│   └── dashboard.html      # 看板页面模板
└── requirements.txt        # Python 依赖清单
避坑提示: 不要将 MQTT 客户端逻辑直接写在 app.py 中。分离到独立模块后,便于后期扩展多协议接入(如 CoAP、HTTP 轮询)。

1.6 本章小结