
简介本资源是一套面向水利工程安全监测领域的物联网系统完整实现方案适用于高校水利/地信专业师生、智慧水务工程师及物联网系统开发者解决堤坝渗漏灾害早期识别难、响应滞后、多源数据融合不足等实际问题。系统涵盖地质电阻率传感采集、边缘设备协同通信、云端数据建模分析、Android端远程管控及Web级可视化预警全流程支持全天候无人值守监测与分级告警管理。压缩包共193个文件含71个C#核心逻辑文件如BitkyMainWindow.xaml.cs、CommPresenter.cs、24个Java移动端模块、29个XML配置与界面定义、19个PNG图标资源及12个XAML界面模板辅以Gradle构建脚本、CSProj工程文件与App.config配置项整体仅685KB结构紧凑、模块职责清晰。目前已有39人学习下载提供可直接编译运行的全栈代码框架包含通信协议解析、电阻率反演逻辑、预警阈值动态配置及安全评估指标计算等关键实现便于二次开发与教学演示。1. 项目缘起当堤坝安全遇上物联网我们能做什么干了这么多年工程监测和嵌入式开发我越来越觉得很多传统行业的痛点其实就差一层“窗户纸”去捅破。就拿堤坝安全监测来说过去我们怎么干靠人工定期巡检拿个锤子敲敲打打看看有没有裂缝或者埋设一些简单的传感器定期去现场抄数据回来再分析。这种方式人力成本高不说最大的问题是滞后性。等巡检人员发现问题可能渗漏已经发展了一段时间错过了最佳的处置时机。而且数据是孤立的很难形成对堤坝整体健康状况的动态评估。所以当我和团队开始琢磨这个“基于物联网的堤坝渗漏监测”项目时核心目标就非常明确变“事后补救”为“事前预警”。我们要做的不是简单地给传统方法加个“联网”的帽子而是利用物联网技术构建一个从数据感知、传输、处理到决策的完整闭环。这个系统需要能全天候自动工作把现场的各种设备比如我们重点采用的地质电阻率仪协同起来把数据实时送到云端进行深度分析最终通过一个直观的App把预警信息和健康状态推送给管理人员。听起来是不是有点“智慧城市”里基础设施管理的味道没错其内核是相通的。但堤坝场景有其特殊性环境恶劣日晒雨淋、温湿度变化大、供电困难、网络信号可能不稳定、监测点分散且地质条件复杂。这些都是在实验室里玩开发板遇不到的真实挑战。这个项目就是我们在啃下这些硬骨头后整理出来的一套经过实战检验的解决方案。无论你是物联网开发者、水利工程技术人员还是对软硬件结合项目感兴趣的朋友相信都能从中找到一些可借鉴的思路。2. 系统架构全景从传感器到指尖的预警在动手写一行代码、焊一个电路之前我们必须把整个系统的骨架搭清楚。一个健壮的物联网系统绝不是一堆硬件和软件的简单堆砌而是层次分明、职责清晰的有机体。我们的堤坝监测系统可以清晰地划分为四个层级感知层、网络层、平台层和应用层。每一层都有其核心任务和关键技术选型下面我来逐一拆解。2.1 感知层地质电阻率监测为何是“听诊器”感知层是系统的“神经末梢”负责采集堤坝本体最原始的状态信息。对于渗漏监测关键是要找到能灵敏反映内部结构变化的物理量。我们选择了地质电阻率法作为核心监测手段。这里需要多解释几句“为什么”。土壤或岩石的电阻率与其含水量、密实度、离子成分密切相关。当堤坝发生渗漏时水分运移会改变特定区域的导电性从而导致电阻率分布发生变化。通过在地表或钻孔中布置电极阵列向地下注入电流并测量电位差我们就可以反演出地下一定深度范围内的电阻率二维或三维成像图。这好比给堤坝做“CT扫描”能直观地“看到”水分异常区低阻区的位置和形态这是表面巡查和单点传感器如渗压计难以做到的。在我们的系统中感知层主要由以下设备构成高密度电阻率仪这是核心设备。我们选用的是支持分布式电极布设的智能仪器。它内置微处理器能自动完成电极切换、电流发射、电压测量、数据初步滤波和打包。为了适应堤坝野外环境我们对其进行了防水、防雷和宽温设计。环境辅助传感器为了更准确地解读电阻率数据必须同步监测环境因素。我们集成了温湿度传感器因为温度对土壤电阻率影响显著需要进行温度补偿。雨量计区分是降雨入渗还是内部渗漏引起的电阻率变化。渗压计/水位计在关键断面布设与电阻率数据相互验证。边缘计算网关这是感知层的“大脑”。我们采用基于ARM Cortex-A系列的处理核心如树莓派CM4或类似工业级核心板自制了网关。它的任务很重设备协同通过RS-485、CAN或4-20mA接口轮询采集上述所有传感器的数据统一时标。数据预处理在本地进行简单的数据清洗剔除野值、滤波平滑噪声和压缩减少无效数据传输。协议转换将各类传感器的私有协议统一封装成MQTT或CoAP报文准备上传。断点续传考虑到堤坝网络可能不稳定网关需要具备本地数据缓存能力在网络恢复后补传数据。注意电极的布设方案如温纳装置、施伦贝谢装置和极距的选择直接决定了探测的深度和分辨率。这需要根据堤坝的规模、重点监测区域如坝肩、坝基的地质资料来预先设计不是随便插几根电极就行。我们通常采用固定断面长期监测与机动扫描相结合的方式。2.2 网络层在荒郊野岭如何保证数据“不掉线”网络层是系统的“大动脉”。堤坝现场往往缺乏有线网络电力供应也可能只有太阳能蓄电池因此网络传输方案必须兼顾可靠性、低功耗和成本。我们采用了混合组网策略主干回传对于有公共移动网络覆盖的区域优先使用4G Cat.1模块。相比传统的4G全功能模块Cat.1在功耗和成本上更有优势而带宽对于传输传感器数据流通常每秒只有几KB到几十KB完全足够。在没有4G信号但可能有2G/3G信号的偏远地区模块能自动降级。本地自组网对于超大型堤坝或信号盲区传感器节点距离网关可能较远。我们会在节点与网关之间采用LoRa技术构建一个低功耗、远距离的私有网络。LoRa节点将数据接力传回网关再由网关通过4G统一上传。这样避免了每个节点都安装昂贵的4G模块。备用通道在极其重要的监测点我们会部署双SIM卡互备的4G路由器甚至预留卫星通信模块接口作为终极备份。网络层的软件核心是稳定的心跳机制和重传策略。网关会与云平台保持MQTT长连接并定时发送心跳包。一旦检测到连接断开会按照指数退避算法尝试重连。所有待发数据都会写入网关的SD卡或eMMC存储确保数据不丢失。2.3 平台层云端大脑如何从数据中“看见”风险数据传到云端才是价值挖掘的开始。平台层我们基于主流的云服务如阿里云IoT平台、AWS IoT Core或自建基于开源组件的平台构建主要完成三件事设备管理、数据分析和预警判断。设备管理是基础。云平台为每一个网关、每一个传感器分配唯一的身份标识ProductKey/DeviceName实现设备的注册、认证、状态监控、远程配置如下发采集频率和固件OTA升级。这让管理成千上万的监测点成为可能。数据分析是核心。原始电阻率数据只是一堆电压电流值必须经过一系列处理才能变成有用的信息数据解析与入库云端的规则引擎会解析MQTT消息将不同传感器的数据拆分并写入时序数据库如InfluxDB、TDengine和关系型数据库如PostgreSQL。时序数据库用于高效存储和查询时间序列数据关系型数据库用于存储设备元数据、预警规则等。电阻率反演计算这是最吃计算资源的环节。我们会在云端部署电阻率反演算法服务用C或高性能Python编写。该服务从数据库读取一个周期如每小时的原始阵列数据调用基于最小二乘的平滑约束反演算法迭代计算出生电阻率断面图。这个过程我们做成了异步任务通过消息队列如RabbitMQ触发避免阻塞主流程。特征提取与融合从反演得到的电阻率断面图中算法会自动提取特征如“低阻区面积”、“低阻区中心深度”、“电阻率变化梯度”等。同时融合同一时间段的环境数据降雨量、温度和渗压数据进行综合判断。例如如果发现低阻区扩大但同时期并无降雨那么渗漏的风险等级就大大提高了。预警判断是输出。我们设定了多级预警规则库阈值预警某个特征值超过历史正常范围阈值。趋势预警特征值在连续多个周期内呈现明显的恶化趋势如低阻区面积持续扩大。模型预警利用历史正常数据和异常数据训练简单的机器学习模型如孤立森林识别出与正常模式偏离的“异常点”。 一旦触发预警规则系统会自动生成一条预警事件存入数据库并立即通过平台层的消息推送服务向下一层应用层发送通知。2.4 应用层Android App如何成为管理员的“千里眼”应用层是用户交互的界面我们开发了Android原生App。选择Android是因为其在工程现场终端设备上的普及性和灵活性。这个App绝非简单的数据展示它是一个移动指挥中心。核心功能模块全局态势总览首页以地图集成高德或百度地图SDK为核心标注所有监测堤坝的位置并用颜色灯绿、黄、橙、红直观显示其当前安全状态。管理员一眼可知重点在哪里。设备远程控制这是“控制”能力的体现。管理员可以远程选择任一网关查看其连接的传感器列表、实时电量、信号强度。可以远程下发指令临时提高某断面的采集频率、重启某个传感器、切换网关的网络模式等。所有指令通过云平台中转采用HTTPS双向认证保证安全。数据可视化深度分析历史曲线可以任意选择传感器、任意时间段绘制数据变化曲线。支持多曲线同屏对比如将电阻率特征值与渗压水位、降雨量叠加方便分析相关性。断面图动态展示这是亮点。App可以请求并展示云端生成的电阻率反演断面图并且支持滑动时间轴动态播放断面图随时间的变化动画渗漏通道的发育过程一目了然。预警事件管理列表展示所有预警事件可按等级、时间、堤坝筛选。点击进入事件详情可以看到触发预警的数据、相关的断面图、系统给出的初步研判结论以及处置建议模板。报告生成与分享App内可一键生成指定时段的安全监测简报包含关键数据、曲线、断面图和安全评估结论并支持导出PDF或通过邮件、社交软件分享。开发这个App我们用的是Android Studio架构上采用MVVM模式网络层用Retrofit OkHttp数据持久化用Room异步任务用Coroutines。UI设计上充分考虑户外使用场景增大关键字体和按钮色彩对比度强确保在阳光下也能看清。3. 核心硬件与嵌入式开发实战要点聊完了架构我们深入到硬件和嵌入式开发的细节。这一部分是系统稳定性的根基很多坑都是在实际部署中踩出来的。3.1 边缘网关的“五脏六腑”设计与选型网关是现场唯一“有智商”的设备它的设计必须稳健。我们的自制网关核心板选型基于以下几方面考量处理能力需要运行Linux系统如Ubuntu Core或Buildroot定制管理多个传感器接口、运行本地预处理算法、处理网络协议栈。Cortex-A53/A55级别的核心板是性价比之选。接口丰富性必须至少具备2-3路独立的串口UART用于连接电阻率仪和其他传感器1路CAN接口用于工业级传感器多个GPIO用于状态指示灯和继电器控制可远程重启挂死的传感器。可靠性工业级宽温设计-40°C ~ 85°C支持看门狗定时器防止软件死机电源输入具备防反接、过压过流保护。扩展存储支持TF卡或eMMC用于缓存数据容量至少32GB。电源管理是重中之重。堤坝现场通常采用太阳能电池板铅酸蓄电池/锂电池供电。我们的网关硬件上设计了宽电压输入DC 9-36V并集成了高效的DC-DC降压模块。软件上实现了分级功耗管理正常工作模式所有功能全开。数据采集模式关闭显示如果有、降低CPU频率仅维持传感器通信。休眠模式在设定的无任务时段如深夜关闭4G模块和大部分外设仅保持RTC运行定时唤醒。通过这种策略我们将网关的平均功耗控制在2-3W大大减轻了太阳能供电系统的压力。3.2 传感器通信协议的统一与解析现场传感器品牌、型号可能各异协议五花八门Modbus RTU、自定义ASCII码、4-20mA模拟量。网关的首要任务就是“翻译”。我们的做法是在网关上运行一个**“设备驱动容器”**。这是一个用C/Python编写的守护进程它为每一种类型的传感器定义一个“驱动插件”。插件里封装了连接参数串口波特率、数据位、停止位、校验位。通信指令读取数据的命令帧格式。解析规则如何从返回的字节流中解析出有效的工程值例如两个字节高位在前除以10.0表示温度。数据校验CRC校验或和校验的实现。驱动插件以配置文件如JSON格式的形式存在。当需要接入一个新型号传感器时我们只需根据其手册编写一个新的驱动配置文件放入指定目录重启驱动容器服务即可无需修改核心代码。这极大地提高了系统的扩展性和部署效率。以地质电阻率仪为例其通信协议通常比较复杂一次测量会返回上百个电极对的原始电压值。我们的驱动插件会完成发送测量指令 - 等待并接收数据块 - 按预定格式解析出各通道电压值 - 进行初步的坏点剔除和滤波 - 将处理后的数据包连同时间戳、设备ID一起发布到网关内部的MQTT Broker如Mosquitto的一个特定主题上。网关的主服务再订阅这个主题将数据与其他传感器数据打包准备上传云端。3.3 低功耗与断网续传的嵌入式软件策略嵌入式软件的稳定性直接决定了数据完整性。我们主要解决了两个问题意外断电导致的数据损坏和网络中断期间的数据不丢。对于数据损坏我们采用了以下措施文件系统使用具有日志恢复功能的文件系统如ext4 with journal避免突然断电导致文件系统结构损坏。写操作策略对于重要的配置文件和缓存数据采用“原子写”操作。即先写入一个临时文件写入成功并同步到磁盘后再重命名为目标文件。这保证了在任何时刻目标文件要么是完整的旧版本要么是完整的新版本不会出现写一半的中间状态。数据库选择本地缓存数据我们使用了SQLite并在每次事务提交后立即调用PRAGMA synchronous FULL;确保数据真正落盘当然这会牺牲一些速度但换来了数据安全。对于断网续传我们的策略是“本地队列 可靠上传”网关主服务将待上传的数据包JSON格式追加写入到一个本地的环形队列文件中避免单个文件无限增大。启动一个独立的上传线程尝试连接云平台MQTT Broker。连接成功后从队列文件头部读取数据包通过MQTT的QoS 1至少送达一次等级发布到云端。云端收到后回复PUBACK确认。网关收到确认后才将这条数据从队列文件中标记为已发送或删除。如果发送失败或超时未收到确认上传线程会等待一段时间后重试并记录重试次数。超过最大重试次数如10次后该数据包会被移入一个“死信”文件供后续人工检查避免阻塞后续数据。这套机制保证了即使在网络长时间中断如数天的情况下数据也能完整地保存在本地待网络恢复后有序上传不丢失、不重复。4. 云端数据处理与智能预警算法剖析数据上了云真正的魔法就开始了。这一层是系统的“智慧”所在也是我们投入算法研究最多的地方。4.1 电阻率数据反演从电压到图像的“翻译官”电阻率反演是一个典型的地球物理反问题简单说就是已知地表测量的电压和电流去推测地下的电阻率分布。这是一个不适定问题解不唯一。我们的目标是找到一个最合理的、符合地质先验知识的电阻率模型。我们采用的是基于最小二乘的平滑约束反演算法如Res2DInv使用的算法核心。在云端我们将其部署为一个微服务。流程如下数据预处理服务接收原始阵列数据进行地形校正如果电极不是布置在水平面上、剔除明显超出物理范围的异常值。正演计算根据一个初始的电阻率模型通常设为均匀半空间利用有限元法或有限差分法计算在该模型下地表应观测到的理论电压值。反演迭代比较理论电压值与实际观测电压值的差异目标函数。通过迭代调整地下各网格单元的电阻率值使得目标函数最小化。同时加入平滑约束条件要求相邻网格的电阻率变化不能太剧烈这符合大多数地质体渐变的特性。结果输出迭代收敛后输出最终的电阻率断面图通常用彩色云图表示以及反演拟合误差等质量评价参数。这个计算过程比较耗时对于上百个数据点的断面一次反演可能需要几十秒到几分钟。因此我们将其设计为异步任务。当数据入库后会触发一个消息到RabbitMQ。反演服务作为消费者从队列中取出任务进行计算完成后将结果图片PNG格式上传到对象存储如OSS并将图片URL和反演参数写回数据库。App端需要显示时直接加载这个URL即可。实操心得反演结果的质量极度依赖于数据质量和初始参数。我们会在云端部署一个数据质量自动评估模块在触发反演前先跑一遍。它会检查数据点的数量、观测误差的大小、电极接地的稳定性等。如果质量太差会记录日志并报警提示可能需要现场检查电极而不是直接进行反演产出可能误导人的结果。4.2 多源数据融合与特征工程只有电阻率图像还不够我们需要从中提取出能表征渗漏风险的、可量化的特征。同时要结合环境数据来排除干扰。特征提取示例low_resistivity_area: 电阻率值低于设定阈值如背景值的70%的像素总面积。area_center_depth: 上述低阻区域中心点的平均埋深。resistivity_gradient: 低阻区边缘电阻率的变化率。temporal_change_rate: 当前断面与上一周期断面相比低阻区面积的扩张速率。这些特征值会随着时间形成序列。我们同时会关联同期的rainfall_last_24h: 过去24小时累计降雨量。temperature: 当前地表温度用于电阻率的温度校正。piezometer_level: 关键渗压计的水位读数。融合判断逻辑# 伪代码示例 def risk_assessment(features, env): base_risk 0 # 规则1低阻区面积绝对大小 if features.low_resistivity_area THRESHOLD_AREA_CRITICAL: base_risk 60 elif features.low_resistivity_area THRESHOLD_AREA_WARNING: base_risk 30 # 规则2低阻区在扩大趋势 if features.temporal_change_rate THRESHOLD_GROWTH_RATE: base_risk 40 # 规则3环境干扰排除 if env.rainfall_last_24h RAINFALL_INFLUENCE_THRESHOLD: # 近期有强降雨可能干扰电阻率降低风险权重 base_risk * 0.6 if abs(env.temperature - BASE_TEMP) 15: # 温度剧烈变化影响电阻率测量加入不确定性 base_risk - 10 # 规则4与渗压计数据印证 if env.piezometer_level LEVEL_WARNING and base_risk 50: # 渗压水位也高相互印证风险增加 base_risk 20 return min(max(base_risk, 0), 100) # 限定在0-100范围这是一个基于规则的专家系统雏形。在实际项目中我们正在尝试引入简单的机器学习模型如梯度提升树GBDT来学习历史正常和异常数据让风险判断更智能。4.3 预警规则引擎的设计与实现预警规则引擎是判断“何时该报警”的裁判。我们将其设计为可动态配置、可扩展的。在数据库中我们有一张alert_rules表主要字段如下规则ID规则名称适用堤坝/断面触发条件 (SQL逻辑表达式)预警等级是否启用1低阻区超绝对阈值全部low_resistivity_area 50 AND rainfall_last_24h 10橙色是2低阻区快速扩大A堤坝-断面1temporal_change_rate 5 AND low_resistivity_area 20红色是3渗压水位异常B堤坝-坝基piezometer_level 30.5黄色是云端有一个规则引擎服务定时如每5分钟扫描最新的特征数据和环境数据。它会加载所有启用的规则将数据代入规则的“触发条件”中进行判断。这个“触发条件”字段我们设计成一个简单的表达式语言引擎会解析并执行它。一旦某条规则被触发引擎就会在alert_events表中创建一条预警事件记录包含时间、位置、触发的规则、相关数据快照、计算出的风险值。调用消息推送服务根据预警等级通过App推送、短信、甚至电话对于红色预警通知相关责任人。在App的地图界面和预警列表中该点位会高亮显示。这种设计的好处是管理人员无需修改代码只需在后台管理页面上增删改查规则就能灵活地调整预警策略适应不同堤坝、不同季节的监测需求。5. Android应用开发中的关键技术与避坑指南最后我们聊聊让一切变得可触可控的Android App。开发一个给工程人员用的专业App和开发一个消费级App侧重点完全不同。稳定、清晰、高效是第一要务。5.1 高效数据同步与本地缓存策略App需要展示实时数据和大量的历史数据。如果每次查看都从云端请求不仅慢而且耗流量。我们采用了分层缓存增量同步的策略。1. 实时数据对于地图状态灯、最新预警列表这类要求实时性高的数据通过建立WebSocket长连接与云端通信。云端一旦有状态更新立即推送至App。这保证了管理员能第一时间感知到险情。2. 历史数据元数据缓存堤坝列表、断面列表、传感器列表等不常变化的信息在App首次启动时全量拉取并持久化存储在Room数据库中。之后定期如每天在WiFi环境下增量同步。时序数据缓存这是难点。用户可能查看任意传感器、任意时间范围的数据。我们的策略是“按需加载智能预取”。按需加载当用户请求某个传感器某天的数据时App先检查本地Room数据库是否有缓存。没有则向云端发起请求请求成功后将数据存入本地同时记录“此传感器此日数据已缓存”的标记。智能预取在WiFi环境下后台服务会根据用户习惯如经常查看某几个断面和当前时间预取最近几天的高频数据如每小时一个点到本地。当用户真正打开图表时数据瞬间呈现体验流畅。缓存清理设定缓存策略例如自动清理30天前的详细数据只保留日均值等聚合数据以控制本地存储空间。3. 大文件缓存电阻率断面图是PNG图片文件较大。我们使用Glide或Coil这样的图片加载库它们自带强大的内存和磁盘缓存机制。我们会将断面图的URL作为键进行缓存。对于同一断面不同时间的图片通过URL中包含时间戳参数来区分。5.2 复杂图表绘制与交互体验优化数据可视化是App的灵魂。我们使用了MPAndroidChart这款强大的库来绘制曲线图并进行了大量定制。多轴联动在一张图上同时展示电阻率特征值主Y轴、降雨量次Y轴1、水位次Y轴2的时间序列。这需要仔细配置每个数据集的Y轴归属并确保缩放和平移时能联动。高性能渲染当需要绘制长时间段如一年的日数据时数据点可能超过300个。直接绘制所有点会导致卡顿。我们的优化方法是在数据传入图表前先根据当前视图的像素宽度进行降采样。例如视图只有1000像素宽那么我们最多只保留1000个最具代表性的数据点如取区间内的最大值、最小值、首尾值这样在保证趋势不变的前提下渲染性能大幅提升。标记点与详情支持用户点击图表上的数据点弹出气泡MarkerView显示该点的精确时间、数值。对于预警事件发生的时间点我们在X轴上用垂直的标记线高亮显示点击标记线可以跳转到该预警事件的详情页。地图集成方面我们使用了高德地图SDK。除了标注点位和状态我们还实现了自定义InfoWindow点击地图上的堤坝图标弹出自定义的信息窗口不仅显示名称状态还直接嵌入关键的实时数据如最新风险值。轨迹绘制对于巡检人员可以将其GPS轨迹绘制在地图上并与当时的监测数据关联。离线地图提前下载堤坝所在区域的高清离线地图包确保在网络信号不佳的现场也能流畅使用地图功能。5.3 后台服务、通知与设备兼容性一个专业的监测App需要长时间在后台运行并及时推送预警。后台数据同步服务我们实现了一个继承自WorkManager的定期后台任务。即使用户退出了AppWorkManager也能在合适的时机如连接充电器且有WiFi时唤醒我们的Worker执行数据预取和同步任务。WorkManager是Android推荐的后台任务调度方案能很好地处理不同系统版本的限制。前台服务与保活对于需要持续保持WebSocket连接接收实时预警的场景我们启动了前台服务Foreground Service。这会在通知栏显示一个常驻通知告诉用户系统正在运行。这提高了进程的优先级降低了被系统杀死的概率。当然我们会把通知的优先级调低避免过度打扰用户。推送通道适配为了确保预警通知能及时送达我们接入了厂商推送小米、华为、OPPO、vivo的推送SDK和 Firebase Cloud Messaging (FCM) 作为补充。在App启动时根据手机品牌初始化对应的推送SDK并获取Token注册到我们的云端。这样即使App进程被杀死系统级的推送通道也能将预警消息送达并唤醒App。深色模式与多尺寸适配考虑到工程人员可能在夜间或户外强光下使用我们完整适配了Android的深色主题Dark Mode。所有UI颜色都定义在资源文件中并提供了亮色和暗色两套配置。布局方面大量使用ConstraintLayout确保在不同尺寸和分辨率的手机、平板甚至车载设备上都能有良好的显示效果。避坑指南权限管理在Android 6.0以上危险权限需要动态申请。我们会在App首次启动和真正需要用到某个功能如定位用于地图时分步、清晰地引导用户授权并解释用途“需要您的位置权限来在地图上精准定位监测点”。网络状态监听所有网络请求都必须考虑无网、弱网情况。我们使用OkHttp的拦截器在请求前检查网络状态无网络时直接返回缓存数据或友好提示。同时监听网络连接变化在网络恢复时自动重试失败的请求或恢复WebSocket连接。内存泄漏在Activity/Fragment中注册的监听器如地图生命周期监听器、EventBus订阅者必须在onDestroy中反注册。使用RxJava或Coroutines时确保在生命周期结束时取消订阅或取消协程。可以使用LeakCanary工具在开发阶段进行检测。这个项目从硬件选型、嵌入式开发、云端架构到App实现是一个典型的“端-边-云”协同的物联网系统。它没有用到多么炫酷的前沿科技但每一个环节都围绕着“可靠、实用、有效”这个核心目标进行设计和打磨。在实际部署中我们经历了夏季雷击损坏设备、冬季低温导致电池续航锐减、网络运营商基站故障导致数据中断等各种意外也正是解决这些问题的过程让系统变得越来越健壮。希望这次分享能为你带来一些跨领域系统集成的实战思路。本文还有配套的精品资源点击获取