毛林,成維莉,夏偉偉,楊明全
(江蘇農牧科技職業學院,江蘇 泰州 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平臺實際數據為樣本測試智能終端系統,用戶登錄后進入功能主界面。通過實時監測模塊可查看茶園環境實時監測數據,展示動態數值變化曲線,通過手動方式滾動查看;遠程控制模塊可根據當前環境狀態開啟/關閉執行機,調節溫濕度、光照度、土壤成分等數值至合理區間。通過歷史查詢模塊顯示某段時間內環境監測最高值、最低值、平均值信息,實現茶園監控地點異常情況的實時報警;基礎設置模塊可設置各項環境參數閾值。通過測試,能夠達到智能手機遠程監控管理的目標。
本研究將移動互聯與農業物聯網應用相融合,以智能手機快捷、便利方式,對茶園環境情況進行實時監控、報警和遠程控制,查詢歷史數據,實現茶葉生產環境自動化管理,提高了智能化、自動化管理服務效能。