一锅稀烂的“大楼监控”系统,我动手了
我跟大家这几年我住的这栋公寓大楼,那个所谓的“智能监控系统”,简直就是个笑话。这玩意儿是十年前装的,当时承包商吹得天花乱坠,说是什么集成化管理平台。我最近实在受不了,自己动手给它彻底翻新了一遍。今天就把我怎么把它从一堆垃圾堆里扒拉出来的过程,跟大家捋一捋。
刚开始,我只是想查一下我们楼里供水压力的实时曲线,因为最近老是半夜水流变小。我潜进去看了一眼那个监控系统的主机房,立马傻眼了。一个布满了灰尘的旧机箱,里面装的是一个古董级别的服务器,上面跑着一个看起来像XP时代的界面。代码更是恶心人,全是用VB写的,变量命名稀里糊涂,注释基本没有。
我当场就决定:推翻重来。这玩意儿维护起来就是一团麻,谁也说不清哪个模块是干嘛的。我清楚知道,只要不动底层的硬件传感器,只改上层的展示和日志记录,我的工作量能控制住。
我怎么把这堆破烂整合起来的
我做的就是把那个老古董服务器给拔了电。我可没心思去学怎么维护VB代码。我直接在角落里找了个树莓派,刷了个最新的系统,准备用最简单的方式跑起来。
技术栈我选了最省事儿的:Python+Flask。为简单、部署快,我一个人搞定。数据存储,我连MySQL都懒得装,直接上了SQLite。反正这栋楼的数据量再大,一天也超不过几个G,够用了。我主要的目标是实时显示水电消耗、电梯运行状态和消防警报的最新日志。
第一步,我得把老系统的传感器数据给剥离出来。那帮承包商当年为了省事儿,用的都是Modbus协议,但他们把地址和寄存器映射表藏得跟什么似的。我问了物业好几次,他们都说不知道。我气得没办法,只能硬着头皮去查线。
我爬进了地下二层的配电室,那地方又潮又脏。
我花了两天时间,对照着设备手册,一个点一个点地硬性解析了所有的数据包。
我写了一个Python脚本,专门用来监听主线路上跑的数据,然后把有用的信息抓取下来,存进我的SQLite数据库。
我这过程多不容易?我跟大家讲个笑话。我为了调试电梯的运行状态模块,有天晚上十点多,我还在顶楼的电梯机房蹲着,蚊子咬了我一身包。电梯的那个控制板,说明书是日文的,我找了半天,才发现那个显示“运行中”的信号,竟然是一个常开点,而不是数字信号。我当时就想骂娘,这都是哪个年代的鬼东西。
实现日志更新和我的“惊喜”发现
日志更新是最重要的部分。老系统那日志根本没法看,要么是时间错乱,要么就是直接崩溃。我新的系统直接就是简洁明了的JSON格式,而且我给它定制了一个简单的网页界面,用最基本的HTML和CSS渲染出来,实时刷新。
我把日志分为三类:
能源消耗记录:每小时记录一次水电燃气的总用量,并计算峰谷差价。
设备状态记录:电梯运行、水泵压力、消防阀门开启状态。
系统自我诊断记录:我的树莓派和数据抓取脚本的运行状态。
在调试消防警报模块的时候,我发现了一个天大的秘密。我们楼里的消防传感器,有三分之一根本就没接线!它们只是模型,或者说,它们是“假”的。我追踪了那些线缆,发现它们根本没通到核心报警器,而是直接被剪断了,藏在了吊顶里。我当时气得浑身发抖,这不就是骗人的豆腐渣工程吗?我立刻把这个发现用红色的粗体字,标记进了我的新日志系统里,并且截屏留证。
因为这个发现,我后来不得不又花了一周时间,自己去买来了一批新的、可靠的传感器,把那些假的都换掉了。换传感器倒是简单,但要接入核心消防系统,费了我老大劲。那个系统锁得死死的,我几乎是靠猜端口和暴力尝试才找到正确的通信密钥,把我的数据流硬塞了进去。
我们公寓大楼的“最新更新日志”,已经平稳运行快两个月了。系统跑得飞快,每天早上我都能看到精确到分钟的昨夜运行报告。相比以前动不动就宕机、数据丢失的破烂,我现在这套简单的玩意儿,不知道高到哪里去了。这回实践下来,我最大的感受就是,遇到问题不要怕麻烦,自己动手,才能知道那帮承包商到底挖了多少坑。