蔚繼承+李書琴+楊麗麗
摘要:基于Android移動操作系統開發了具有實時數據顯示、報警數據推送、灌溉交互控制功能的溫室灌溉控制管理系統。該系統可以監測溫室的土壤含水量和溫室溫度、濕度,當溫室溫度數據超過所設定的溫濕度界限,以數據推送的方式將警報信息推送到移動終端,在檢測到需要灌溉時,也會以推送的形式向用戶發送灌溉確認信息,形成交互性良好實時監控平臺。經實驗證,在服務器端產生異常數據的情況下,客戶端能及時收到服務器發送的推送通知。相對于傳統的監控系統軟件更符合計算移動化的趨勢,同時也為開發基于移動設備的推送應用提供了參考。
關鍵詞:數據推送;溫室灌溉;Android;JPush
中圖分類號:TP311 文獻標識碼:A 文章編號:0439-8114(2014)18-4441-04
溫室作為設施農業的重要組成部分,為作物生長提供了人造的、可精確控制的環境[1],在我國農業生產上發揮著重要的作用。灌溉為作物生長提供了所需的水分,所以如何提高灌溉質量及灌溉過程管理的科學化水平一直是研究的熱點問題。目前無線傳感器技術和通信技術的發展,為溫室環境監測的自動化與智能化提供了重要的技術支持,但傳統監控系統需要在固定的監控中心才能對系統進行操作,使用便捷性差,并且溫室的最新數據也不能及時地反饋給管理人員?;诖?,移動化溫室監控軟件逐漸成為溫室監控系統的發展方向,以Android系統為主的智能操作系統快速發展為溫室監控軟件的移動化提供了技術保障。在農業生產上,利用移動端進行溫室環境數據的獲取和對灌溉設備進行控制,可以很好地解決數據獲取實時性問題,用戶隨時對溫室進行監控,了解溫室環境狀況和對溫室灌溉進行管理。
1 數據推送
數據推送是服務器端主動將信息發送到客戶端的技術,基本思想是將客戶端主動查詢改為服務器主動發送消息,以將最新數據及時發送給客戶端為目標[2]。在傳統基于互聯網的B/S應用中,一般采用Ajax技術由客戶端定時去向服務器端發出請求,服務器端則響應數據,從而達到獲取服務器數據的目的。但客戶端無法得知服務器何時更新數據,因此只能設置固定的時間間隔,不斷地發送請求,就會發送很多不必要的請求[3]。與傳統PC訪問互聯網方式相比,移動終端在操作便利性、流量與電量消耗等方面有更高的要求,所以對推送方式有更高的需求,要求實現真正服務器主動推送。目前,移動數據推送主要包括短信推送與IP推送兩種方式[4]。
1.1 基于短信的推送
在移動網絡中,語音、短信、數據等工作在不同的信道中,而短信推送服務依賴短信通道進行,其架構如圖1所示?;诙滔⒌耐扑头绞剑鋬烖c在于速度快、不占用帶寬、實時性強;缺點在于只有運營商才能提供短信推送服務,且受短信息長度限制,推送的信息量大小有限,在推送量大的情況下成本較高。同時,用戶只能被動的接收數據,無法真正與服務器交互[4]。
1.2 基于IP的推送
基于IP的推送服務是應用服務器通過網絡和終端用戶建立一個連接,服務器將一直保持這個連接狀態,當服務器有數據產生時,可以及時將數據推送給客戶端。由于服務器與客戶端將一直保持連接,服務器推送數據相對比較容易控制,能夠完全控制推送數據的時間和頻率。在基于IP的傳統推送技術中,各應用程序都與其服務服務器建立連接通信。當有多個需要推送服務的應用程序運行時,將會占用大量的系統資源,為解決這個問題各系統開發商已推出相應的推送解決方案,如Apple的APNS、微軟的WPPN、Google的C2DM服務等[5]。而這些將與服務器保持網絡連接,系統中多個應用程序可以通過該服務收到其應用服務器發送的數據,減少了系統資源的消耗。基于IP的兩種推送方式如圖2所示。
目前,Android系統中的C2DM服務器在國外,國內使用不穩定并且需要應用程序綁定Google賬號,造成了使用上的不方便。因此,國內出現了不少第三方的推送服務,本研究將采用其中比較優秀的JPush(極光推送)來實現溫室中異常數據報警和灌溉交互操作中的數據推送。
2 系統總體結構
采用基于無線通信網絡與嵌入式開發技術,設計了一種針對溫室群的監控系統,移動用戶可以通過3G網絡及時獲取溫室現場狀態及下達控制指令。同時采用數據推送技術,在監控客戶端程序不啟動的情況下,通過系統的推送服務也能及時收到現場的異常數據。系統總體結構如圖3所示。在傳統上下位機監控的兩層結構基礎上,擴展多個溫室組成溫室群,增加了遠程服務中心,形成一個由采集層、匯聚層、服務層和應用層組成的四層結構形式。
從圖3所示的系統整體結構圖可以看出,系統主要分4個部分:溫室現場的采集層,將溫室組成溫室群的匯聚層,提供數據存儲與管理控制的服務層,提供數據訪問與控制操作的應用層。
1)采集層。溫室中參數采集節點的各種傳感器采集數據發送給匯聚層的溫室群控制中心,同時也根據溫室群控制中心的指令驅動并控制溫室中的執行機構進行灌溉。采集層基于ZigBee無線傳感器網絡技術,組成整個灌溉控制的數據采集與傳輸網絡,是整個系統的基礎和主體。
2)匯聚層。匯聚層將多個溫室進行集中,組成溫室群進行統一控制。群控制中心的現場控制機負責向溫室現場的各種采集節點、閥門控制節點發送指令及接收節點返回的數據,并向遠程服務器發送溫室中采集節點采集的數據,同時接收遠程服務器的灌溉控制的各種指令,在整個系統中起到承上啟下的作用。
3)服務層。服務層的遠程服務器接收溫室現場的數據,并存儲在數據庫中,計算模塊則根據用戶所選計算模型,調取溫室環境參數進行運算,然后將根據計算結果進行灌溉控制操作。遠程服務器通過群控制中心的現場控制機通過發送相關指令來打開溫室的灌溉控制閥門,實現灌溉控制。
4)應用層。對系統的操作與控制通過表現層完成,在本系統架構中,表現層有兩種方式:基于Web和基于移動應用程序。溫室管理人員可通過智能設備對溫室狀態進行及時了解,并能通過這些設備進行灌溉控制,當溫室中一些參數超過了所設定的范圍,也可以接收到相應報警信息,以便及時處理。endprint
3 溫室灌溉管理的數據推送
3.1 數據推送流程
作為溫室灌溉管理系統的組成重要部分,數據推送功能將遠程服務器上中的數據通過推送服務器發送到Android監控端,實現異常數據推送和灌溉推送,其主要流程如圖4所示。
一旦有最新異常數據或灌溉通知,服務器端基于JPush的推送將會通過JPush的服務器及時地發送到Android端。利用Android系統自有的Intent機制,數據接收服務不再需要應用程序持續運行,系統在收到推送消息后,可以再啟動應用程序,降低了資源的消耗,用戶使用也更加方便??蛻舳私邮胀扑蛿祿闹饕鞒倘鐖D5所示。
3.2 數據推送實現
3.2.1 數據通信格式 在服務器與移動終端采用建立在TCP/IP之上的HTTP協議進行數據傳輸,由于其具有無連接狀態、簡單快速,容易穿越防火墻等優點。在客戶端與服務器交互過程中,采用HTTP協議既減小了資源的浪費,也節省了終端的網絡流量。JSON(Java script object notation,JSON)是一種輕量級的數據交換格式,具有易于閱讀和編寫,同時也易于機器解析和生成的特點。因此,系統選用JSON作為數據通信格式[6]。
3.2.2 灌溉及異常推送功能 在遠程服務器上,計算模塊根據計算模型計算出溫室所需灌溉水量,在數據庫中添加灌溉信息,推送服務程序對數據庫進行輪詢,發現新的灌溉信息,則通過推送服務器發送通知給用戶。當服務器收到超過預警值的溫室參數信息異常數據時,啟動推送功能,則通知推送服務器向用戶發出警告。JPush提供了相關推送API,調用此API即可以將數據從遠程服務器發送到JPush服務器,JPush服務器收到請求后通過JPush的Socket將數據發送到Android設備上的應用程序。推送過程偽代碼如下:
#define BasicNameValuePair NVP
PUSH_URL←"http://api.jpush.cn:8800/sendmsg/sendmsg"
while(HAVE(data)){
appkeys ←NVP("appkeys", "your appkeys")
msg_type ←NVP("msg_type", "1")
msg_cnt ←NVP("msg_content",data)
platform ←NVP("platform","android")
datas ←ArrayList
datas.add(appkeys)
datas.add(msg_type)
datas.add(msg_cnt)
datas.add(platform)
entity←UrlEncodedFormEntity(datas,"utf-8")
post←HttpPost(PUSH_URL);
post.setEntity(entity)
client←ClientUtil.getNewHttpClient()
client.execute(post)
resEntity←reponse.getEntity()
}
JPush SDK提供了客戶端jpushService后臺服務,收到推送數據后將由自定義Receiver處理。根據推送內容的不同,在打開的不同的Activity中進行相應處理,將收到的異常數據以文件形式進行保存,相應灌溉通知則為彈出確認灌溉對話框。其偽代碼如下:
void onReceive(Context context, Intent it){
if(ACTION_NOTIFICATION_OPENED=it.getAction()) {
bundle ← intent.getExtras();
i ←new Intent(context,AlertActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
elseif
(ACTION_MESSAGE_RECEIVED=it.getAction()) {
bundle←intent.getExtras();
i ←new Intent(context,IrriActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
4 應用效果
監控程序使用TabActivityGroup作為整體框架,并使用了Scrollable Tabs+Swipe實現了絢麗的滑動效果,系統的用戶界面美觀,操作友好。當服務器發現異常數據,就將異常數據推送到手機。手機上JPush SDK的Jpush Service一直監聽是否有新的推送,一旦接收到新的推送消息,自定義的Receiver將判斷推送數據的類型,從而會顯示報警信息或者灌溉確認界面。異常數據的詳細信息,在推送到手機上時將寫入手機中的Sqlite數據庫中。當通過系統打開通知中心時,跳轉至異常數據警告頁面,可以查看所有的警告時間和詳情,如圖6所示。另一方面,服務器發現有新的灌溉通知,就將通知推送到手機,推送到手機上的灌溉通知會觸發新的Activity,彈出一個選擇框,顯示灌溉時間,灌溉溫室,詢問用戶是否確認灌溉,具體如圖7所示。
5 小結
本研究介紹了在溫室灌溉控制管理中使用基于數據推送平臺的異常數據提示及灌溉交互控制方案,用以代替傳統的基于短信方式的數據推送方式。經實驗證,在服務器端產生異常數據的情況下,客戶端能及時收到服務器發送的推送通知。相對于傳統的監控系統軟件,符合計算移動化的趨勢,同時也為開發基于移動設備的推送應用提供了參考。
參考文獻:
[1] 杜尚豐,李迎霞,馬承偉,等.中國溫室環境控制硬件系統研究進展[J].農業工程學報,2004,20(1):7-12.
[2] 陳 益,梁 軍,王 煒.服務器推送技術在氣象數據布中研究與應用[J].廣西師范學院學院(自然科學版),2012,29(1):92-97.
[3] 鄭 玲,鄭曉天.基于WebSocket的電力系統實時數據更新研究[J].計算機與現代化,2013(1):85-87.
[4] 何少岳,徐曉東,馬祖苑.主動推送技術在移動協同教育中的應用[J].現代教育技術,2012,22(4):100-103.
[5] 鄒 海,李 強,邱慧麗.基于C2DM服務的云端推送研究與實現[J].計 算 機 技 術 與 發 展,2012,26(7):29-32.
[6] 高 靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011,32(7):2267-2270.
3 溫室灌溉管理的數據推送
3.1 數據推送流程
作為溫室灌溉管理系統的組成重要部分,數據推送功能將遠程服務器上中的數據通過推送服務器發送到Android監控端,實現異常數據推送和灌溉推送,其主要流程如圖4所示。
一旦有最新異常數據或灌溉通知,服務器端基于JPush的推送將會通過JPush的服務器及時地發送到Android端。利用Android系統自有的Intent機制,數據接收服務不再需要應用程序持續運行,系統在收到推送消息后,可以再啟動應用程序,降低了資源的消耗,用戶使用也更加方便??蛻舳私邮胀扑蛿祿闹饕鞒倘鐖D5所示。
3.2 數據推送實現
3.2.1 數據通信格式 在服務器與移動終端采用建立在TCP/IP之上的HTTP協議進行數據傳輸,由于其具有無連接狀態、簡單快速,容易穿越防火墻等優點。在客戶端與服務器交互過程中,采用HTTP協議既減小了資源的浪費,也節省了終端的網絡流量。JSON(Java script object notation,JSON)是一種輕量級的數據交換格式,具有易于閱讀和編寫,同時也易于機器解析和生成的特點。因此,系統選用JSON作為數據通信格式[6]。
3.2.2 灌溉及異常推送功能 在遠程服務器上,計算模塊根據計算模型計算出溫室所需灌溉水量,在數據庫中添加灌溉信息,推送服務程序對數據庫進行輪詢,發現新的灌溉信息,則通過推送服務器發送通知給用戶。當服務器收到超過預警值的溫室參數信息異常數據時,啟動推送功能,則通知推送服務器向用戶發出警告。JPush提供了相關推送API,調用此API即可以將數據從遠程服務器發送到JPush服務器,JPush服務器收到請求后通過JPush的Socket將數據發送到Android設備上的應用程序。推送過程偽代碼如下:
#define BasicNameValuePair NVP
PUSH_URL←"http://api.jpush.cn:8800/sendmsg/sendmsg"
while(HAVE(data)){
appkeys ←NVP("appkeys", "your appkeys")
msg_type ←NVP("msg_type", "1")
msg_cnt ←NVP("msg_content",data)
platform ←NVP("platform","android")
datas ←ArrayList
datas.add(appkeys)
datas.add(msg_type)
datas.add(msg_cnt)
datas.add(platform)
entity←UrlEncodedFormEntity(datas,"utf-8")
post←HttpPost(PUSH_URL);
post.setEntity(entity)
client←ClientUtil.getNewHttpClient()
client.execute(post)
resEntity←reponse.getEntity()
}
JPush SDK提供了客戶端jpushService后臺服務,收到推送數據后將由自定義Receiver處理。根據推送內容的不同,在打開的不同的Activity中進行相應處理,將收到的異常數據以文件形式進行保存,相應灌溉通知則為彈出確認灌溉對話框。其偽代碼如下:
void onReceive(Context context, Intent it){
if(ACTION_NOTIFICATION_OPENED=it.getAction()) {
bundle ← intent.getExtras();
i ←new Intent(context,AlertActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
elseif
(ACTION_MESSAGE_RECEIVED=it.getAction()) {
bundle←intent.getExtras();
i ←new Intent(context,IrriActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
4 應用效果
監控程序使用TabActivityGroup作為整體框架,并使用了Scrollable Tabs+Swipe實現了絢麗的滑動效果,系統的用戶界面美觀,操作友好。當服務器發現異常數據,就將異常數據推送到手機。手機上JPush SDK的Jpush Service一直監聽是否有新的推送,一旦接收到新的推送消息,自定義的Receiver將判斷推送數據的類型,從而會顯示報警信息或者灌溉確認界面。異常數據的詳細信息,在推送到手機上時將寫入手機中的Sqlite數據庫中。當通過系統打開通知中心時,跳轉至異常數據警告頁面,可以查看所有的警告時間和詳情,如圖6所示。另一方面,服務器發現有新的灌溉通知,就將通知推送到手機,推送到手機上的灌溉通知會觸發新的Activity,彈出一個選擇框,顯示灌溉時間,灌溉溫室,詢問用戶是否確認灌溉,具體如圖7所示。
5 小結
本研究介紹了在溫室灌溉控制管理中使用基于數據推送平臺的異常數據提示及灌溉交互控制方案,用以代替傳統的基于短信方式的數據推送方式。經實驗證,在服務器端產生異常數據的情況下,客戶端能及時收到服務器發送的推送通知。相對于傳統的監控系統軟件,符合計算移動化的趨勢,同時也為開發基于移動設備的推送應用提供了參考。
參考文獻:
[1] 杜尚豐,李迎霞,馬承偉,等.中國溫室環境控制硬件系統研究進展[J].農業工程學報,2004,20(1):7-12.
[2] 陳 益,梁 軍,王 煒.服務器推送技術在氣象數據布中研究與應用[J].廣西師范學院學院(自然科學版),2012,29(1):92-97.
[3] 鄭 玲,鄭曉天.基于WebSocket的電力系統實時數據更新研究[J].計算機與現代化,2013(1):85-87.
[4] 何少岳,徐曉東,馬祖苑.主動推送技術在移動協同教育中的應用[J].現代教育技術,2012,22(4):100-103.
[5] 鄒 海,李 強,邱慧麗.基于C2DM服務的云端推送研究與實現[J].計 算 機 技 術 與 發 展,2012,26(7):29-32.
[6] 高 靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011,32(7):2267-2270.
3 溫室灌溉管理的數據推送
3.1 數據推送流程
作為溫室灌溉管理系統的組成重要部分,數據推送功能將遠程服務器上中的數據通過推送服務器發送到Android監控端,實現異常數據推送和灌溉推送,其主要流程如圖4所示。
一旦有最新異常數據或灌溉通知,服務器端基于JPush的推送將會通過JPush的服務器及時地發送到Android端。利用Android系統自有的Intent機制,數據接收服務不再需要應用程序持續運行,系統在收到推送消息后,可以再啟動應用程序,降低了資源的消耗,用戶使用也更加方便??蛻舳私邮胀扑蛿祿闹饕鞒倘鐖D5所示。
3.2 數據推送實現
3.2.1 數據通信格式 在服務器與移動終端采用建立在TCP/IP之上的HTTP協議進行數據傳輸,由于其具有無連接狀態、簡單快速,容易穿越防火墻等優點。在客戶端與服務器交互過程中,采用HTTP協議既減小了資源的浪費,也節省了終端的網絡流量。JSON(Java script object notation,JSON)是一種輕量級的數據交換格式,具有易于閱讀和編寫,同時也易于機器解析和生成的特點。因此,系統選用JSON作為數據通信格式[6]。
3.2.2 灌溉及異常推送功能 在遠程服務器上,計算模塊根據計算模型計算出溫室所需灌溉水量,在數據庫中添加灌溉信息,推送服務程序對數據庫進行輪詢,發現新的灌溉信息,則通過推送服務器發送通知給用戶。當服務器收到超過預警值的溫室參數信息異常數據時,啟動推送功能,則通知推送服務器向用戶發出警告。JPush提供了相關推送API,調用此API即可以將數據從遠程服務器發送到JPush服務器,JPush服務器收到請求后通過JPush的Socket將數據發送到Android設備上的應用程序。推送過程偽代碼如下:
#define BasicNameValuePair NVP
PUSH_URL←"http://api.jpush.cn:8800/sendmsg/sendmsg"
while(HAVE(data)){
appkeys ←NVP("appkeys", "your appkeys")
msg_type ←NVP("msg_type", "1")
msg_cnt ←NVP("msg_content",data)
platform ←NVP("platform","android")
datas ←ArrayList
datas.add(appkeys)
datas.add(msg_type)
datas.add(msg_cnt)
datas.add(platform)
entity←UrlEncodedFormEntity(datas,"utf-8")
post←HttpPost(PUSH_URL);
post.setEntity(entity)
client←ClientUtil.getNewHttpClient()
client.execute(post)
resEntity←reponse.getEntity()
}
JPush SDK提供了客戶端jpushService后臺服務,收到推送數據后將由自定義Receiver處理。根據推送內容的不同,在打開的不同的Activity中進行相應處理,將收到的異常數據以文件形式進行保存,相應灌溉通知則為彈出確認灌溉對話框。其偽代碼如下:
void onReceive(Context context, Intent it){
if(ACTION_NOTIFICATION_OPENED=it.getAction()) {
bundle ← intent.getExtras();
i ←new Intent(context,AlertActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
elseif
(ACTION_MESSAGE_RECEIVED=it.getAction()) {
bundle←intent.getExtras();
i ←new Intent(context,IrriActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
4 應用效果
監控程序使用TabActivityGroup作為整體框架,并使用了Scrollable Tabs+Swipe實現了絢麗的滑動效果,系統的用戶界面美觀,操作友好。當服務器發現異常數據,就將異常數據推送到手機。手機上JPush SDK的Jpush Service一直監聽是否有新的推送,一旦接收到新的推送消息,自定義的Receiver將判斷推送數據的類型,從而會顯示報警信息或者灌溉確認界面。異常數據的詳細信息,在推送到手機上時將寫入手機中的Sqlite數據庫中。當通過系統打開通知中心時,跳轉至異常數據警告頁面,可以查看所有的警告時間和詳情,如圖6所示。另一方面,服務器發現有新的灌溉通知,就將通知推送到手機,推送到手機上的灌溉通知會觸發新的Activity,彈出一個選擇框,顯示灌溉時間,灌溉溫室,詢問用戶是否確認灌溉,具體如圖7所示。
5 小結
本研究介紹了在溫室灌溉控制管理中使用基于數據推送平臺的異常數據提示及灌溉交互控制方案,用以代替傳統的基于短信方式的數據推送方式。經實驗證,在服務器端產生異常數據的情況下,客戶端能及時收到服務器發送的推送通知。相對于傳統的監控系統軟件,符合計算移動化的趨勢,同時也為開發基于移動設備的推送應用提供了參考。
參考文獻:
[1] 杜尚豐,李迎霞,馬承偉,等.中國溫室環境控制硬件系統研究進展[J].農業工程學報,2004,20(1):7-12.
[2] 陳 益,梁 軍,王 煒.服務器推送技術在氣象數據布中研究與應用[J].廣西師范學院學院(自然科學版),2012,29(1):92-97.
[3] 鄭 玲,鄭曉天.基于WebSocket的電力系統實時數據更新研究[J].計算機與現代化,2013(1):85-87.
[4] 何少岳,徐曉東,馬祖苑.主動推送技術在移動協同教育中的應用[J].現代教育技術,2012,22(4):100-103.
[5] 鄒 海,李 強,邱慧麗.基于C2DM服務的云端推送研究與實現[J].計 算 機 技 術 與 發 展,2012,26(7):29-32.
[6] 高 靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011,32(7):2267-2270.