
简介面向电力监控、设备维护管理领域的开发者与运维人员这套源代码资源聚焦配电房远程运维场景通过网络对电力设备进行实时监控与控制解决现场操作繁琐、故障响应慢等问题适用于智慧电力、工业物联网等项目快速落地。压缩包共167个文件以Python后端逻辑32个py、HTML前端页面29个html和JavaScript/CSS交互样式18个js、17个css为主另含SQL数据库脚本、服务配置文件、ico图标及字体资源整体仅1.18MB结构清晰便于移植与二次开发。系统功能涵盖传感器数据采集、运行状态监控、异常自动报警、维护计划管理、历史维修记录以及故障诊断与远程修复操作并配备配电房专用图标界面标识可直接参考其架构、通信协议与数据库设计进行功能定制。目前已有226人学习下载适合具备物联网或Web开发基础的技术人员学习系统与扩展功能。1. 电力远程运维系统源代码先弄清楚这套代码能解决什么问题拿到这份电力远程运维系统源代码你同时拿到了配电房监控、设备维护管理、运维告警三条业务线的完整实现。它不是一个教学 demo而是可以直接编译、部署、接真实设备数据的那类工程。运作方式不复杂配电房里的电表和传感器把数据送上来系统做阈值判断和状态变化检测告警产生后自动通知运维人员同时设备台账、巡检工单、保养计划在另一条链路里闭环。适合要搭建电力运维平台的团队拿去做基线也适合正在转电力信息化的后端工程师对照学习。这套包解压之后第一步先把环境跑通然后再谈改代码。2. 从 rar 到可运行工程解压、目录识别与环境准备拿到一个压缩包真正能顺利跑起来的人并不多问题往往不是出在代码上而是出在最开始的解压和配置环节。这一章把从 rar 包到可运行工程这条路上的关键节点逐一拆开每个节点都是我第一次部署这类系统时真实踩过的。2.1 解压这一步有讲究rar 格式、分卷压缩与路径长度网上下载的 .rar 文件第一关就是解压。很多人习惯双击让系统默认工具打开但 .rar 格式在 Windows 上默认没有关联除非你装过 WinRAR。7-Zip 对 rar 的支持也有版本差别老版本 7-Zip 只能解压不能创建 rar而且遇到固实压缩solid archive时即便只要其中一个文件也要全量解压。所以我的习惯是拿到包先别急着解压用 7-Zip 打开看一眼内部结构确认是源码目录加上数据库脚本再决定解压路径。这里有一个实操要点rar 包如果是分卷压缩.part1.rar、.part2.rar必须把所有分卷放在同一目录文件名不要改动解压时选第一个分卷工具会自动连带释放。如果遇到包内文件名乱码多半是压缩时用的编码不是 UTF-8WinRAR 在“选项-名称编码”里切到 GBK 能解决。这个坑在国内网盘资源里非常常见我处理过不止一次看起来是小事但卡在这里会让人特别烦躁。解压完成后第一件事不是打开 IDE而是看目录层级。很多源码包外层套了两层文件夹路径太深会导致后续编译时出现“文件路径过长”的报错。Windows 默认路径长度上限是 260 个字符如果工程目录嵌套超过这个值Maven 或 Webpack 构建直接失败。解决方法是把整个工程解压到磁盘根目录下的短路径比如 D:\power-ops不要放在 D:\Users\xxx\Downloads\新建文件夹\再解压一层。这个看起来很小的问题实际上能挡住相当一部分第一次接触源码包的人。2.2 目录结构拆解监控采集、业务后端、前端页面与数据库脚本用压缩软件预览包内结构时我一般按下面的顺序确认这四类东西是否齐全目录/文件通常内容缺了会怎样sql/ 或 db/建库建表脚本、初始化数据无法初始化数据库系统起不来backend/ 或 server/后端工程代码业务逻辑全部缺失web/ 或 frontend/前端页面、静态资源、ico只有接口没有界面collector/ 或采集模块/数据采集与协议解析代码监控数据无法入库这四块是电力运维系统的基本盘。如果你解压后只看到其中一个目录说明要么是部分源码要么是发布包而不是完整源代码。完整的源代码包应该包含 pom.xml 或 package.json 这类构建描述文件它们是工程能否被 IDE 正确识别和编译的标志没有这两个文件IDE 只能把源码当普通文本看。拿到目录结构之后我还会额外看一眼配置文件确认数据源地址、端口号、日志级别这些关键项。这一眼能帮你提前知道这个系统大概按什么标准部署的。比如数据源配置指向的是 127.0.0.1 还是独立数据库服务器端口用的是 8080 还是 8443这些细节决定后面的启动方式。特别是 ico 资源如果前端目录下带了一个配电房的 favicon.ico 或设备图标集通常说明作者在 UI 上做了实际投入不是随便拼凑的演示项目。2.3 环境核对JDK 版本、数据库认证方式与前端依赖这类电力运维系统绝大多数是 Java 后端加 Web 前端的组合。打开后端工程的 pom.xml 或者 build.gradle第一件事是确认 JDK 版本。Spring Boot 2.x 系列依赖 JDK 8 或 11Spring Boot 3.x 则要求 JDK 17。如果你本机装的是 JDK 17 而项目是基于 Spring Boot 2.3 的编译时大概率会出现“无法解析 javax.servlet”之类的错误。不要想当然地认为高版本 JDK 一定能编译老项目Java 的兼容性远没有想象中那么美好。数据库方面这类系统最常见的是 MySQL 5.7 或 8.0。需要注意 MySQL 8 的默认认证插件是 caching_sha2_password而很多老项目用的连接驱动不支持这种认证方式导致连接报错“Unable to load authentication plugin”。我的做法是安装 MySQL 8 之后把用户的认证方式改成 mysql_native_password或者在连接串里加 allowPublicKeyRetrievaltrueuseSSLfalse后者在本地开发环境更省事。中间件方面如果项目里有 Redis 或 MQ 的引用需要先确认本地有没有对应服务。我见过不少人在部署时报错“Connection refused”后排查半天最后发现是漏装了 Redis。启动顺序也有讲究先数据库再 Redis再后端服务最后前端别一次性全部启动然后等着看报错。日志是最好的排障工具但前提是其他服务已经就绪。前端工程如果是 Vue 或 React 写的需要确认 node_modules 是否随包附赠。大多数情况下这个目录会被压缩工具排除你需要重新执行 npm install。这里有个网络环境的现实问题npm install 在国内直接跑经常卡在某个包上设置 registry 镜像能解决大部分问题npm config set registry https://registry.npmmirror.com cd frontend npm install这个命令的含义是把 npm 源切换到国内镜像然后安装前端依赖。如果你用的是 yarn 或 pnpm对应的命令也差不多但要注意 lock 文件有没有被改动过改了锁文件的版本依赖树就可能跟开发者本机不一致出现一些莫名奇妙的报错。前端依赖装好之后先跑一次 npm run build 验证能不能打包这个环节能尽早发现代码兼容性问题。2.4 数据库初始化建库脚本执行顺序与初始账号源码包里一般会附带 .sql 文件这个文件的执行顺序比内容更重要。有的包是一个 full_init.sql 全量脚本直接导入即可有的是拆成 schema.sql 和 data.sql 两个文件必须先建表结构再导数据。执行的命令很简单mysql -uroot -p -e CREATE DATABASE IF NOT EXISTS power_ops DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; mysql -uroot -p power_ops D:\power-ops\sql\full_init.sql这里要解释一下第一条命令的作用手动创建数据库并指定字符集避免直接导入全量脚本时因为编码问题导致中文乱码。指定 utf8mb4 而不是 utf8是因为设备名称、告警内容里可能出现生僻字和特殊符号utf8mb4 是四字节编码兼容性更好。第二条命令把脚本导入到刚建好的库顺序不能反否则表还不存在导入必然报错。导入完成之后查看用户表和初始账号。大多数这类开源系统默认账号是 admin/admin123 或者 admin/123456但这不是写死的可以在用户表里直接改。建议第一次登录先去权限管理页面给 admin 账号换一个强密码不要等到系统暴露到公网再后悔。数据初始化之后还需要检查数据库字符集、时区、事务隔离级别这三个参数。尤其时区很多电力监控系统的告警时间都依赖服务器生成时间戳MySQL 的默认时区如果跟应用服务器不一致时间上差几个小时后面查历史数据会对不上。做法是在 JDBC 连接串里显式配置 serverTimezoneAsia/Shanghai别依赖 MySQL 默认值。这一步走通之后整个项目的骨架就算搭起来了。3. 监控模块拆解遥测数据、告警判定与页面联动监控是电力远程运维系统的眼睛这一章沿着“采集-判断-展示”这条链路把监控模块的数据流和代码逻辑拆开讲重点说清楚数据从设备到页面的每一步是怎么落地的。3.1 数采链路从配电房设备到数据库的完整路径电力远程运维系统的第一步是数据采集。配电房里最常见的设备是智能电表、温湿度传感器、开关柜状态采集器。这类系统的采集模块通常采用 Modbus RTU/TCP 或者电力规约如 DL/T 645对接设备采集频率可以配置常见是 30 秒一轮询具体由采集线程的定时参数控制。数据链路大概是这样的设备到采集器或网关再到采集服务经过消息中间件或直接写库最后前端读取展示。采集服务负责把协议报文解析成结构化数据存入实时数据表同时把最新的状态缓存在 Redis 里供页面前端做轮询读取。这个链路里最容易出问题的是中间那一段网络闪断、报文丢帧都可能导致采集数据缺失所以很多实现里会有断线重连和数据补采的逻辑源码里看到采集线程带重连机制是正常的设计。在代码层面协议解析是比较容易出错的地方。拿 Modbus 举例读寄存器返回的字节序分大端小端浮点点位还需要拆成两个寄存器再拼接。新手拿到采集代码先不要改逻辑而是先把报文打印出来跟设备手册比对一遍确认能完整解析后再做后续的告警和展示。我当时对接过一个第三方电表厂家手册写的是大端字节序实际报文是小端整整花了半天才定位到问题后来直接在解析函数里加了一个字节序配置项按现场设备类型切换这个小改动之后对接新设备就快多了。采集数据的存储策略也有讲究。实时数据表和分钟级聚合表分开存储是常用做法实时表保存最近 24 小时的最新点位数据历史表按分钟或小时做聚合用于趋势曲线和报表。如果全部数据都往一张表里塞半年之后查询性能会明显下降。源码里如果带了定时聚合任务说明作者考虑到了这一点如果没有二次开发时建议补上否则等到数据量上来再改迁移成本很高。3.2 告警规则引擎阈值比较、状态变化与通知分发告警是监控模块的核心价值所在。阈值判断的逻辑在代码里一般拆成两层一层是规则配置表用来存设备的告警阈值和启用状态另一层是调度任务定时扫描实时数据发现越限就生成一条告警记录。报警类型一般分两种一是数值越限比如变压器温度超过 80 度触发“温度过高”告警二是状态跳变比如开关位置信号从“合位”变成“分位”触发“开关变位”告警。前者用阈值比较实现后者需要记录上一次的状态跟当前状态做异或发现变化才记告警。这套逻辑在代码里对应一个状态机类维护每个设备的最新状态保证重复上送同一状态不会产生重复告警。告警级别通常分一般、重要、紧急三级不同级别对应不同的处理时限和通知方式。实现上不过是一个枚举字段加一个级别判断但设计时要注意级别不要写死要允许运维人员在规则配置页面修改阈值和级别否则每次调整都要改代码重新部署维护成本很高。参考的默认配置一般是告警级别触发条件默认通知方式处理时限一般数值轻微越限站内信24 小时重要数值明显越限站内信 短信2 小时紧急状态跳变或数值严重越限短信 电话30 分钟告警产生之后要通知到运维人员常见做法是短信接口或邮件推送。源码里一般会预留通知渠道的接口你要做的是把 provider 实现类的参数填上自己的短信网关账号和密钥。开发环境不接入真实短信服务时建议写一个假的 provider 把告警内容打印到控制台方便调试流程。我当时是直接在日志里输出告警标题和级别跑通之后再替换成真实短信通道这个方法到现在都在用。3.3 实时监控页面刷新策略与配电房 ico 的呈现前端展示是运维人员每天面对的东西效果好坏直接影响使用体验。这套系统的前端通常是一个单页应用配电房的主接线图或设备分布图用 SVG 或者 Canvas 绘制设备图标用自定义的 ico 或者 png 图标库来代表变压器、开关柜、配电柜等设备。配电房 ico 这个资源一般放在前端的静态资源目录下换肤或者换图标时直接替换图片文件即可不需要改动代码逻辑。页面数据的刷新方式是个关键设计点。老版本用 setTimeout 定时请求接口每隔 3 秒去拉一次最新数据更好一点的是用 WebSocket 做推送。你在源码里看到类似这样的代码就是典型的定时刷新逻辑setInterval(async () { const res await fetch(/api/monitor/realtime?roomId101); const data await res.json(); updateDeviceStatus(data.devices); }, 5000);这 5 秒的间隔不是随便写的。设置太短比如 1 秒数据库和接口压力会明显上升设置太长比如 30 秒运维人员看到的温度曲线就是跳变的失去实时监控的意义。我的建议是数值类数据用 5 秒到 10 秒的轮询状态类变化用 WebSocket 推送这个组合在工程落地中比较稳妥。前端页面还有一个细节值得注意设备状态的视觉区分。正常、告警、离线三种状态要用颜色和图标双重表达不能只靠颜色。电力行业的运维人员里有一部分有色弱或者色盲如果只靠红变绿的变色来提示状态变化这部分人很容易漏掉告警。源码里如果给状态加了 icon 或文字标签说明作者考虑到了这个细节做二次开发时保持这个习惯。4. 设备维护管理模块台账、巡检工单与保养计划的实现逻辑监控负责发现问题维护负责解决问题。设备维护管理模块包含了台账、巡检工单、保养计划三层内容这一章逐个拆开重点看数据模型和状态流转是怎么设计的。4.1 设备台账设备主表与扩展属性的数据建模设备维护管理是运维系统里比监控更“重”的部分。监控回答的是“设备现在怎么样”维护管理回答的是“设备该怎么保养、坏了怎么修”。台账模块的核心是一张设备信息表表里通常包含设备编号、设备名称、所属配电房、设备类型、安装日期、保养周期、关联的监控点位等字段。设计台账时有一个容易忽略的点设备类型与其参数项的关系。变压器、开关柜、UPS 的参数项完全不同如果只用一个宽的设备表字段冗余严重如果完全分表又不好统一查询。这类系统的常见做法是用一张设备主表加上一张扩展属性表设备类型通过字典表或枚举表来定义这样新增设备类型时不需要改动表结构。这种设计在二次开发时特别重要因为你不知道后续会接什么新设备进来。从代码层面讲读取设备台账一般通过一个统一的 service 接口。查询条件通常包括配电房 ID、设备类型、关键字搜索。运维人员使用频率最高的接口是“按配电房查看设备列表”这个接口的 SQL 要保证走了索引否则在配电房数量多、设备数量上千之后页面会明显变慢。我见过有同事在设备表上加了三四个 LIKE %xxx% 条件结果全表扫描五千条数据就卡了两秒多后来改成前缀匹配加联合索引才解决。这个教训让我养成了一个习惯凡是列表查询接口先看执行计划再谈优化。台账和监控点位的关联也是一个关键设计。设备表和监控点位表的关联关系决定了你能不能从一台设备直接跳转到它的实时数据和历史曲线。源码里常见做法是在设备表里加一个关联字段存设备对应的采集点位编号这样查询实时数据时直接用这个编号去点位表取数逻辑简单清晰。4.2 巡检工单状态流转节点设计、权限控制与操作日志巡检工单是维护管理模块里最典型的工作流场景。它的状态机一般有这几个节点待派单、待执行、执行中、已完成、已验收。每一步都涉及角色权限值班长能创建和派单巡检员能领取和填报验收员能关闭工单。这套状态流转逻辑在代码里通常用一个状态字段加一组状态变更方法来实现。状态不允许跳变比如待派单不能直接变成已完成。要做到这一点常见做法是单独抽一个状态机校验类在每次状态变更前检查前置状态是否合法。我建议二次开发时不要破坏这个校验逻辑否则工单流程就乱了线上出问题的时候连原因都查不出来。权限控制方面这类系统一般用的是 RBAC基于角色的访问控制模型。用户表、角色表、权限表三张基础表再通过用户角色关联表和角色权限关联表串起来。你在前端看到某个按钮对当前用户灰掉多半不是按钮被隐藏了而是接口返回 403 后前端做了禁用处理。二次开发时如果要新增一个“超管”角色最快的方式是直接给角色表插一条记录再绑定管理员用户前提是你对这个系统的权限模型有把握别为了省事把权限校验整个绕过。工单执行过程的数据记录同样重要包括巡检项结果、现场照片、处理备注。这些数据一旦入库就不再允许随意修改否则审计追溯就没有意义。源码里常见做法是加一个操作日志表记录每一条数据的创建时间、操作人和变更内容方便后续追溯。巡检照片的上传也有讲究图片存本地磁盘还是对象存储决定了后续备份和迁移的方式建议有条件就直接用对象存储别把图片和系统部署绑在一起。4.3 预防性维护周期计算、定时任务与消息推送设备维护不只是“坏了再说”更重要的是预防性维护。这部分的代码逻辑是根据设备的保养周期和上次保养时间计算出下次保养时间然后由一个定时任务每天扫描一次发现到期设备就生成待办提醒。定时任务在 Java 项目里最常见写法是使用 Spring 的 Scheduled 注解。这类系统里一个典型的实现是这样Scheduled(cron 0 30 1 * * ?) public void scanMaintenanceDue() { ListDevice devices deviceService.findMaintenanceDue(LocalDate.now()); for (Device device : devices) { maintenanceService.createReminder(device); notifyService.pushReminder(device.getManagerId(), 设备 device.getName() 已到保养周期); } }这段代码的 cron 表达式含义是每天凌晨 1 点 30 分执行一次保养到期扫描。选择凌晨执行是为了避开业务高峰期减少对业务表的锁竞争。代码逻辑不难难在边界场景设备保养完成的同时定时任务刚好扫到它就会产生一条多余的提醒。解决方式是在创建提醒前先查询是否已经存在未关闭的提醒记录有则跳过。这类幂等判断在定时任务里非常重要否则每次任务执行都可能重复生成待办运维人员的手机就会被通知轰炸。推送方式上这类系统的常见接口是站内信加短信。站内信落库登录后在首页右上角红点提示短信走供应商接口注意频率控制不要让同一台设备因为重复告警把短信套餐刷光。还有一个参数值得关注定时任务的启动延迟和线程池配置如果任务里既有保养到期扫描又有数据聚合检查建议给不同任务设置不同的线程池隔离避免互相影响。5. 部署与调试避坑指南五个让你半夜加班的真实问题整个工程部署完真正开始用的时候才是踩坑的开始。这一章列了五个高频问题每个都是在真实环境里踩出来的按现象、原因、解决三个层次写遇到问题时可以直接对照排查。5.1 数据库连接串的坑本地能连远端连不上现象后端服务在本地启动时一切正常部署到服务器上就报“Communications link failure”数据库的 ping 是通的但应用就是连不上。原因连接串里的 host 写成了 localhost 或 127.0.0.1应用部署在服务器 A数据库在服务器 B自然连不上。还有一种情况是数据库开了远程访问但配置文件里用的还是 127.0.0.1应用看到的数据库永远是本机这种问题在从开发机拷贝配置到服务器时特别容易发生。解决把 JDBC 连接串里的地址改成数据库服务器的内网 IP并确认两个服务器之间的防火墙和安全组放行了 3306 端口。建议在本地开发时就直接用数据库的实际 IP 写连接串别用 localhost避免环境切换时漏改。另外检查数据库用户的 host 字段如果是 localhost 则该用户只允许本机连接需要用指定授权CREATE USER power% IDENTIFIED BY your_password; GRANT ALL PRIVILEGES ON power_ops.* TO power%; FLUSH PRIVILEGES;这段 SQL 的意思是创建一个允许从任意主机连接的数据库用户并授予对 power_ops 库的全部权限。如果这里漏配应用连数据库一样会报 access denied而且日志里的报错信息跟网络不通非常像容易被误导去查防火墙。5.2 Web 端口与采集端口冲突现象前端页面能打开但实时数据一直不更新查看后端日志发现端口绑定失败服务启动了一半就退出。原因系统监控采集服务默认监听一个固定端口如果前端开发服务器或其它服务也占用了这个端口采集服务就无法启动。这个坑在本地同时跑多个项目时特别容易出现尤其是那些默认占用 8080 的项目跟采集端口撞车的概率很高。解决用 netstat -ano | findstr 端口号 查占用进程修改 application.yml 里采集服务的监听端口。改完之后确认前端请求的接口地址也同步更新否则数据链路中断了页面还显示“连接正常”。排查的时候先看启动日志里有没有端口相关的 WARN再去看占用别在页面上瞎找原因浪费时间。5.3 中文乱码从数据库到页面全链路编码不统一现象页面上的设备名称、告警内容显示为乱码但数据库里用命令行查出来是正常的。原因这一般是数据库连接层与前端页面编码不一致。数据库建表时用了 latin1 或 utf8而页面声明的是 UTF-8也可能是后端配置文件里 characterEncoding 没设置驱动用了默认编码。解决统一改为 utf8mb4。修改数据库连接的 characterEncoding 参数同时确认 MySQL 的 my.ini 里 default-character-setutf8mb4。改完数据库后需要重启已有的表还需要执行 ALTER TABLE xxx CONVERT TO CHARACTER SET utf8mb4这一步不能省。如果你执行完发现历史数据还是乱码说明数据在入库时就已经坏了只能靠重新采集或手工修正这个教训提醒我新项目初始化时就把字符集定好后面能省掉大量返工。5.4 历史数据时间偏移时区不一致导致差八个小时现象告警记录和趋势曲线的时间比实际时间早或晚 8 小时运维人员看到的告警时间跟手机上的对不上。原因应用服务器时区与数据库服务器时区不一致或者 JDBC 连接串里没指定 serverTimezoneMySQL 用了默认时区。这个问题在容器化部署时尤其隐蔽因为 Docker 基础镜像默认时区经常是 UTC一不注意就会发现所有时间记录都比北京时间少了 8 个小时。解决在连接串里显式加上 serverTimezoneAsia/Shanghai同时把应用服务器的系统时区设置为 Asia/Shanghai。Linux 上可以用 timedatectl set-timezone Asia/Shanghai 设置。如果是 Docker 容器启动时加 -e TZAsia/Shanghai 环境变量。治本的方法是始终保持环境一致不依赖默认值。注意容器化部署时需检查基础镜像的时区很多镜像默认是 UTC启动容器时强制指定 TZ 环境变量可以避免大部分时间偏移问题。5.5 前端静态资源 404ico 图标和页面白屏现象页面打开是白屏控制台报一堆静态资源 404尤其是 favicon.ico、logo.png 这类文件。原因前端部署的路径不是根路径静态资源的相对路径或绝对路径写死成了“/”找不到对应资源。如果项目里带了 ico 资源文件但构建后没有被打进 dist 目录也会出现这个情况。解决检查 index.html 里引用的资源路径改为相对路径或者根据部署环境配置 publicPath。如果项目里带了 ico 资源文件确认 resources/static 目录下有没有被正确拷贝到打包输出目录没有的话手动补上。还有一个更隐秘的情况如果 Nginx 反代做了二级目录映射静态资源路径没带前缀一样会 404。这时候看浏览器 Network 面板里失败请求的 URL 是最直接的定位方式比读代码猜快得多。6. 二次开发验证技巧用 mock 数据把全链路跑通再动手6.1 mock 数据怎么生成字段、点位编号和数值单位保持一致接真实设备之前先做一份 mock 数据把全链路跑通这个习惯能省下大量的现场调试时间。配电房和真实设备不是随时都能连上的等你去现场调试才发现数据不对成本就太高了。具体做法是写一个模拟数据生成器按 30 秒周期投递模拟的遥测数据到采集服务然后在告警页面确认能产生告警在维护页面确认工单能流转。生成的模拟数据要和真实数据的格式保持完全一致包括点位编号、字段命名、数值单位否则测出来的结果是假的。我自己因为模拟数据和实际格式不一致翻过车模拟时一切正常接真实设备后页面全空白排查半天才发现是字段命名差异。一个简单的 mock 生成器可以这样写import time import requests devices [ {id: 1, name: 1号变压器, temperature: 45.2, status: 1}, {id: 2, name: 2号开关柜, temperature: 38.7, status: 1}, ] while True: for dev in devices: payload { deviceId: dev[id], point: temperature, value: round(dev[temperature] 0.5, 1), ts: int(time.time() * 1000) } requests.post(http://localhost:8080/api/monitor/collect, jsonpayload) time.sleep(30)这段代码按 30 秒一轮询的节奏向采集接口提交模拟的实时温度数据。deviceId 必须和初始化脚本里设备表的主键对应point 字段要和点位定义表一致ts 用毫秒时间戳。这样投递的数据才会被后续的告警和展示逻辑正确处理。跑通之后把模拟数据脚本纳入版本管理每次改完采集解析逻辑都重新跑一遍确认数据从采集到入库再到前端展示都不丢。6.2 演示模式用内存数据库隔离真实数据部署验证方面有一个省事的方法后端服务启动时加一个“演示模式”配置项用内存数据库代替真实 MySQL这样演示系统给别人看时不需要暴露任何真实数据。很多开源系统本身就自带这个配置项如果手头源码没有可以自己加一个后续做售前演示、给领导汇报都用得上。接入新的设备类型时先写一份对应设备的 mock 数据再把协议解析代码接上去这样能把调试周期从半天压缩到半小时。从那以后我每次拿到这套源码或者类似的电力运维工程都会在第一天把 mock 数据链路跑通然后才去看功能代码。这个习惯让我少踩了很多坑希望这篇拆解能帮到你。本文还有配套的精品资源点击获取