田 博,严李强,宋 赫,肖 杨
(西藏大学信息科学技术学院,拉萨850000)
由于我国部分地区环境恶劣,不适用于常见的大规模蔬果种植,许多引入的温室大棚技术的地区,一定程度上缓解了冬季蔬果紧缺的问题,同时也成功种植了反季蔬菜水果。20世纪70年代后期,山东大学开始用蛭石栽培黄瓜、西红柿等,并取得了成功;20世纪80年代中期,进口的温室及无土栽培设施相继投产;20世纪80年代以来,随着人们生活水平的提高,人们的饮食需求已经从基本的吃饱吃好转变为吃的健康。设施农业的涌现大力加快了农业整体的发展,但需要投入大量的人力成本对农业设施进行测控管理,这无疑增加了成本和风险。
物联网技术的发展促进了农业的整体变革,随着机械设备制造水平和传感设备数据精度的提高,农业测控系统的应用范围逐步扩大,在农业测控系统的远程化、自动化管理方面取得了诸多成果,如浙江农科院合作研发了利用了无线传感器技术实现对农田温室大棚部分环境信息的监测[1]的平台。孟祥宝等[2]综合采用传感器制造、信息融合、工控组态、物联网、自动分类和搜索引擎等先进技术,构建现代农业生产信息监控体系。陈阳[3]设计并实现了“风雨欲来窗自关”的功能等许多成果取得了很好的效果。合肥工业大学的王建平和王良帆[4]开发了基于IOS平台的温室大棚物联网云管理系统等设备实现对温室环境数据的管理,但只能兼容单一种类的温室控制系统。
本文通过设计兼容多种传输模式、数据格式、数据编码方式的数据有效信息解析匹配算法,并应用该算法实现了支持多种传输模式、多种编码加密模式下的数据采集和指令发送功能的移动终端,实现了通过一个终端兼容管理多种的农业测控设备的效果。
目前大部分农业测控类软件的测控平台都只能对部分节点进行数据监控或者是指令下发,如土壤湿度、环境温湿度、环境光照强度和环境气体的检测[5]。本文最终目标是设计一款兼容多种规格终端并可用于规模化种植使用的农业测控系统管理终端,同时也可作为中小型的农业测控系统,实现远程化控制的数据管理工具。此外,对于所有的操作,为方便溯源追踪操作者等相关数据,将所有操作日志(包含操作内容、操作人、操作时间等信息)储存到服务器中提供查询。根据2019年市场研究IDC发布的智能手机市场报告,Android操作系统的手机占据了87%的市场份额,故本文移动端选择基于Android操作系统进行开发,PC端基于windows系统进行开发。整体流程如图1所示。
图1 系统总体逻辑
VIM是一种文本编辑器,被认为是类VI文本编辑器中最好用的一个。VIM最大优势是在于其用命令都是简单的字符[6]。可以在Unix系统中执行数据的模糊匹配任务,通过简单的字符命令,即可实现数据内容的模糊匹配,实现本文中所需的多种数据格式的解析需求。
但在本文中需要所用工具可以在多种编程语言中实现,多种操作系统中运行,由于VIM支持系统的环境限制,以及VIM自身的语法过于复杂,存在很多不方便的问题,VIM文本编辑难以实现需求。
正则表达式(Regular Expression),又称正规表示法、常规表示法,在代码中常简写为regex、regexp或RE。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑[7]。
同时,在开发过程中所需用到的JAVA、Python等语言中大多含有都有正则表达式的支持库,可以使用多种编程语言实现正则表达式,在多种系统环境下执行正则表达式进行相关数据的匹配,更能满足相关算法实现的需求。
例 如:IP地 址 为xxx.xxx.xxx.xxx格 式,如120.26.174.204为位于杭州市阿里云的服务器的IP地址,目的是通过正则表达式,在一大段复杂的无规则文本中,提取出符合格式的IP地址。目标是在软件中利用这个IP地址进行访问,进行相关的数据交互,通过数据交互,得到如下的返回数据:{code:“0”,msg:“localIP:120.26.174 .204:9999”}
下一步就是通过从这段文本中匹配到这一个IP地址包含端口120.26.174.204:9999。由于IP的格式是由5个整数型数值和5个符号构成。若采用VIM进行数据匹配,需要掌握复杂的VIM相关匹配符号的意义,严格控制每个数值的范围进行匹配,若最终需要匹配出符合条件的IP地址,最终需要用到表达式“<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])>(.<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])>){2}.<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])>”,然后通过执行shell脚本得到的目标文本。
正则表达式中“d+”可用取出一个整型数值,接下来就是中间的隔离符号,分别用“.”和“:”表示。最后将数值和符号按照文本的连接关系,依次罗列,最终通过“d+.d+.d+.d+:d+”这一正则表达式就可以实现数据的匹配,得到目标文本如图2所示。由图可知,文本中的任意数据,只要根据文本需要数据的一些特定特征,就可以匹配出这一数据内容。
图2 正则表达式匹配IP代理
如表1所示,正则表达式更适合本文算法的设计与实现。本文明确提到需要获取一些节点的数据,如传感器获取到的环境数据、温室内设备的工作状态等。选用正则表达式进行数据的匹配更适合开放式的工具进行数据处理,更方便兼容不同的数据格式以及在不同操作系统中实现功能。
表1 VIM文本编辑工具与正则表达式对比
3.1.1 算法设计
根据前文对VIM数据解析工具于正则表达式对比的结果,结合温室环境所传递的数据,选用正则表达式进行数据解析,并设计出解析数据算法如下。
(1)读取数据并预处理
根据预设的节点地址和请求方式,提交获取数据请求,并得到系统中的相关节点数据,进行前后去空等预处理,防止出现因文本异常出现影响后续解析的情况。
(2)数据解码处理
数据在传送过程中可能会出现非法入侵者将信息截取的情况,通常传送的是密文[8],如URLcode、DES进行数据加密。在解析之前判断是否预设了需要解码,并将数据内容进行解密,方便后续的解析和可视化显示。
(3)读取正则表达式、进行数据解析和结果读取
获得未加密的数据内容后,要进行数据解析,根据用户预设的正则表达式对数据进行解析,得到解析后的节点内容,分别储存在数组res[节点编号-1]这一变量中。
(4)判断解析是否成功
此判断依据为判断解析后的数组成员数是否和预设的相等,如果不相等,则代表解析中出现问题,可能是数据异常、正则表达式不正确或解析中受到未知原因的影响。如果解析错误,则重新获取一次数据并解析,同时发出错误报告。
(5)对应值判断解析
以日光温室农业测控系统为例,系统中存在诸多控制设备,如保温被、遮阳网等。在传输过程中为了降低数据大小,通常将“关闭”、“开启”等数据以“0”、“1”这样的数值进行传输。在可视化显示之前,需要按对应方式将“0”、“1”等数据替换为“关闭”、“开启”。
(6)进行可视化显示
将被判断没有问题的解析数据执行可视化显示指令,将对应的数据显示在软件GUI的对应标签中。
数据解析算法流程如图3所示。
图3 数据解析算法流程
3.1.2 算法实现
该算法采用PyCharm2020.1版本作为IDE工具,以python3.8版本作为解释器,调用wxpython支持库制作形成相关的的GUI界面,调用正则表达式支持库re辅助实现,相关代码如下:
3.1.3 测试与结果分析
由于条件的限制,本文只测试了几种模拟的数据格式。数据的获取方式为通过HTTP访问服务器获取数据。测试结果如图4所示。
图4 解析算法测试
通过测试结果可见,本算法的数据解析能够通过正则表达式使数据在通过一系列判断与解析方法,将从地址获取的原始数据解析成程序的可视化内容。
3.2.1 算法目的及原理
由于很多教程的讲解起点很高,并没有过多细节讲解,概念上没有注意先后顺序,给读者的理解带来了困难[9]。为了便于用户自己编写适应自己的农业测控管理系统的数据解析正则表达式,需要设计一个算法降低编写农业测控系统数据解析正则表达式的难度。
本文采用寻找符合节点字段的节点,并通过贪婪匹配符(*.?)替换数据实现数据解析正则表达式的生成。
3.2.2 人机交互部分
本算法根据字符串检索的方式,将“[^节点名]”替换要读取的数据,如读取到的数据为:{code:0,tempera⁃ture:25.2,air:35,soil:0.62,PH:6.32,light:2429,co2:0.62}。 算法中需要解析到的数据为“25.2”、“35”、“0.62”、“6.32”、“2429”、“0.62”,则只需将这6个数值用“[^]”进行替换,即提交文本:{code:0,temperature:[^温度],air:[^空气],soil:[^土壤],PH:[^PH],light:[^光照],co2:[^二氧化碳]}。
3.2.3 算法流程
根据字符串特征判断的方式,设计出正则表达式生成算法如图5所示。
图5 正则表达式的简易生成算法流程
为了简化算法,方便后续的数据显示,从GUI中读取的数据类型均为string字符串型。利用贪婪匹配符(*.?)进行替换,正则表达式的执行结果则为这一部分内容的中间文本,并返回字符串,在后续使用中,如果是数值,则不考虑是否为整型变量,均进行浮点型转换进行计算使用;如果是字符串变量,则可以直接进行字符串的相关操作。该算法是根据字符判断,寻找到特征值进行替换的方式,避免了在生成表达式的同时用户提交的信息与数据中的原有信息冲突,造成生成时将原有数据打乱的问题。同时将对应节点的名称储存到name[节点编号-1]这一个变量中。例如,现有一个日光温室的控制系统返回的数据格式(其中1533697871为格林威治时间戳,暂时不进行读取处理)为:
[^time:1533697871,temperature:25.2,air:32,soil:0.62,PH:6.32,light:1489]
如果直接采取[^?]的替换方式,则最终的返回结果为res=“(*.?)”:
name=[“time:1533697871,temperature:25.2,air:32,soil:0.62,PH:6.32,light:1489”]
这种方法的结果并不符合本文需要的结果。
而采取上述的算法,则可以避免这种问题,最终的返回结果为:
res={code:0,temperature:(*.?),air:(*.?),soil:(*.?),PH:(*.?),light:(*.?),co2:(*.?)}
name=[“温度”,”空气”,”土壤”,”PH”,”光照”,”二氧化碳”]
以上结果符合本文的需求。因此,本文不选用直接进行关键字替换的方式。
3.2.4 算法实现
算法采用PyCharm2021.2版本作为IDE工具,以py⁃thon3.9版本作为解释器,部分代码如下:
3.2.5 测试与结果分析
测试中采取模拟数据格式的方式进行测试,并进行了3次,不同的数据格式进行了数据测试,测试结果均通过,部分测试结果如图6所示。可见本算法通过正则表达式,将测试文本转换成节点名称列表,能够正确地将获取到的数据以需求的数据格式,解析成所需的内容;且对本算法进行多次测试,算法的输出稳定,提取结果皆为正确。
图6 正则表达式的简易生成算法测试结果
该系统是在JDK1.9环境下使用Android Studio 4.0.1版本进行开发的,主要解析农业测控系统中环境参数,并对各终端设备下发控制命令,查看记录操作日志等功能。由于该终端需要在终端-数据库,终端-硬件数据源之间反复传递的数据信息,同时还要兼容多种终端数据格式的解析读取,就需要一个高效可靠便于调整的数据传输方式。在JAVA中,JDBC和PHP+MySQL的数据传输方式均可以满足需求。
JDBC管理器的作用是负责管理各种不同的程序、包括直接访问以Java实现的JDBC网络驱动程序,以及与基于ODBC的驱动程序的共同实现[10]。PHP几乎覆盖了Web应用的各个方面,其中最有特色的是数据库API,在对MySQL数据库的操作上,PHP一共有32个API可供使用,这些APl包括了MySQL应用的各个方面,如操作MySQL[11]。对比传输安全性以及数据传输格式调整的便捷性,本文所涉及的软件Android端在开发过程中采用PHP+MySQL模式进行开发。
Android手机端软件设计主要包括Android开发环境搭建、登录界面设计和监测界面设计[12]。通过XML调用Android通过控件库设计UI如图7所示,并通过JAVA绑定界面控件,实现人机互换以及数据上传下行等相关操作。
图7 Android客户端界面UI
本文中的通用农业测控系统数据管理工具,要求可以做到支持多种控制系统的温室环境数据、设备运行状态数据的解析,实现可视化显示;编辑命令文本,实现温室数据命令指令的发送。保存相关方案数据,同时可以记录用户的操作日志。为实现上述功能,选用An⁃droid studio进行开发。
本文通过对比文本匹配工具对不同格式数据解析的效果,设计了支持解析多种监测设备数据格式的算法,并通过Android系统应用本算法,进行数据监控以及设备控制。本文设计实现了可以通过移动网络在远程对相关参数进行监测与控制的农业测控终端,在某一数据出现偏差时实现颜色提醒(偏差越高,显示的颜色越醒目,警报频率越高),完成了数据的可视化显示。通过系统中记录每一条操作数据的管理人员、时间等信息,实现管理的追踪与溯源,为大规模种植中多人员管理模式下的追责等问题提供了证据支持。此外,数据日志可以用于存储数据,在后期进行可视化分析或数据挖掘等,为提高农业生产的发展进步提供了大数据支持。