李蒙亞 儲 翔 楊 碩 馬 瑞 張 楠 王利波
1)中國寧夏回族自治區 753200 寧夏回族自治區地震局中衛中心站
2)中國寧夏回族自治區 750001 寧夏回族自治區地震局銀川中心站
3)中國寧夏回族自治區 756000 寧夏回族自治區地震局固原中心站
我國于1963 年開始開展形變測量技術,經過多年的發展和變革,形變觀測技術已經成為地震觀測中較有效、直觀的觀測方法之一,并被廣泛應用于地震監測預報工作中(顧國華,2012;王慶良,2018)。目前,全國地震行業形變觀測儀器的使用已較普遍,如DSQ 型水管傾斜儀、SS-Y 型洞體應變儀、重力儀、垂直擺傾斜儀等。
確保儀器有效運行是采集數據的基礎要求,但受儀器本身固有條件的限制,實際觀測中常出現儀器突發性的網絡不通、斷電、死機、超量程等情況,這種突發事件時常第2 天才能被發現,造成幾個小時甚至十幾個小時數據無法使用的情況,這對觀測數據造成的損失較大。所以,如何在出現故障前或故障發生時及時提醒工作人員,避免數據損失就成為地震臺站的一種剛性需求。目前,地震臺站普遍實現方式是Web 監視和Ping IP 地址,這需要工作人員每天多次查詢儀器狀態,但是所有人工監控方法難免會因為疏忽而造成損失。本文擬針對地震臺站經常出現的這種實際問題,再結合目前地震行業內網和外網完全分離的情況,選擇合適的方法和高效的計算機語言進行編程,設計和實現一種基于企業微信的形變故障報警方法。
目前,全國地震行業形變觀測儀器多為“十五”數字地震觀測網絡項目建設期間架設的(“九五”儀器可通過協議轉換器轉為“十五”儀器)。臺站常見形變儀器均具有獨立的Web 請求頁面,能夠查看儀器部分工作狀態、當前測量數據,以及具有數據下載等功能,這為提取實時數據并開展故障報警提供了較便利的現實條件(馬士振等,2015)。因此,設計的整體思路首先是從獨立的內網Web 頁面提取數據,然后通過外網企業微信接口精準地推送邏輯運算所獲得的報警信息給指定用戶。
從2019 年開始,出于對行業內儀器運行數據的安全及保密的考慮,整個地震行業開展了內網和外網的完全切割工作。即內網只能訪問內網,并且訪問內網的電腦一般也是專機專用,確保了行業內網的安全。由于內網環境下下載的數據只能在內網下使用和調取,而企業微信的消息推送則需連接外網,內外網的隔離無法通過編程實現消息互通。因此,只能尋求一種既能夠連通內網又能夠連通外網的橋——“中間媒介”,來解決內網提取、分析數據,外網發送報警信息的問題。本文使用部署在內網固定服務器上借助三方管理平臺開通并建立的虛擬服務器作為“中間媒介”,該服務器既可以訪問內網指定網段的網頁信息,同時也能允許訪問部分的外網,從而實現內外網的消息連通。
在解決了內外網切割帶來的網絡斷層后,還需要選擇合適的編程語言。經測試分析,利用Python 實現形變儀器故障報警效果最好。Python 是一種面向對象的高級動態解釋型計算機語言,因其擁有豐富的三方模塊,被廣泛應用于網絡爬蟲、Web 開發、人工智能、自動化運維、云計算、大數據分析等領域。本文主要以水管傾斜儀(洞體應變儀、垂直擺傾斜儀、重力儀等儀器只需要修改儀器IP 地址即可)作為實驗對象。
設計和實現形變儀器故障報警可以歸納為數據提取和消息發送2 部分,進一步可細化為5 個不同的層,分別是儀器網頁層、數據采集層、邏輯判斷層、消息發送層、用戶應用層(圖1)。其中,數據采集層、邏輯判斷層、消息發送層都是在虛擬服務器中完成。儀器網頁層是數據提取的前提和基礎,其展示了儀器設備的實時數據等信息。數據采集層主要是對儀器網頁實時數據進行實時爬取,并將采集數據發送給邏輯判斷層。一旦無法實施采集網頁實時數據,則該儀器可能發生斷網或斷電故障。邏輯判斷層則首先對采集數據進行格式轉換,將不同格式的采集數據轉換成統一格式,然后對數據進行邏輯處理,此處主要包括檢測數據缺數、儀器死機、超量程等不同情況。消息發送層則是將邏輯判斷層的運算結果通過企業微信接口程序傳輸和推送給指定的用戶或企業群。最后,用戶應用層通過企業微信手機客戶端或電腦客戶端接收報警信息,最終實現報警功能。

圖1 設計框架圖Fig.1 Design frame diagram
儀器網頁層在不斷網、不斷電的情況下,能夠隨時訪問網頁和爬取數據,一旦出現不能登錄的情況,可以直接發送報警信息給企業微信。用戶應用層需要提前建立微信企業號和企業應用,并獲取企業ID 和應用Secret。實際運行時,數據傳輸層將報警消息按指定的企業ID 和應用Secret 完成定向推送。由于儀器網頁層和用戶應用層主要功能由外部軟件實現,所以下面主要討論虛擬服務器數據提取、邏輯判斷、消息發送等3 個層的實現過程(圖2)。

圖2 故障報警流程Fig.2 Failure alarm process
程序使用定時器,并設置合適的運行間隔,定期檢測儀器數據狀況和運行狀態。程序首先在數據采集層爬取儀器網頁,獲取數據。若無法獲取數據,則向儀器發送ping 命令,判斷儀器是否斷網或斷電。若能夠獲取數據,則在邏輯判斷層進行數據匹配、閾值超限判斷等計算,實現儀器、數據故障的判斷。最后,通過消息發送層將故障信息推送至企業微信,實現報警信息的發送與接收。整個流程實現了儀器斷網、斷電、死機、超量程等類型故障的判斷。
數據采集層主要利用網絡爬蟲技術提取網頁中的信息。目前,地震儀器生產廠家較固定,網頁整體結構較簡單,數據的來源也較單一。因此,可通過網絡爬蟲技術提取所需信息,包括數據、標題、符號等。Python 擁有非常豐富的網絡請求庫,如Requests、Urllib 等。本文將利用Requests 庫的get 方法來獲取儀器網頁信息并對獲取到的字符串進行解碼。需要注意的是,行業內形變儀器主要的編碼方式有GB2312 和utf-8 兩種。水管傾斜儀、洞體應變儀等主要采用GB2312,而“九五”VS 型垂直擺則采用的是utf-8 格式。另外,大部分形變儀器網頁無需用戶名及密碼,可以直接get 獲取實時數據;少部分設有登錄用戶名和密碼,則需在get 請求時將用戶名、密碼一同傳輸。
在獲取到儀器主頁的網頁信息后,需要從字符串里匹配到儀器實時測量數據。Python也提供了大量的匹配過濾方法,常見的有正則表達式、BeautifulSoup、lxml 等方式,本文主要通過正則表達式來提取和匹配。正則表達式是指1 個用來描述或匹配一系列符合某個句法規則的字符串的單個字符串(于滿泉等,2005;高丙坤等,2008)。實際的操作中可以先將網頁字符串中的 、 、等利用函數Replace 替換成為空字符,使得網頁成為沒有特殊符號的一連串字符串,再調用正則表達式進行匹配。利用Python 爬取和匹配數據的基本格式如下:

邏輯判斷層是虛擬服務器中承上啟下最重要的一個環節,該層主要作用有:①判斷是否能爬取到儀器主頁信息;②判斷提取數據是否有效;③判斷數據是否超量程。對應的實際問題就是是否有數據、是否是有效數字、是否是正常數據。
首先,主頁信息的爬取通過返回值和Ping 儀器網絡可以判斷儀器是否斷網或斷電。如果獲取不到匹配過濾的數據或無法爬取網頁信息,在其他工作環境都正常的情況下必然是儀器端出現問題,再結合Ping 網頁的檢測手段,可以判斷是儀器斷網還是斷電,隨即完成儀器斷網、斷電的報警。
其次,在儀器工作正常并能夠獲取到匹配數據的情況下,偶爾也會出現輸出數據為999999 或NULL 的數據采集器故障。將提取到的數據和999999 及NULL 進行比較,判斷數據是否屬于這2 種類型,倘若二者完全匹配,則可以完成對儀器死機、斷記的報警。
最后,如果既能獲取到數據且數據也是有效的,則判斷儀器是否有超量程工作。儀器超量程的判斷是基于輸入的閥門值來約束的,在儀器設計出廠測試時發現,在±2V 內的觀測線性度最好,所以,設置合適的閥門值作為基本參考,并將提取到的數據和閥門值作比較,可以精準獲取儀器是否超量程,從而完成是否超量程工作的報警。
經過以上幾個基本的邏輯運算過程,能實現儀器斷網、斷電、斷記、死機、數據采集器故障、超量程的報警。實際工作中可能情況更多,也更復雜,但這幾種情況已經基本囊括了臺站形變觀測中常見的故障類型。
消息發送層主要是將邏輯判斷的計算結果精準、及時地推送到指定的群體客戶端。由于所有的企業微信消息發送都需要在后臺調用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。

圖3 故障報警素材Fig.3 Fault alarm material
確保儀器安全有效地運行是臺站采集數據的必要前提,所以杜絕和減少一切非正常觀測引起的數據缺失、錯誤是地震異常提取的基本保障。本文設計和實現了在行業內外網完全切割的情況下如何通過移動式企業微信進行報警的框架及程序,總結和設置了不同故障下的邏輯運算模塊,利用該方法能夠檢測到儀器的幾種常見故障,并將故障信息推送到指定用戶的企業微信,最終達到報警的目的。此外,針對較固定的儀器廠家和品牌,流體、地磁、地電儀器都可以基于該框架實現企業微信的故障報警。
本研究得到曾憲偉高工和李新艷博士的指導幫助,在此表示衷心的感謝。