毛林,成维莉,夏伟伟,杨明全
(江苏农牧科技职业学院,江苏 泰州 225300)
农业物联网综合运用微电子、嵌入式、无线通信、RFID等技术,通过无线传感等设备,按约定通信协议将物与物相连接进行信息互联互通、交换和共享,使茶叶生产管理从传统方式快速向现代管理方式转变。茶叶环境监控系统是基于物联网的自动化管理系统,在智慧农业发展中充当重要角色,对茶叶生产环境进行精准识别、定位、感知、监控,提升茶叶生产管理信息化、自动化、智能化水平,实现管理效能和经济效益最大化目标。
茶园环境远程监控物联网系统能够支持以网站、浏览器、视频等客户端访问方式提供远程监测与控制管理。随着3G/4G通信技术与装备的快速发展与应用,运用移动互联技术构建面向智能终端应用的远程监控系统,可随时随地为用户提供方便快捷的服务。本文结合江苏农牧科技职业学院茶园基地物联网平台-JTP平台,进行移动终端业务流程分析及功能设计,重点研究服务数据交换、数据转换、客户端通信、数据解析等关键技术及实现方法,提出基于Android的茶园环境远程监控智能终端解决方案,对提升茶园自动化、智能化管理效能和服务质量,具有重要现实意义。
JTP平台分本地系统(下位机)、远程系统(上位机)与中间网络,由底层硬件系统、无线传感网络(WSN)、网关和远程服务器、客户机、监控屏幕构成。底层(感知层)无线传感网络是平台环境数据的主要来源,采用层次分簇异构增强型结构[1],纵向及横向上具有良好伸缩性、可扩展性,适应感知对象、监测范围、覆盖密度、感知数据、通信距离等变化要求,满足大规模复杂形态的服务质量需求[2]。平台包括数据采集、远程监测、历史数据查看、远程控制、视频监控、紧急报警等功能模块,采用基于J2EE的SSI框架部署、整合应用程序,实现总体整体业务联动。
JTP平台业务流程包括数据采集与处理、远程传输、统计分析、实时浏览、报警、视频监控。通过平台业务流程,对现场实时环境数据进行采集、转换、压缩、融合处理和远程传输,提供数据持久化存储、统计分析处理。用户可随时随地登录平台进行环境监控,浏览现场温度、湿度、光照、土壤成分等环境因子变化,查看历史数据、监测报警、浏览监控视频,实现远程控制。
智能终端系统采用基于C/S的三层结构,即Android客户端、4G移动通信网络、服务端。客户端系统部署在智能终端设备(如Android手机、Ipad等),提供无线通信接口、数据解析等中间层业务组件,为用户查询、控制等应用服务所调用。底层Android操作系统、硬件、移动网络、软件工具作为应用服务的支撑平台。移动终端存储空间和计算资源有限,本地数据存储、处理要求不高时,可满足轻量级应用需求,保证客户端系统基本性能要求[3]。
服务端构建于JTP平台服务器,平台服务器搭建云计算平台,包括IaaS、PaaS、SaaS三层,提供多操作系统、虚拟化硬软件资源,统一调度管理资源使用,承担海量数据存储、计算、复杂业务处理,快速提供用户所需服务[4]。在JTP平台开发服务端数据交换接口、数据转换处理等业务组件,满足客户端数据访问需求。
平台服务器为智能终端客户端提供远程访问、查询环境数据。客户端登录后进入软件操作界面,发送监测、查询、控制远程访问请求时,经ISP移动通信网络提交至服务器,首先访问服务端接口,测试与平台服务端建立连接。连接成功后,服务端与客户端建立会话,服务端生成客户端唯一的会话标识SessionID,保存客户端标识,在会话期间识别客户端。服务端交换接口接受访问请求信息,调用相关业务组件查询数据库,获取所需信息内容,转换为预定交换格式数据后返回给服务端接口,连同客户端标识一并发送至客户端。客户端验证来自服务端传输数据后,接收数据并解析数据,通过操作系统将最终结果展示到客户端用户页面[3]。
Android为Google发布的主流开源智能终端操作系统,是基于Linux的开放式嵌入式系统,具有版本更新快、功能强大、开发效率高等特点。Android智能终端(手机、iPad、PDA)用户使用广,占据目前国内市场80%以上份额。Android包括Activity(活动)、Service(服务)、Broadcast Receiver(组播接收器)、Content Provider(内容提供商)四大组件,内置控件箱拥有丰富、美观的UI控件,支持轻量级数据库SQLite数据存取,提供网络接口通信、多媒体、GPS功能和通用工具类等服务[5]。
本设计选用Google开源IDE工具Android Studio开发客户端系统。Android Studio集成了Android所有开发工具包SDK(包括ADT、第三方开源库等),开发环境更易于搭建、配置简单,功能、效率和便捷性高[5]。服务端基于J2EE架构的MVC设计模式[4],部署SSI轻量级开源框架[6],保存与JTP平台相一致。Struts框架使Web服务交换层与控制层相互分离,iBatis充当DAO层数据库访问组件,Spring框架组装和管理全局应用程序,实现数据交换接口与数据库的交互。SSI自适应、可扩展的半成品框架特性,使服务端应用开发与维护更加快捷、便利与高效。
服务端部署于JTP平台服务器,在服务端应用程序工作区src的com.jsmy.jtp.mobile包下分层,包括webservice层(Web服务交换)、action层(控制)、biz层(业务)、dao层(数据访问)、po层(持久化),各层仅含一个组件,组件内定义和实现业务方法,避免组件过多引起服务端资源开销过大,利用SSI框架简化应用程序组装,以即插即用方式管理全局应用程序,降低软件模块耦合度,减少系统开销、提高运行效率。
3.1.1 数据交换
Web服务接口实现服务端、客户端之间的交互和数据交换。Web服务运用SOAP、WSDD、UDDI在服务端应用程序上对外共享开放式网络服务,提供客户端远程访问服务端功能,运用消息或请求服务发现处理机制,接收网络请求、做出响应[3]。互联网应用中,HTTP协议是网络通信的普适标准[7],提供webservice层数据交换接口规则描述,被网络信息系统广泛采用,用以Internet网络资源定位与交换服务。
基于Webservice及HTTP规则开发服务交换接口,开发过程为:设置Web服务交换地址,JTP平台服务端应用程序主要包括用户登录、实时监测、远程控制、紧急报警、历史查询、基础设置等六大服务接口,接口形式为http://localhost:8080/jmob/jmob_XXX.action,分别与客户端通信接口地址URL对应;设置接口交换规则。依据HTTP协议定义交换接口数据交换规则,包括请求参数、HTTP请求方法、消息类型及处理方式、返回值等,接口规则除请求参数种类与个数、功能不同外,其他规则类同;配置和发布Web服务,在JTP平台项目WebRoot/WEB-INF目录deploy.wsdd文件中配置,指示对外共享的Web服务类MobService;配置完成后,使用Apache axis2发布工具AdminClient发布Web服务,在服务端IE浏览器地址栏中输入http://localhost:8080/AxisWebService/servlet/Axis Servlet测试,显示发布成功信息。
交换接口通过业务组件与底层数据库交互,服务端数据交换过程是:Spring容器监听来自客户端通信请求,获取请求访问的服务端接口,传递给交换层组件MobileWebService;struts.xml中配置MobileWebService调用action层组件mobileAction业务方法,如login(登录)、monitor(监测)、statistics(历史查询)、control(控制)等,将请求参数打包成持久化对象PO或HashMap对象;Spring框架定义action层、biz层、dao层组件调用,通过applicationContext.xml配置依赖注入(DI)和反转控制(IoC)实现;在ibatis框架配置文件mobileDao.ibatis.xml中注册sqlMap标签访问数据库,执行指定SQL查询操作。
3.1.2 数据转换
数据交换接口接受客户端HTTP请求做出响应,调用各层业务组件查询数据库,读取到的数据包括HashMap、持久化对象Vo、ArrayList三种类型数据,进行JSON数据转换处理后,通过网络发送到客户端。JSON为轻量级交换格式数据,有效压缩了数据容量,网络宽带占用小、传输效率高,可快速送达客户端。与XML、PULL、SAX相比[8],JSON数据降低或消除了Android解析复杂性,客户端读取、解析简单方便。
设计中利用action层mobileAction组件完成数据格式转换。服务端数据转换过程为:(1)在mobileAction中定义转换方法parseDataToJson(data),data为来自数据库返回的数据,data包括HashMap、持久化对象Vo、ArrayList三种类型。(2)parseDataToJson中依据data类型,将data转换成JSON格式数据,JSON数据通过JSONObject或JSONArray实例对象来存储。(3)当data为HashMap或Vo时,以JSONObject保存JSON。HashMap使用get(key)取得键值对key-value,Vo使用getXXX属性方法获得键值对。通过JSONObject实例的put(key,value)保存键值对到JSONObject中。(4)data为ArrayList时,利用get方法依次取出Vo,将Vo中的键值对保存到JSONObject,再使用put将JSONObject保存到JSONArray。
客户端系统包含用户登录、环境监测、控制、历史查询、报警等功能模块。Android中,视图与业务是相互分离的。客户端视图UI包括登录等用户操作界面,界面中安置Button按钮、ListView列表、Spinner下拉框、DatePicker时间、ImageView图片等控件,添加HelloCharts 图表绘制工具,界面布局、控件样式通过LinearLayout、RelativeLayout等布局方式设置,在res/layout工程目录xml文件中进行定义和编辑。Activity充当事件处理器,绑定视图界面,接收事件对象或消息,进行业务处理,将处理结果展示到视图界面。Activity通过AndroidManifest.xml注册生效。Activity事件处理程序是,用户进入界面时,首先由onCreate保存当前Activity状态,setContentView锁定视图界面UI;当用户操作时,监听器onClickListener监听事件对象,触发onClick事件对用户操作执行一次业务处理。Activity可通过Intent对象转向另一个Activity,实现客户端不同界面切换,响应速度快。客户端功能实现中,接口通信、数据解析是Activity事件业务处理的关键。
3.2.1 接口通信
通信接口实现与远程服务器交互,测试服务端连接、发送远程请求与服务端建立会话、接收返回结果。本设计采用自定义外部公共类ClientUtility,类中定义重载方法getJSONByInterface来创建客户端通信接口。通信接口实现过程为,在getJSONByInterface中为HttpURLConnection实例对象设置请求访问的服务端交换地址URL、提交方式(GET/POST)、时延(Timeout)、协议头类型(Content-Type)、是否允许缓存(UseCaches)等特性,设置参数由外部Activity调用时传入;通过JSONObject将请求参数包装成支持网络传输编码格式HTTP.UTF-8的键值对,存入JSONArray;JSONArray转换成String字符串,再经getBytes转换后写入BufferedOutputStream(缓冲字节输出流),追加到URL,以POST方式提交,测试连接服务端;通过getResponseCode获取服务端响应码,判断连接状态,响应码为200时表示已建立连接;连接成功后,获取服务端响应数据,包装成BufferedReader(缓冲字符流),读取BufferedReader保存为字符串responseData,再使用decodeUnicode解码成UTF-8编码格式的JSON数据。初次连接时通过HttpURLConnection的getHeaderFields获取服务端分配的客户端标识SessionId,存入客户端Cookie中。
客户端系统涉及登录、实时监测、历史查询、远程控制等操作,每项操作需执行接口通信、数据处理。用户操作时,绑定视图界面UI的Activity作为主线程,Activity内部onCreate、onClick开启子线程来调用通信接口,通信结束后,关闭子线程、返回主线程,确保主线程畅通,增强用户体验。客户端通信过程为:(1)初次登录访问时,Activity开启子线程调用接口方法getJSONByInterface,传递登录接口地址及帐号、密码,提交至服务端;(2)与服务端连接成功后,服务端返回响应数据,读取状态码验证通过后,保存客户端标识编号,返回主线程;(3)用户点击进入其他界面进行监测、查询、控制等操作时,开启子线程再次调用getJSONByInterface,传入对应服务接口地址URL、客户端SessionId等相关参数后提交服务端,服务端返回响应结果,读取状态码有效且返回值不为空时,提取响应结果,经UTF-8解码存储JSON数据,进行后续解析处理。
3.2.2 数据解析
从服务端响应数据中提取JSON数据,数据解析是将JSON数据转换为加载到可视化操作界面的显示数据,包括数字、文本、符号、图表等。JSON数据分键/值对集合对象、键/值对有序列表两种类型。对于前者,解析时通过JSONObject获取所有键/值对,封装成持久化对象VO;对于后者,同时利用JSONArray和JSONObject将JSON数据转换为持久化对象VO的列表ArrayList。本设计使用Google提供的GSON方法解析JSON数据[9],使复杂类型数据解析和处理更为简单。解析过程是,在ClientUtility类中自定义解析方法getDataFromJSON,通信接口子线程结束后,Activity主线程启动子线程调用该方法,并传递JSON数据jsonResponse;分析JSON类型,通过Gson实例方法fromJson直接转换,将JSONObject转换为VO对象,JSONArray转换为ArrayList
以JTP平台实际数据为样本测试智能终端系统,用户登录后进入功能主界面。通过实时监测模块可查看茶园环境实时监测数据,展示动态数值变化曲线,通过手动方式滚动查看;远程控制模块可根据当前环境状态开启/关闭执行机,调节温湿度、光照度、土壤成分等数值至合理区间。通过历史查询模块显示某段时间内环境监测最高值、最低值、平均值信息,实现茶园监控地点异常情况的实时报警;基础设置模块可设置各项环境参数阈值。通过测试,能够达到智能手机远程监控管理的目标。
本研究将移动互联与农业物联网应用相融合,以智能手机快捷、便利方式,对茶园环境情况进行实时监控、报警和远程控制,查询历史数据,实现茶叶生产环境自动化管理,提高了智能化、自动化管理服务效能。