2) 中国宁夏回族自治区 750001 宁夏回族自治区地震局银川中心站;
3) 中国宁夏回族自治区 756000 宁夏回族自治区地震局固原中心站
2) Yinchuan Center Station, Earthquake Agency of Ningxia Hui Autonomous Region, Ningxia Hui Autonomous Region 750001, China;
3) Guyuan Center Station, Earthquake Agency of Ningxia Hui Autonomous Region, Ningxia Hui Autonomous Region 756000, China
我国于1963年开始开展形变测量技术,经过多年的发展和变革,形变观测技术已经成为地震观测中较有效、直观的观测方法之一,并被广泛应用于地震监测预报工作中(顾国华,2012;王庆良,2018)。目前,全国地震行业形变观测仪器的使用已较普遍,如DSQ型水管倾斜仪、SS-Y型洞体应变仪、重力仪、垂直摆倾斜仪等。
确保仪器有效运行是采集数据的基础要求,但受仪器本身固有条件的限制,实际观测中常出现仪器突发性的网络不通、断电、死机、超量程等情况,这种突发事件时常第2天才能被发现,造成几个小时甚至十几个小时数据无法使用的情况,这对观测数据造成的损失较大。所以,如何在出现故障前或故障发生时及时提醒工作人员,避免数据损失就成为地震台站的一种刚性需求。目前,地震台站普遍实现方式是Web监视和Ping IP地址,这需要工作人员每天多次查询仪器状态,但是所有人工监控方法难免会因为疏忽而造成损失。本文拟针对地震台站经常出现的这种实际问题,再结合目前地震行业内网和外网完全分离的情况,选择合适的方法和高效的计算机语言进行编程,设计和实现一种基于企业微信的形变故障报警方法。
1 设计原理目前,全国地震行业形变观测仪器多为“十五”数字地震观测网络项目建设期间架设的(“九五”仪器可通过协议转换器转为“十五”仪器)。台站常见形变仪器均具有独立的Web请求页面,能够查看仪器部分工作状态、当前测量数据,以及具有数据下载等功能,这为提取实时数据并开展故障报警提供了较便利的现实条件(马士振等,2015)。因此,设计的整体思路首先是从独立的内网Web页面提取数据,然后通过外网企业微信接口精准地推送逻辑运算所获得的报警信息给指定用户。
从2019年开始,出于对行业内仪器运行数据的安全及保密的考虑,整个地震行业开展了内网和外网的完全切割工作。即内网只能访问内网,并且访问内网的电脑一般也是专机专用,确保了行业内网的安全。由于内网环境下下载的数据只能在内网下使用和调取,而企业微信的消息推送则需连接外网,内外网的隔离无法通过编程实现消息互通。因此,只能寻求一种既能够连通内网又能够连通外网的桥——“中间媒介”,来解决内网提取、分析数据,外网发送报警信息的问题。本文使用部署在内网固定服务器上借助三方管理平台开通并建立的虚拟服务器作为“中间媒介”,该服务器既可以访问内网指定网段的网页信息,同时也能允许访问部分的外网,从而实现内外网的消息连通。
在解决了内外网切割带来的网络断层后,还需要选择合适的编程语言。经测试分析,利用Python实现形变仪器故障报警效果最好。Python是一种面向对象的高级动态解释型计算机语言,因其拥有丰富的三方模块,被广泛应用于网络爬虫、Web开发、人工智能、自动化运维、云计算、大数据分析等领域。本文主要以水管倾斜仪(洞体应变仪、垂直摆倾斜仪、重力仪等仪器只需要修改仪器IP地址即可)作为实验对象。
2 框架设计设计和实现形变仪器故障报警可以归纳为数据提取和消息发送2部分,进一步可细化为5个不同的层,分别是仪器网页层、数据采集层、逻辑判断层、消息发送层、用户应用层(图 1)。其中,数据采集层、逻辑判断层、消息发送层都是在虚拟服务器中完成。仪器网页层是数据提取的前提和基础,其展示了仪器设备的实时数据等信息。数据采集层主要是对仪器网页实时数据进行实时爬取,并将采集数据发送给逻辑判断层。一旦无法实施采集网页实时数据,则该仪器可能发生断网或断电故障。逻辑判断层则首先对采集数据进行格式转换,将不同格式的采集数据转换成统一格式,然后对数据进行逻辑处理,此处主要包括检测数据缺数、仪器死机、超量程等不同情况。消息发送层则是将逻辑判断层的运算结果通过企业微信接口程序传输和推送给指定的用户或企业群。最后,用户应用层通过企业微信手机客户端或电脑客户端接收报警信息,最终实现报警功能。
仪器网页层在不断网、不断电的情况下,能够随时访问网页和爬取数据,一旦出现不能登录的情况,可以直接发送报警信息给企业微信。用户应用层需要提前建立微信企业号和企业应用,并获取企业ID和应用Secret。实际运行时,数据传输层将报警消息按指定的企业ID和应用Secret完成定向推送。由于仪器网页层和用户应用层主要功能由外部软件实现,所以下面主要讨论虚拟服务器数据提取、逻辑判断、消息发送等3个层的实现过程(图 2)。
程序使用定时器,并设置合适的运行间隔,定期检测仪器数据状况和运行状态。程序首先在数据采集层爬取仪器网页,获取数据。若无法获取数据,则向仪器发送ping命令,判断仪器是否断网或断电。若能够获取数据,则在逻辑判断层进行数据匹配、阈值超限判断等计算,实现仪器、数据故障的判断。最后,通过消息发送层将故障信息推送至企业微信,实现报警信息的发送与接收。整个流程实现了仪器断网、断电、死机、超量程等类型故障的判断。
3.1 数据采集层的实现数据采集层主要利用网络爬虫技术提取网页中的信息。目前,地震仪器生产厂家较固定,网页整体结构较简单,数据的来源也较单一。因此,可通过网络爬虫技术提取所需信息,包括数据、标题、符号等。Python拥有非常丰富的网络请求库,如Requests、Urllib等。本文将利用Requests库的get方法来获取仪器网页信息并对获取到的字符串进行解码。需要注意的是,行业内形变仪器主要的编码方式有GB2312和utf-8两种。水管倾斜仪、洞体应变仪等主要采用GB2312,而“九五”VS型垂直摆则采用的是utf-8格式。另外,大部分形变仪器网页无需用户名及密码,可以直接get获取实时数据;少部分设有登录用户名和密码,则需在get请求时将用户名、密码一同传输。
在获取到仪器主页的网页信息后,需要从字符串里匹配到仪器实时测量数据。Python也提供了大量的匹配过滤方法,常见的有正则表达式、BeautifulSoup、lxml等方式,本文主要通过正则表达式来提取和匹配。正则表达式是指1个用来描述或匹配一系列符合某个句法规则的字符串的单个字符串(于满泉等,2005;高丙坤等,2008)。实际的操作中可以先将网页字符串中的\r、\n、<b>等利用函数Replace替换成为空字符,使得网页成为没有特殊符号的一连串字符串,再调用正则表达式进行匹配。利用Python爬取和匹配数据的基本格式如下:
逻辑判断层是虚拟服务器中承上启下最重要的一个环节,该层主要作用有:①判断是否能爬取到仪器主页信息;②判断提取数据是否有效;③判断数据是否超量程。对应的实际问题就是是否有数据、是否是有效数字、是否是正常数据。
首先,主页信息的爬取通过返回值和Ping仪器网络可以判断仪器是否断网或断电。如果获取不到匹配过滤的数据或无法爬取网页信息,在其他工作环境都正常的情况下必然是仪器端出现问题,再结合Ping网页的检测手段,可以判断是仪器断网还是断电,随即完成仪器断网、断电的报警。
其次,在仪器工作正常并能够获取到匹配数据的情况下,偶尔也会出现输出数据为999999或NULL的数据采集器故障。将提取到的数据和999999及NULL进行比较,判断数据是否属于这2种类型,倘若二者完全匹配,则可以完成对仪器死机、断记的报警。
最后,如果既能获取到数据且数据也是有效的,则判断仪器是否有超量程工作。仪器超量程的判断是基于输入的阀门值来约束的,在仪器设计出厂测试时发现,在±2V内的观测线性度最好,所以,设置合适的阀门值作为基本参考,并将提取到的数据和阀门值作比较,可以精准获取仪器是否超量程,从而完成是否超量程工作的报警。
经过以上几个基本的逻辑运算过程,能实现仪器断网、断电、断记、死机、数据采集器故障、超量程的报警。实际工作中可能情况更多,也更复杂,但这几种情况已经基本囊括了台站形变观测中常见的故障类型。
3.3 消息发送层的实现消息发送层主要是将逻辑判断的计算结果精准、及时地推送到指定的群体客户端。由于所有的企业微信消息发送都需要在后台调用API,而Access_token是应用调用API唯一且专用的凭证。Access_token的获取需要企业微信的CorpID(企业ID)和Secret,相当于账号和密码,CorpID是企业号唯一的标识,Secret是管理组凭证密钥。
按照企业微信的消息推送格式,利用POST(post参数为access_token和消息体)请求的方式精准(https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=access_token)提交消息(方传极等,2018)。消息格式为json数据包格式的字符串,利用post方法提交后,可以实现信息的定向推送。基本的消息发送格式如下:
基于本框架设计和实现报警的素材积累不多,主要是因为软件运行时间不太长,且仪器故障在短时间内是偶然事件。目前,只记录到水管倾斜仪、洞体应变仪的断网和超量程报警,其他报警素材还在逐步积累中。这几项企业微信报警信息的推送说明基于该设计框架识别和推送常见故障报警信息的方法是有效且准确的。通过企业微信的报警,台站值班人员不用定时、定点去查看网页和Ping仪器,节省了大量的人力时间,而且这种报警方式的准确性和及时性上有所提高,报警效果示意见图 3。
确保仪器安全有效地运行是台站采集数据的必要前提,所以杜绝和减少一切非正常观测引起的数据缺失、错误是地震异常提取的基本保障。本文设计和实现了在行业内外网完全切割的情况下如何通过移动式企业微信进行报警的框架及程序,总结和设置了不同故障下的逻辑运算模块,利用该方法能够检测到仪器的几种常见故障,并将故障信息推送到指定用户的企业微信,最终达到报警的目的。此外,针对较固定的仪器厂家和品牌,流体、地磁、地电仪器都可以基于该框架实现企业微信的故障报警。
本研究得到曾宪伟高工和李新艳博士的指导帮助,在此表示衷心的感谢。
方传极, 林苗禄, 全建军. 基于企业微信垂直摆超量程报警的设计与实现[J]. 科学技术创新, 2018(31): 67-68. |
高丙坤, 成战刚, 李倩. 基于正则表达式的信息滤除算法[J]. 现代计算机, 2008(2): 54-55. |
顾国华. 地壳形变与地震前兆探索回顾和展望[J]. 地震, 2012, 32(2): 22-30. |
马士振, 林向东, 白永福, 等. 基于Django框架的两种Web地震目录分页方法[J]. 地震地磁观测与研究, 2015, 36(1): 135-139. |
王庆良. 地壳形变观测在地震监测预报中的发展与应用研究[J]. 地震研究, 2018, 41(3): 343. |
于满泉, 陈铁睿, 许洪波. 基于分块的网页信息解析器的研究与设计[J]. 计算机应用, 2005, 25(4): 974-976. |