“2016Mouser物联网创新设计大赛”项目投票(有奖)火热进行中!
点击查看全部项目http://www.eefocus.com/activity/mouser/vote
1. 写在前面: 这是一个没有完成的项目,原因在于团队组织问题和自身水平有限。原本不想上传资料浪费论坛资源和网友时间,但是比赛承办方爱板网多次电话沟通,希望将部分资料上传,所以将资料略微整理提交上来,希望不要浪费大家太多时间。很荣幸有机会参加这样一个比赛,让我们学习了很多新知识也了解了自身的不足,非常感谢大赛主办方和承办方!
2. 项目介绍 有感于互联网数据中心(IDC)动力环境监控体系的一些缺陷,如昂贵、封闭、复杂和使用不便等,我们在去年的时候开始尝试用开源软件和开源硬件取代传统的组态软件。最开始规划用CACTI软件用来绘制图形,Arduino用来连接传感器。在这个规划下,我们用很短的时间搭建了一个原型系统,一块Arduino MEGA 2560 + Ethernet Shield,使用内置ADC对机柜功率进行取样(4-20mA电流环)。利用ArduinoEthernet库,在实例程序“WebServer”的基础上加入自定义的数据格式和功率计算算法,将实时功率数据用WEB方式展现出来。在服务器端,用BASH脚本读取Arduino提供的数据,作为CACTI的数据源,CACTI负责将数据绘制成图形。这个简易的原型系统非常平稳的工作了大半年,直到我们知道了此次大赛。 当时我们认为Broadcom 的WIFI套件和两款评估板很适合这个IDC项目,比如说有WIFI,可以降低布线成、有蓝牙和RFID,可以作为机柜级门禁功能来拓展数据中心机柜安全防护能力。同时,我们也计划对整体架构进行大幅度调整,加入一个IoT数据处理层,专门用来采集、整理并存储来自传感器的原始数据,CACTI和echarts等作为数据使用者,进行各种类型的图标绘制和展示。整体架构图如下:
3. 组件介绍 3.1 传感器 计划兼容各类型传感器和探针,只要数据和通讯标准符合约定要求。约定使用REST(RESTful Web Services)作为传感器与数据处理层之间的通讯方式,数据格式使用json。网络层面,使用HTTP作为通讯协议。在原型设计中,传感器作为HTTP Server, CACTI Data Source脚本作为Client。在新的规划中,为了得到更好的网络兼容性和数据及时性,将传感器作为Client,数据处理层作为HTTP Server。这样修改,未来的远程传感器和探针,可以不需要任何额外开销穿透家用路由器的NAT和运营商的NAT。在传感器有紧急消息需要上报时,这种架构也可以很好的响应,不需要等待上层的轮询。REST则是三大主流Web Service实现方案之一,相对SOAP和XML-RPC,REST更为简洁,更适合嵌入式系统和IoT使用。同样,json相对于XML也更为简单易读,可以降低编解码开销。示例为获取传感器1上传的1号资源数值: 返回:
目前已经基于Arduino和Raspberry Pi实现了传感器,接入了模拟量设备、DS18B20和少量RS485设备。由于对WICED平台不甚了解,因此未能调通Broadcom开发套件和开发板,这也是此次最大的遗憾。
3.2 IoT数据处理层 此组件主要用于构建基于HTTP的REST接口,用来接受传感器上报的数据和事件。存储数据,并向数据使用者提供数据。此部分主要由Nginx和Redis构成,开发语言是PHP。Nginx是高性能的HTTP和反向代理服务器,具有稳定、功能丰富、配置简单、消耗资源低等优点。Redis是内存型key-value数据库,具备数据持久化功能,可以为IoT提供高性能的数据存储服务。Redis支持的开发语言非常多,我们根据团队技术特点选用了PHP,通过phpredis操作Redis。
3.3 数据展示层 此部分负责数据的可视化展示,主要由CACTI和echarts等构成。根据数据的不同类型和展示需求,用合适的方式展现数据。示例图片如下:
4. 展望 如果条件允许,我们会继续学习WICED,为Broadcom开发套件寻求一个更合适的用途。对于平台本身,我们会继续发展下去,与现有的“流式实时数据平台”进行整合,以拓展其用途,为我们所管理的大型园区网提供更好的支持与服务。
5. 参考资料 https://www.arduino.cc/ http://www.raspberrypi.org/ https://zh.wikipedia.org/wiki/JSON https://zh.wikipedia.org/wiki/REST http://redis.io/ https://nginx.org/ http://php.net/ http://www.cacti.net/ http://echarts.baidu.com/
|