忽然发现已经最后一天了,卡点提交。
简单介绍一下我的项目:
一、项目背景
大家都知道,温度过高,印刷电路板的结构强度会变弱,温度过低,绝缘材料会变脆,同样会使结构强度变弱;对记录介质而言,温度过高或过低都会导致数据的丢失或存取故障。湿度对计算机设备的影响也同样明显,当相对湿度较高时,水蒸汽在电子元器件或电介质材料表面形成水膜,容易引起电子元器件之间出现形成通路;当相对湿度过低时,容易产生较高的静电电压。可见温湿度对计算机机房设备有着较大的影响。环境电磁场,同样是影响设备是否能稳定工作的重要指标,在电磁兼容EMC领域中,设备本身产生电磁干扰EMI和电磁干扰防范EMP的研究工作也是重中之重。另外现在都提倡绿色环保,因此设备的功耗也是我们经常需要的研究对象。
我希望通过sensortile.box来监控机房环境,分别监控温度、湿度、电磁、功率四个指标。Sensortile.box天生具备温度、湿度、磁场(磁场和电磁干扰应该不是一个玩意吧,我就当它是了)监控功能,自带蓝牙传输,内置TF卡可以记录监控离线时的信息,通过简单编程可以实现功率作为外部数据引入,整合后,向服务器传送,再通过CS或BS模式将多个传感器的信息呈现给客户,实现集中监控,未来可以扩展报警联动、分级管理、大数据分析等模块。
二、作品简介
如背景介绍所述,这个项目相对较大,包括传感器编程、前端开发、报警联动、数据分析等工作。其中传感器编程部分已基本完成,通过sensortile.box采集周边温度、湿度、电磁场信息,通过蓝牙将数据传到某个服务器,但时间有限,引入外部监控机柜功率功能相关功能尚未开发,目前已完成的部分包括监控温度、湿度、磁场。Web大致界面如下:
通过图形化展现可用传感器所在位置,红色表示已内置该传感器,但目前蓝牙未搜索到。对于颜色和图片的优化可以以后再说,大家看在底色(#66ccff)是洛天依小姐姐本命色份上,先凑合着看看吧。
单击可用的传感器,可以看到传感器读取的信息值。
页面是准静态的,30秒自动刷新一次,即时数据需要下端刷新按钮手工刷新,图片用PIL生成。
因为是http方式,所以做多媒体呈现是非常容易的,在这里我只做了图片,但如果有需要,插入视频、声音也很方便。
三、系统框图
构想的使用场景:
因为蓝牙的传输距离非常有限,不太可能覆盖住整个机房,故采用分级管理的方式:下位机(树莓派)读取sensortile.box信息,上传到云服务器,再通过云服务器进行数据整合呈现。
开发时,因为sensortile.box的数量实在太少(只有一个),因此把云功能裁剪了。目前开发的部分已可以使用,优化空间还有不少,已实现的功能和待继续优化开发的结构框图如下:
其中TBD部分的主要包括数据库的搭建,APP界面开发等等,难度不大,只是比较耗时间。
四、各部分功能说明
软件功能流程框图:
Sensortile.box作为传感器的部分,采集相关信息流,通过蓝牙给到系统,系统再通过数据处理,转换成数组形式存储,访问web页面时生成曲线图片,提交给用户。
五、作品源码和简介
引入库文件:
其中flask是http的框架,apschedule是定时任务,bluetooth是蓝牙库,random产生随机数字(用途后续章节介绍),drawpic和readsensor都是我自己写的,分别用于提供曲线图和读取传感器。
自定义传感器数据类:
之所以只使用81个数值,是画图只画81个点就能够很好呈现出变化趋势。
传感器读取:套用例程,监控温度、湿度、磁场。上位机读取传感器可以参考我之前的帖子
Web框架方案:
采用flask方案,其中@app.route('/<sensor>')可以将<sensor>获取sensor的索引号,无需对每个sensor都写一份代码。
运行后服务器界面:
六、视频演示(视频简介+链接)
第一个视频,是我在模拟了有多个传感器(其实是多个蓝牙)的,只有正确读取信息,才会显示结果。曲线只显示81个点,超过81个点后再读入新值的话,会丢弃list的0位数值,保持曲线结果始终最新。考虑到带宽,30秒自动刷新一次网页时才会更新各项数值,如果需要加速更新,可以点击按钮手工强制刷出最新显示值。
第二个视频,是我晚些时候修改了刷新频率,将网页模板中setTimeout('Refresh()',30000);改为了setTimeout('Refresh()',5000);,把页面刷新调整到5秒尝试效果的视频,曲线果然可以连续画出,但页面闪烁得厉害,估计还是python效率导致,考虑用java重写代码可能会好一点。另外我是用生成图片+链接方式读取图片,而不是直接将图片推送到前端,有个写硬盘的过程,也非常影响效率,这点可以再优化。录视频的时候不小心碰到了传感器,所以有个磁场的跳变。。。
七、开发心得
开发中间过程略,共享一下我碰到的几个问题和解决方案吧:
以上是我开发的小小感悟,在此抛一小砖,望大家不吝赐玉。虽已结题,但后续如有新心得,将继续在本站发帖!
本帖最后由 tobot 于 2020-7-5 21:52 编辑