毛 林, 王永紅, 劉雪蘭, 程 濤, 周 鵬, 沈茂梅
(江蘇農(nóng)牧科技職業(yè)學院,江蘇泰州 225300)
農(nóng)業(yè)物聯(lián)網(wǎng)綜合運用無線通信、無線射頻識別(radio frequency identification,簡稱RFID)、微電子、嵌入式、分布式系統(tǒng)等技術(shù),通過電子、無線傳感等設備,按約定通信協(xié)議將物與物相連接進行信息互聯(lián)互通、交換和共享,突破了農(nóng)業(yè)生產(chǎn)、經(jīng)營、管理受制于環(huán)境、地理、氣候等因素的不利影響和限制,使傳統(tǒng)農(nóng)業(yè)快速向現(xiàn)代設施農(nóng)業(yè)方式轉(zhuǎn)變。溫室(群)環(huán)境監(jiān)控系統(tǒng)是基于物聯(lián)網(wǎng)的設施農(nóng)業(yè)自動化管理系統(tǒng),在智慧農(nóng)業(yè)發(fā)展中扮演著重要角色,可以對溫室(群)、連棟溫室生產(chǎn)環(huán)境進行精準識別、定位、感知、監(jiān)測、控制等,提升農(nóng)業(yè)生產(chǎn)信息化、自動化、智能化管理水平,實現(xiàn)管理效能和經(jīng)濟效益最大化目標。
溫室(群)監(jiān)控物聯(lián)網(wǎng)系統(tǒng)能夠支持以網(wǎng)站、Web瀏覽器、視頻等客戶端訪問方式提供近距離或遠程監(jiān)測與控制管理。隨著3G/4G通信技術(shù)與裝備的快速發(fā)展與應用,運用移動互聯(lián)技術(shù)構(gòu)建面向智能終端應用的遠程監(jiān)控系統(tǒng),可隨時隨地為用戶提供方便快捷的服務。本研究結(jié)合江蘇農(nóng)牧科技職業(yè)學院園藝溫室(群)物聯(lián)網(wǎng)平臺——JYP平臺,進行移動終端業(yè)務流程分析及功能設計,重點研究服務數(shù)據(jù)交換、數(shù)據(jù)轉(zhuǎn)換、客戶端通信、數(shù)據(jù)解析等關鍵技術(shù)及實現(xiàn)方法,提出基于Android的遠程溫室監(jiān)控智能終端解決方案,以期提升現(xiàn)代設施農(nóng)業(yè)自動化、智能化管理水平、效率、服務質(zhì)量等,具有示范效應和現(xiàn)實意義。
JYP平臺分本地系統(tǒng)(下位機)、遠程系統(tǒng)(上位機)、中間網(wǎng)絡,由底層硬件系統(tǒng)、無線傳感網(wǎng)絡(wireless sensor networks,簡稱WSN)、網(wǎng)關、遠程服務器、遠程客戶端、監(jiān)控屏幕等構(gòu)成(圖1)。底層(感知層)無線傳感網(wǎng)絡是平臺環(huán)境數(shù)據(jù)的主要來源,采用層次分簇異構(gòu)增強型結(jié)構(gòu)[1-2],縱向與橫向上具有良好的伸縮性、可擴展性,適應感知對象、監(jiān)測范圍、覆蓋密度、感知數(shù)據(jù)、通信距離等變化要求,滿足大規(guī)模復雜形態(tài)的服務質(zhì)量需求[3]。JYP平臺包括數(shù)據(jù)采集、遠程監(jiān)測、歷史數(shù)據(jù)查看、遠程控制、視頻監(jiān)控、緊急報警等功能模塊,采用基于Java2平臺企業(yè)版(Java 2 platform enterprise edition,簡稱J2EE)的SSI(Struts 2.0+Spring 2.0+iBatis)開源框架部署、整合應用程序,實現(xiàn)總體業(yè)務聯(lián)動。JYP平臺業(yè)務流程包括數(shù)據(jù)采集與處理、遠程傳輸、統(tǒng)計分析、實時瀏覽、報警、視頻監(jiān)控等(圖2)。通過平臺業(yè)務流程,完成現(xiàn)場實時環(huán)境數(shù)據(jù)的采集、轉(zhuǎn)換、壓縮、融合處理和遠程傳輸[2],提供數(shù)據(jù)持久化存儲、統(tǒng)計分析處理。用戶可隨時隨地登錄平臺進行環(huán)境監(jiān)控,瀏覽現(xiàn)場溫度、濕度、光照度、CO2濃度等變化,查看歷史數(shù)據(jù)、監(jiān)測報警、瀏覽監(jiān)控視頻,實現(xiàn)遠程控制。
智能終端系統(tǒng)架構(gòu)為基于客戶端/服務端的3層結(jié)構(gòu):Android客戶端、服務端、3G/4G移動網(wǎng)絡(通信鏈路層)(圖3)??蛻舳讼到y(tǒng)部署在智能終端設備(如智能手機、平板電腦、掌上電腦等),提供無線通信接口、數(shù)據(jù)解析等中間層業(yè)務組件,為用戶查詢、控制等應用服務所調(diào)用。底層操作系統(tǒng)(Android系統(tǒng))、硬件、移動網(wǎng)絡、軟件工具作為應用服務的支撐平臺。移動終端存儲空間和計算資源有限,本地數(shù)據(jù)存儲、處理要求不高時,可滿足輕量級應用需求,保證客戶端系統(tǒng)基本性能要求[4]。
服務端構(gòu)建于JYP平臺服務器,平臺服務器搭建云計算平臺,包括基礎設施即服務(infrastructure as a service,簡稱IaaS)、平臺即服務(platform as a service,簡稱PaaS)、軟件即服務(software as a service,簡稱SaaS)等3層,提供多操作系統(tǒng)、虛擬化硬軟件資源,統(tǒng)一調(diào)度管理資源使用,承擔海量數(shù)據(jù)存儲、計算、復雜業(yè)務處理,快速提供用戶所需服務[5]。在JYP平臺開發(fā)服務端數(shù)據(jù)交換接口、數(shù)據(jù)轉(zhuǎn)換處理等業(yè)務組件,滿足客戶端數(shù)據(jù)訪問需求。
平臺服務器為智能終端客戶端提供遠程訪問、查詢環(huán)境數(shù)據(jù)??蛻舳说卿浐筮M入軟件操作界面,發(fā)送監(jiān)測、查詢、控制遠程訪問請求時,經(jīng)互聯(lián)網(wǎng)服務提供商(internet service provider,簡稱ISP)移動通信網(wǎng)絡提交至服務器,首先訪問服務端接口,測試與平臺服務端建立連接。連接成功后,服務端與客戶端建立會話(Session),服務端生成客戶端唯一的專屬標志(SessionID),保存客戶端標志,在會話期間識別客戶端。服務端交換接口接受訪問請求信息,調(diào)用相關業(yè)務組件查詢數(shù)據(jù)庫,獲取所需信息內(nèi)容,轉(zhuǎn)換為預定交換格式數(shù)據(jù)后返回給服務端接口,連同客戶端SessionID一并發(fā)送至客戶端??蛻舳蓑炞C來自服務端的SessionID后,接受數(shù)據(jù)并解析數(shù)據(jù),通過操作系統(tǒng)將最終結(jié)果展示到客戶端用戶頁面[4]。系統(tǒng)的業(yè)務流程如圖4所示。
Android為Google發(fā)布的主流開源智能終端操作系統(tǒng),是基于Linux的開放式嵌入式系統(tǒng)。Android智能終端(如智能手機、平板電腦、掌上電腦等)使用廣,占據(jù)目前國內(nèi)用戶市場80%以上的份額。因其版本更新快、功能強大、開發(fā)效率高等特點,深受業(yè)界歡迎。Android系統(tǒng)包括活動(activity)、服務(service)、組播接收器(broadcast receiver)、移動數(shù)據(jù)內(nèi)容提供商(content provider)等4個組件,內(nèi)置控件箱擁有豐富、美觀的用戶控件,支持輕量級數(shù)據(jù)庫SQLite數(shù)據(jù)存取,提供多媒體、網(wǎng)絡接口通信、全球定位功能和通用工具類服務[6]。
本研究的設計選用Google官方開源集成開發(fā)環(huán)境工具Android Studio開發(fā)客戶端系統(tǒng)。Android Studio集成了Android所有軟件開發(fā)工具包(包括ADT、第三方開源庫等),開發(fā)環(huán)境更易于搭建,與Eclipse相比,僅須配置少數(shù)額外插件,功能、效率、便捷性較高[6]。服務端基于J2EE架構(gòu)的視圖-模型-控制器(model-view-controller,簡稱MVC)設計模式[5],部署SSI輕量級開源框架[7],使之與JYP平臺相一致。Struts框架使Web服務交換層與控制層相互分離,iBatis充當數(shù)據(jù)訪問(data access object,簡稱DAO)層數(shù)據(jù)庫訪問組件,Spring框架組裝和管理全局應用程序,實現(xiàn)數(shù)據(jù)交換接口與數(shù)據(jù)庫的交互。SSI自適應、可擴展的半成品框架特性,使服務端應用開發(fā)與維護更加快捷、便利、高效。
服務端部署于JYP平臺服務器,服務端應用程序工作區(qū)src的com.jyp.mobile包括以下分層(圖5):Web服務交換(webservice)層、控制(action)層、業(yè)務(biz)層、數(shù)據(jù)訪問(dao)層、持久化(PO)層,各層僅含1個組件(組件內(nèi)定義并實現(xiàn)業(yè)務方法),避免組件過多引起服務端資源開銷過大問題,利用SSI框架簡化應用程序組裝,以即插即用的方式管理全局應用程序,降低軟件模塊耦合度,減少系統(tǒng)開銷、提高運行效率。
3.1.1 數(shù)據(jù)交換 Web服務接口實現(xiàn)服務端、客戶端之間的交互和數(shù)據(jù)交換。Web服務運用SOAP、WSDD、XML、UDDI在服務端應用程序上對外共享開放式網(wǎng)絡服務,提供客戶端遠程訪問服務端功能,運用消息或請求服務發(fā)現(xiàn)處理機制,接收網(wǎng)絡請求、做出響應[4]?;ヂ?lián)網(wǎng)應用中,超文本傳輸協(xié)議(hypertext transfer protocol,簡稱HTTP)是網(wǎng)絡通信的普適標準[8],提供了Webservice交換接口規(guī)則描述,被網(wǎng)絡信息系統(tǒng)廣泛用于Internet網(wǎng)絡資源定位與交換服務。
基于Webservice及HTTP規(guī)則開發(fā)服務交換接口,開發(fā)過程:(1)設置Web服務交換地址,JYP平臺服務端應用程序包括6個服務接口,即用戶登錄(http://localhost:8080/jmob/jmob_login.action)、實時監(jiān)測(http://localhost:8080/jmob/jmob_monitor.action)、遠程控制(http://localhost:8080/jmob/jmob_control.action)、緊急報警(http://localhost:8080/jmob/jmob_alarm.action)、歷史查詢(http://localhost:8080/jmob/jmob_statistics.action)、基礎設置(http://localhost:8080/jmob/jmob_setting.action),按順序從1開始編號,分別與客戶端通信接口地址統(tǒng)一資源定位符(uniform resource locator,簡稱URL)對應。(2)設置接口交換規(guī)則。根據(jù)HTTP協(xié)議為交換接口定義交換規(guī)則,包括請求參數(shù)、HTTP請求方法、消息類型及處理方式、返回值等。這里以登錄請求接口為例描述接口規(guī)則(表1),其他接口除請求參數(shù)種類、個數(shù)、功能不同外,其他規(guī)則類同。(3)配置和發(fā)布Web服務。在JYP平臺項目WebRoot/WEB-INF目錄deploy.wsdd文件中配置(配置代碼見圖6),指示對外共享的Web服務類MobService;配置完成后,使用Apache axis2發(fā)布工具AdminClient發(fā)布Web服務,在服務端IE瀏覽器地址欄中輸入http://localhost:8080/AxisWebService/servlet/AxisServlet進行測試,顯示發(fā)布成功信息。
交換接口通過業(yè)務組件與底層數(shù)據(jù)庫交互,服務端數(shù)據(jù)交換過程:(1)Spring容器監(jiān)聽來自客戶端的通信請求,獲取請求訪問的服務端接口,傳遞給交換層組件MobileWebService;(2)struts.xml中配置MobileWebService調(diào)用action層組件mobileAction業(yè)務方法,如登錄(login)、監(jiān)測(monitor)、歷史查詢(statistics)、控制(control)等,將請求參數(shù)打包成持久化對象PO或HashMap對象;(3)Spring框架定義action層、biz層、dao層組件調(diào)用,通過applicationContext.xml配置依賴注入(dependency injection,簡稱DI)和反轉(zhuǎn)控制(inversion of control,簡稱IoC)實現(xiàn);mobileDao.ibatis.xml(ibatis框架)中注冊sqlMap標簽訪問數(shù)據(jù)庫,執(zhí)行指定的結(jié)構(gòu)化查詢語言(structured query language,簡稱SQL)查詢操作。
3.1.2 數(shù)據(jù)轉(zhuǎn)換 網(wǎng)絡上傳輸數(shù)據(jù)一般是XML、JSON數(shù)據(jù)格式的數(shù)據(jù)。數(shù)據(jù)交換接口接受客戶端HTTP請求做出響應,調(diào)用各層業(yè)務組件查詢數(shù)據(jù)庫,若讀取到了數(shù)據(jù),則返回結(jié)果。包括3種類型數(shù)據(jù):HashMap、持久化對象Vo、ArrayList(存儲持久化對象PO的順序列表)。服務端交換接口不能將這種數(shù)據(jù)直接通過網(wǎng)絡發(fā)送到客戶端,而須要預先進行數(shù)據(jù)轉(zhuǎn)換處理。JSON為輕量級交換格式數(shù)據(jù),有效壓縮了數(shù)據(jù)容量,網(wǎng)絡寬帶占用小、傳輸效率高,可快速送達客戶端。與XML、PULL、SAX等解析方法相比,JSON數(shù)據(jù)大大降低或消除了Android解析的復雜性,客戶端讀取、解析簡單方便[9]。
表1 Web服務交換接口規(guī)則
本研究的設計是在action層的mobileAction組件中完成數(shù)據(jù)格式轉(zhuǎn)換的。服務端數(shù)據(jù)轉(zhuǎn)換過程:(1)在mobileAction中定義轉(zhuǎn)換方法parseDataToJson(data),data為來自數(shù)據(jù)庫返回的數(shù)據(jù),data包括HashMap、持久化對象Vo、ArrayList等3種類型。(2)parseDataToJson中依據(jù)data類型,將data轉(zhuǎn)換成JSON格式數(shù)據(jù),JSON數(shù)據(jù)通過JSONObject或JSONArray實例對象來存儲(圖7)。(3)當data為HashMap或Vo時,以JSONObject保存JSON。HashMap使用get(key)取得鍵值對key-value(鍵值對可包括多個,key唯一),Vo使用getXXX屬性方法獲得鍵值對。通過JSONObject實例的put(key,value)保存鍵值對到JSONObject中。(4)data為ArrayList時,利用get方法依次取出Vo,將Vo中的鍵值對保存到JSONObject,再使用put將JSONObject保存到JSONArray。
客戶端系統(tǒng)包含用戶登錄、環(huán)境監(jiān)測、控制、歷史查詢、報警等功能模塊。Android系統(tǒng)中,視圖與業(yè)務是相互分離的??蛻舳税ǖ卿浗缑?、主界面和若干功能界面,界面中安放Button按鈕、ListView列表、Spinner下拉框、DatePicker時間、ImageView圖片等控件,添加HelloCharts 圖表繪制工具,界面布局、控件樣式通過LinearLayout、RelativeLayout等布局方式設置,在res/layout工程目錄xml文件中進行定義和編輯。activity充當事件處理器,綁定視圖界面,接收事件對象或消息,進行業(yè)務處理,將處理結(jié)果展示到視圖界面。activity通過AndroidManifest.xml注冊生效。activity事件處理程序是用戶進入界面時,首先由onCreate保存當前的activity狀態(tài),setContentView鎖定用戶界面;當用戶操作時,監(jiān)聽器onClickListener監(jiān)聽事件對象,觸發(fā)onClick事件對用戶操作執(zhí)行1次業(yè)務處理。activity可通過Intent對象轉(zhuǎn)向另一個activity,實現(xiàn)在客戶端不同界面切換,響應速度快。客戶端功能實現(xiàn)中,接口通信、數(shù)據(jù)解析是activity事件業(yè)務處理的關鍵。
3.2.1 通信接口 通信接口負責與遠程服務器交互,包括測試連接服務端、發(fā)送遠程請求、與服務端建立會話、接收返回結(jié)果。本研究的設計采用自定義外部公共類ClientUtility,類中定義重載方法getJSONByInterface來創(chuàng)建客戶端通信接口。通信接口實現(xiàn)步驟:(1)在getJSONByInterface中為HttpURLConnection實例對象設置請求訪問的服務端交換地址URL、提交方式(GET/POST)、時延(Timeout)、協(xié)議頭類型(Content-Type)、是否允許緩存(UseCaches)等特性,設置參數(shù)由外部Activity調(diào)用時傳入;(2)通過JSONObject將請求參數(shù)包裝成支持網(wǎng)絡傳輸編碼格式HTTP.UTF-8的鍵值對,存入JSONArray;(3)JSONArray轉(zhuǎn)換成String字符串,再經(jīng)getBytes轉(zhuǎn)換后寫入BufferedOutputStream(緩沖字節(jié)輸出流),追加到URL,以POST方式提交,測試連接服務端;(4)通過getResponseCode獲取服務端響應碼,判斷連接狀態(tài),響應碼為200時表示已建立連接;(5)連接成功后,獲取服務端響應數(shù)據(jù),包裝成BufferedReader(緩沖字符流),讀取BufferedReader保存為字符串responseData,再使用decodeUnicode解碼成UTF-8編碼格式的JSON數(shù)據(jù);若是初次連接,還須通過HttpURLConnection的getHeaderFields獲取服務端分配的客戶端標志,存入客戶端Cookie中。
客戶端系統(tǒng)涉及登錄、實時監(jiān)測、歷史查詢、遠程控制等多項操作,每項操作都須執(zhí)行接口通信、數(shù)據(jù)處理。用戶操作時,綁定用戶界面的Activity作為主線程,Activity內(nèi)部onCreate、onClick開啟子線程來調(diào)用通信接口,通信結(jié)束后,關閉子線程、返回主線程,確保主線程暢通,增強用戶體驗??蛻舳送ㄐ胚^程為(1)初次登錄訪問時,Activity開啟子線程調(diào)用接口方法getJSONByInterface,傳遞登錄接口地址http://localhost:8080/jmob/jmob_login.action及登錄帳號、密碼,提交至服務端;(2)與服務端連接成功后,服務端返回響應數(shù)據(jù),讀取狀態(tài)碼驗證通過后,保存客戶端標識編號,返回主線程;(3)用戶點擊進入其他界面進行監(jiān)測、查詢、控制等操作時,開啟子線程再次調(diào)用getJSONByInterface,傳入對應服務接口地址URL、客戶端SessionID等相關參數(shù)后提交服務端,服務端返回響應結(jié)果,讀取狀態(tài)碼有效且返回值不為空時,提取響應結(jié)果,經(jīng)UTF-8解碼存儲JSON數(shù)據(jù),進行后續(xù)解析處理。
3.2.2 數(shù)據(jù)解析 從服務端響應數(shù)據(jù)中提取JSON數(shù)據(jù),不能直接用于視圖界面。數(shù)據(jù)解析的目標是,將JSON數(shù)據(jù)轉(zhuǎn)換為加載到可視化操作界面的顯示數(shù)據(jù),包括數(shù)字、文本、符號、圖表等。JSON數(shù)據(jù)分2種類型(圖7),一種是鍵/值對集合對象;另一種是鍵/值對集合的有序列表。對于前者,解析時通過JSONObject的getString(key)方法一一獲取所有鍵/值對,封裝成持久化對象Vo;對于后者,解析較復雜,須同時利用JSONArray和JSONObject將JSON數(shù)據(jù)轉(zhuǎn)換為持久化對象Vo的列表ArrayList。本研究的設計使用GSON方法解析JSON數(shù)據(jù)[10],GSON開源庫由Google提供,利用GSON解析、處理復雜類型數(shù)據(jù)時,更加簡單高效。解析過程是(1)在ClientUtility類中自定義解析方法getDataFromJSON,通信接口子線程結(jié)束后,Activity主線程啟動子線程調(diào)用該方法,并傳遞JSON數(shù)據(jù)jsonResponse;(2)getDataFromJSON分析JSON類型,通過Gson實例方法fromJson直接轉(zhuǎn)換,若為JSONObject時,轉(zhuǎn)換為Vo對象,若是JSONArray則轉(zhuǎn)換為ArrayList
本研究實例中,根據(jù)JYP平臺實際數(shù)據(jù)為樣本,測試智能手機客戶端系統(tǒng),用戶登錄后進入功能主界面。通過實時監(jiān)測模塊可查看各溫室的實時環(huán)境監(jiān)測值,展示動態(tài)數(shù)值變化曲線,可通過手動方式滾動查看;選擇遠程控制模塊時,可根據(jù)當前環(huán)境狀態(tài)開啟/關閉執(zhí)行機,調(diào)節(jié)溫度、濕度、光照度、CO2濃度等參數(shù)至合理區(qū)間;通過歷史查詢模塊可顯示某段時間內(nèi)環(huán)境監(jiān)測最高值、最低值、平均值等信息;進入緊急報警模塊后,通過開啟/關閉按鈕,可對監(jiān)控溫室報警地點啟動或關閉報警;基礎設置模塊可設置溫度、濕度、光照度、CO2濃度等參數(shù)的上下限閾值(圖9)。通過系統(tǒng)測試,能夠達到智能手機遠程監(jiān)控管理的目標。
以溫室(群)遠程監(jiān)控智能終端為研究對象,結(jié)合園藝溫室物聯(lián)網(wǎng)平臺JYP架構(gòu)及業(yè)務,采用Android、SSI框架、Web服務、HTTP等技術(shù),設計開發(fā)智能終端服務端與客戶端系統(tǒng)。重點研究服務接口交換、數(shù)據(jù)轉(zhuǎn)換、客戶端接口通信與數(shù)據(jù)解析技術(shù)方法,提出了面向Android的遠程溫室監(jiān)控智能終端解決方案。通過系統(tǒng)測試,智能手機以快捷、便利方式,獲得來自現(xiàn)場環(huán)境感知數(shù)據(jù),監(jiān)控實時環(huán)境變化情況、查詢歷史數(shù)據(jù),獲取報警信息、進行遠程控制,實現(xiàn)溫室自動化管理。該方案將移動互聯(lián)與農(nóng)業(yè)物聯(lián)網(wǎng)應用相融合,提高了設施農(nóng)業(yè)智能化、自動化管理服務效能。