APP下载

基于Netty的农业物联网服务器系统设计

2019-07-03赵华飞徐践张娜

现代农业科技 2019年9期
关键词:农业物联网系统设计数据库

赵华飞 徐践 张娜

摘要    为了方便对温室环境的监控和控制,使用Netty网络框架设计了一个农业物联网服务器系统,能够简化物联网服务器端的开发,实现下位机与上位机的实时通信。本文阐述了该系统的工作原理和总体设计,以期为实现大棚农作物生长的智能化和信息化管理。

关键词    农业物联网;系统设计;Netty;数据库

中图分类号    S126        文獻标识码    A        文章编号   1007-5739(2019)09-0254-02

Abstract    In order to facilitate the monitoring and control of the greenhouse environment,an agricultural Internet of things server system was designed using Netty network framework,which could simplify the development of the Internet of things server side and realize real-time communication between the sensor devices and the servers.This paper described the working principle and overall design of the system,in order to realize the intelligent and information management of greenhouse crop growth.

Key words    agricultural Internet of things;system design;Netty;database

当前,我国已是设施作物栽培第一大国,温室承担着生产各类蔬菜、花卉等任务[1]。在粮食安全日益重要的今天,提高温室普及率和管理水平有助于我国粮食安全自主可控。由于温室大棚不受外界气候以及地域等因素的制约,是未来农作物种植的发展趋势。大棚内的温湿度、CO2浓度以及光照度等环境参数是影响农作物生长的主要因素[2]。因此,通过对大棚内环境参数和植物参数的采集,能够做出有效决策,同时对温室相关设备的控制能够及时调节温室环境参数,为植物生长提供适宜的环境条件。

目前,我国农业大棚作物生长管理主要以人工为主,工作量大且生产管理不精细。本文结合物联网技术[3],设计了温室环境监控系统,可对大棚内农作物生长进行远程终端无线监控,实现大棚农作物生长的智能化和信息化管理,以期提高设施农业大棚农作物生产效率和农产品品质。

1    系统工作原理

温室环境监控系统采用Netty网络框架作为底层框架。Netty是基于Java NIO的通信框架,具有高可用性、高扩展性和高可制定性等特性,已经在各大企业得到应用[4]。基于系统对用户量并发的需要,由于传统阻塞IO(Blocking IO,BIO)无法承受大量客户端的并发连接,系统采用非阻塞IO(Non-blocking IO,NIO)进行高并发、高负载的开发[5]。NIO采用反应器(Reactor)模式,1个Reactor线程可聚合1个多路复用器Selector,可注册、监听和轮询成千上万个客户端的连接[6]。

由于下位机设备一般都是低功耗、低内存、芯片级的设备,支持的网络协议较为底层,同时,由于地理位置的原因,设备所处的网络环境一般较差,因而不适合使用HTTP等高级协议传输数据。TCP/IP协议是面向连接的协议,支持双向通信,采用此协议可以实时采集下位机的在线状态,在下位机上报数据给服务器的同时,服务器也可以对下位机下发数据,实现远程控制[7]。本系统使用Java语言和Netty网络框架实现了上、下位机之间的通信过程。

2    系统设计

2.1    总体设计

本系统使用到的开源技术主要有Java语言、MySQL数据库、Redis数据库和Python语言。本系统主要分为2个模块:WEB服务器部分和TCP服务器部分,由于物联网应用主要在TCP服务器部分,现对TCP服务器介绍如下。本系统的总体设计如图1所示。

2.2    数据传输与处理

由图1的流程可知,下位机连接并将数据发送给TCP服务器,TCP服务器收到数据后解析并将数据存入MySQL数据库中,同时将设备的在线状态写入Redis数据库中。用户通过浏览器网页可以从MySQL数据库中查询到下位机上报的数据,也可通过网页发送指令给下位机,为了将指令正确地传送到相应的下位机中,使用了Redis队列保存指令数据,TCP服务器会检查Redis队列的状态,如果队列中有数据,则会读取出并下发给指定的下位机。

Netty搭建服务端,仅需要绑定端口号、配置服务参数、启动服务即可。下面的代码就实现了一个服务端主程序。

TCP/IP协议是流式的数据传输协议,数据间是连续的,因而需要上位机和下位机定义并同时使用一种格式的数据定义。本次数据定义为:一是采用换行符作为2次数据之间间隔;二是采用逗号作为一次数据内部之间的间隔。

对于以上的需求,Netty已经有了内置的支持,在pipeline中添加按行的分割器即可,如下:

pipeline.addLast("framer",new DelimiterBasedFrameDeco

der(1024,Delimiters.lineDelimiter()));

如果有其他的数据切割需求,也可以添加自定义的分隔符。需要注意的是,此处的分隔符不能和数据可能出现的字符相同,否则会导致数据的完整性被破坏。对于数据内部的分隔,在获取字符串数据之后对字符串自定义分隔即可。

为了方便记录下位机的在线状态和向指定的下位机发送指令,需要下位机的id和连接socket对应,在此使用同步哈希表ConcurrentHashMap,防止多线程同时修改数据导致数据错误。Netty的ChannelInboundHandler类提供了接入、离线、读消息、写消息的函数,只需要继承这个类并重写这些函数即可实现这些功能。channelActive函数在下位机接入时被调用,当下位机连接到服务器后就会触发这个函数执行,在这个函数内部可以将连接的id和socket关系对应,方便后续对这个下位机连接的操作。channelInActive函数在下位机离线的时候被调用,在函数内部可以将哈希表中的此下位机的id对应关系删除,以明确此下位机已经下线。Chan-nelRead函数在下位机发送数据时会被调用,在函数内部对数据进行解析、处理,最后将数据写入MySQL数据库中。

Redis(Remote Dictionary Server)基于远程字典服务,是非關系型数据库(Not Only SQL,NoSQL)产品之一,它支持网络、key-value模型等存储系统,可用作数据库、高速缓存和消息队列代理。其支持的存储value类型包括string(字符串)、list(链表)、set(无序集合)、zset(sorted set有序集合)和hash(哈希表),也可将Redis看成一个内存数据结构服务器[8]。

为了方便数据在2个服务之间传输,使用了Redis数据库作为消息系统,WEB服务和TCP服务可不用部署在同一个服务器上,只需这2个服务都可以都访问Redis数据库即可,提高了系统的扩展性、可用性和安全性。本系统使用了消息队列list储存对下位机的指令,使用哈希表hash存储设备的在线状态。本系统的list设计为一个先进先出的队列,将按照写入顺序向下位机下发指令,Redis提供了一个阻塞读取的功能(如brpop函数),使用此功能防止频繁读取队列,当队列中有数据写入时,才会触发。本系统需要记录下位机的在线状态,在Redis中可以使用普通的key-value格式记录每个下位机的状态,但若有大量的下位机需要管理时,就不便于操作,因而选择hash结构来存储这类数据。Hash 结构类似于普通的字符串key-value格式,但是其value是作为对象可以被访问的,因而适合于存储对象,比如有一个名为h_devices的hash,对象内部field为deivce_{id},value为在线状态,其初始化或赋值key,field的命令为:HS-ET key field value,获取指定key的field的命令为:HGET key field。

2.3    数据展示

下位机和TCP服务器采集到了大量的数据,需要向用户展示出来,因而本系统的WEB部分负责对用户展示数据,提供控制下位机的按钮,用户不需要关注TCP服务器的存在,可以通过页面的按钮间接向下位机发送指令。现使用Python语言和Django框架开发了一个数据展示页面,用户可以查看各个下位机上报的数据,也可对下位机进行指令下发。数据展示页面如图2所示。

3    结语

通过对农业物联网需求和技术的学习和梳理,设计和开发了一个轻量级的农业物联网服务器系统,能够实现下位机的快速接入,由于采用支持长连接和双向通信的TCP/IP协议,本系统可以实时与下位机进行通信,提高了对温室的控制效率。本系统具有很强的可扩展性,只要是使用相同的数据格式定义,就可以接入本系统。对于其他的数据格式定义,本系统也仅需简单修改数据解析的代码就可以支持。

4    参考文献

[1] 何丽虹.我国设施园艺栽培面积已突破210万公顷[EB/OL].(2002-06-26)[2018-09-15].http://www.amic.agri.gov.cn/nxtwebfreamwork/html/0/1788.htm.

[2] 熊松.基于物联网技术的农业大棚智能管理研究[J].天津科技,2017,44(6):78-80.

[3] 刘海泉,杨盛泉,黄姝娟,等.基于物联网技术的温室大棚测量与控制系统的设计[J].价值工程,2017(6):108-110.

[4] 魏莹.基于Netty框架的智能终端与服务器通信的研究[D].西安:西安电子科技大学,2017.

[5] 李林峰.Netty权威指南[M].北京:电子工业出版社,2014:11-45.

[6] 代超,邓中亮.基于Netty的面向移动终端的推送服务设计[J].软件,2015(12):1-4.

[7] W.RichardStevens.TCP/IP协议详解[M].北京:机械工业出版社,2000.

[8] 梅玉娜,冯东,李展,等.基于Redis的网络大学平台性能优化研究[J].电力信息与通信技术,2016,14(12):112-115.

基金项目   粮经作物产业技术体系北京市创新团队(BAIC09-2018)。

作者简介   赵华飞(1990-),男,云南大理人,在读硕士研究生。研究方向:农业信息化。

*通信作者

收稿日期   2019-01-10

猜你喜欢

农业物联网系统设计数据库
数据库
NFC前景分析及其在农业物联网中的应用实现
南通农业物联网发展现状及其对策
一种基于SATA硬盘阵列的数据存储与控制系统设计研究
目标特性测量雷达平台建设构想
数据库
数据库
数据库