APP下载

数据推送技术在温室灌溉控制管理中的应用

2014-11-20蔚继承李书琴杨丽丽

湖北农业科学 2014年18期

蔚继承+李书琴+杨丽丽

摘要:基于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所示。基于短消息的推送方式,其优点在于速度快、不占用带宽、实时性强;缺点在于只有运营商才能提供短信推送服务,且受短信息长度限制,推送的信息量大小有限,在推送量大的情况下成本较高。同时,用户只能被动的接收数据,无法真正与服务器交互[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机制,数据接收服务不再需要应用程序持续运行,系统在收到推送消息后,可以再启动应用程序,降低了资源的消耗,用户使用也更加方便。客户端接收推送数据的主要流程如图5所示。

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机制,数据接收服务不再需要应用程序持续运行,系统在收到推送消息后,可以再启动应用程序,降低了资源的消耗,用户使用也更加方便。客户端接收推送数据的主要流程如图5所示。

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机制,数据接收服务不再需要应用程序持续运行,系统在收到推送消息后,可以再启动应用程序,降低了资源的消耗,用户使用也更加方便。客户端接收推送数据的主要流程如图5所示。

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.