梁 波,田智雁,王 鋒,鄧 輝,衛(wèi)守林
(昆明理工大學(xué)云南省計算機技術(shù)應(yīng)用重點實驗室,云南 昆明 650500)
遠程望遠鏡系統(tǒng)第2版*http://rts2.org(Remote Telescope System 2nd version, RTS2)是一種基于Linux操作系統(tǒng)的遠程天文望遠鏡控制系統(tǒng),設(shè)計目的是實現(xiàn)全自動的天文望遠鏡控制。根據(jù)其開源性特點,天文技術(shù)研究人員可以很容易從GitHub獲得源代碼,并根據(jù)GitHub上的方法在Ubuntu操作系統(tǒng)下安裝和配置RTS2。
在RTS2中已經(jīng)擁有了像rts2-mon等命令行界面工具對系統(tǒng)進行控制,但是這些工具只能在已經(jīng)安裝并依賴RTS2軟件包的Linux機器上運行,然而,移動終端的廣泛使用,科研人員工作和生活半徑增大,在需要移動辦公和遠程監(jiān)控需求時,RTS2的自備工具極為不便,甚至有些情況鞭長莫及。
對于天文望遠鏡的觀測監(jiān)控人員來說,能夠?qū)崟r查看運行狀態(tài)、報警信息和發(fā)送控制請求是很有必要的。近年來,國內(nèi)在天文望遠鏡自主觀測系統(tǒng)的控制擴展上已出現(xiàn)一些研究成果,在RTS2中可以訪問RTS2的rts2-xmlrpc服務(wù),通過8889端口號以網(wǎng)絡(luò)訪問的方式對RTS2進行監(jiān)控和狀態(tài)查看[1-4],并且天文觀測技術(shù)人員通過改進的XMP-RPC接口,使用XML格式數(shù)據(jù),實現(xiàn)了瀏覽器對系統(tǒng)的操作,但是XML格式復(fù)雜,傳輸占用帶寬比較大,解析XML需要耗費大量的中央處理器資源,不具備輕量級環(huán)境中使用;或者繼承Rts2 Client Core類實現(xiàn)一個服務(wù),開發(fā)瀏覽器頁面通過WebSocket[3-4]對RTS2進行監(jiān)測和控制。兩種實現(xiàn),都是希望利用瀏覽器的輕便解決傳統(tǒng)命令行界面環(huán)境的局限,在瀏覽器中,需要記錄訪問的統(tǒng)一資源定位器(Uniform Resource Locator, URL),對于記憶和使用都比較麻煩,不利于望遠鏡的監(jiān)測和控制的使用。
隨著移動終端的發(fā)展,微信使用十分普遍,如能將望遠鏡的實時監(jiān)測和控制界面移植到微信小程序中,對于觀測人員實時控制望遠鏡系統(tǒng)將更加簡便。本文正是基于此背景展開相應(yīng)的研究工作,在分析其他已有研究成果的基礎(chǔ)上,采用HTTP協(xié)議與微信小程序進行JSON數(shù)據(jù)交互,從而實現(xiàn)RTS2自主控制系統(tǒng)進行監(jiān)測和控制。
微信(WeChat)*http://www.chinastor.org/GuoNeiXinWen/8699.html是騰訊公司2011年推出的一個為智能終端提供即時通訊服務(wù)的免費應(yīng)用程序。隨著近幾年技術(shù)的發(fā)展,騰訊公司推出了觸手可及、用完即走的微信小程序[5],它不需要下載和安裝就可以使用,用戶掃一掃或者搜一下即可以打開應(yīng)用,用完之后退出即可,無需關(guān)閉卸載[6],可在微信內(nèi)便捷地獲取與傳播,具有很出色的用戶體驗;微信支持多種不同操作系統(tǒng)的移動終端,微信小程序開發(fā)者可以不用考慮移動終端是Android系統(tǒng)還是IOS系統(tǒng),只需要實現(xiàn)開發(fā)所需要的功能即可,但是要想使用微信小程序,用戶的微信版本必須升級到6.5.3及以上版本。
微信小程序的開發(fā)與寫HTML界面很相似,它的主要開發(fā)內(nèi)容也包括界面index.wxml、index.wxss和index.js,并通過微信小程序提供的接口與開發(fā)者的服務(wù)器進行數(shù)據(jù)交互。以微信作為載體的微信小程序與RTS2進行數(shù)據(jù)交互的流程如圖1。
圖1微信小程序訪問RTS2流程圖
Fig.1The WeChat Micro-program access to RTS2 flow chart
在微信小程序中,每訪問RTS2服務(wù)一次,都需要先訪問微信服務(wù)器,所以在做服務(wù)訪問時需要調(diào)用微信小程序封裝好的訪問方法wx.request(OBJECT),然后通過微信服務(wù)器與RTS2服務(wù)進行數(shù)據(jù)交互,最后將JSON數(shù)據(jù)返回給微信小程序。由于微信小程序提供的接口,對訪問的URL中不能擁有端口號的限制,要想通過微信小程序訪問自己的服務(wù)器,先得把observatoryserver中的端口號做一個地址映射,將端口號隱藏,這樣才能很好地通過微信小程序與RTS2進行交互。
微信小程序通過發(fā)送HTTP請求與RTS2服務(wù)進行數(shù)據(jù)交互,這一點與網(wǎng)絡(luò)訪問RTS2服務(wù)一致。根據(jù)JSONAPI提供的各種命令,微信小程序可以通過HTTP地址訪問RTS2服務(wù),RTS2根據(jù)不同的命令,以JSON的格式返回對應(yīng)的數(shù)據(jù),為了避免出現(xiàn)中文亂碼現(xiàn)象,微信小程序與RTS2服務(wù)進行數(shù)據(jù)交互時,都需要設(shè)置數(shù)據(jù)編碼格式為UTF-8。比如,通過地址http://observatoryserver/apipath/jsoncommands,加上相應(yīng)的傳入?yún)?shù),就可以獲取RTS2返回的JSON格式的數(shù)據(jù){infotime: 1502882474.90689, uptime: 1502882474.052562, focuser: “F0”},在微信小程序中,通過jquery很方便地獲取JSON格式的數(shù)據(jù),通過代碼obj.infotime可以獲取1502882474.90689數(shù)據(jù),該數(shù)據(jù)為時間戳,在做數(shù)據(jù)處理時,需要對數(shù)據(jù)進行時間轉(zhuǎn)換,具體方法可以通過以下代碼轉(zhuǎn)換:
var day=new Date(parseInt(time)*1000);
var date="."+ time.split(".")[1];
time=day.toLocaleDateString().replace(///g, "-") + "T" +day.toTimeString().substr(0, 8)+parseFloat(date).toFixed(3);
由于不同JSON命令獲取的數(shù)據(jù)不同,在微信小程序里寫了一個通用的方法,將RTS2返回的JSON格式數(shù)據(jù),做了一個基本的轉(zhuǎn)換,將原鍵值對的數(shù)據(jù)分開,形成新的JSON格式的數(shù)據(jù),具體核心代碼如下:
var json="{′list′:[";
vari=0;
for(varkin devices){
if(i> 0)
json+=",";
json+="{′name′: ′"+k+"′, ′values′: ′"+devices[k]+"′}";
i++;
}
json+="]}";
var obj=eval(′(′+json+′)′);
前述JSON數(shù)據(jù)經(jīng)上述代碼轉(zhuǎn)化為{list:[{key: infotime, value: 1502882474.90689}, {key: uptime, value: 1502882474.052562}, {key: focuser, value: “F0”}]}這樣的格式,JSON格式易于閱讀和編寫,同時也易于機器解析和生成,并有效提升網(wǎng)絡(luò)傳輸效率。
根據(jù)GitHub中最新RTS2源代碼的分析,提供了很多命令可以通過瀏覽器或移動終端設(shè)備獲取RTS2中的設(shè)備信息,并通過一些參數(shù)可以控制設(shè)備。這些命令可以對天文望遠鏡自主系統(tǒng)進行遠程控制和遠程查看設(shè)備控制、狀態(tài)信息,同時還可以獲取相應(yīng)的天文圖片。本文使用的一些命令具體介紹如下:
(1)控制命令
a、直接控制cmd
通過使用cmd命令,可以根據(jù)傳入的device和target兩個參數(shù),向RTS2中的不同設(shè)備發(fā)送命令控制設(shè)備。比如,要觀察目標8的下一個目標,通過地址 http://observatoryserver/apipath/cmd?d=EXEC&c=next%208就可以向設(shè)備發(fā)送控制命令(在這種情況下, 腳本有一個替換為 ‘%20’ 的空格以符合http urls標準)。
b、運行腳本控制runscript、killscript
微信小程序可以通過runscript命令運行腳本、killscript關(guān)閉正在運行的腳本,通過微信小程序向RTS2發(fā)送控制信息runscript?d=C0&s=E%201可以運行已經(jīng)準備好的腳本(在這種情況下, 腳本有一個替換為 ‘%20’ 的空格以符合http urls標準)。
(2)devbytype
通過調(diào)用devbytype方法,可以通過選擇設(shè)備類型,查詢與之匹配的設(shè)備列表,表1*http://rts2.org/wiki/doku.php?id=code:json列出了可供選擇設(shè)備類型的代碼。
(3)devices
微信小程序通過使用devices命令,可以獲取連接到RTS2中的所有設(shè)備列表,該數(shù)據(jù)以JSON格式描述。
(4)get
微信小程序通過get命令,結(jié)合設(shè)備名稱參數(shù),獲取某個連接設(shè)備的具體數(shù)據(jù),比如設(shè)備的狀態(tài)、位置等詳細的數(shù)據(jù)生成JSON格式從RTS2中返回微信小程序,以便觀測人員進行解析顯示。
(5)lastimage、currentimage
微信小程序通過lastimage命令獲取最后采集的圖片,通過currentimage命令獲取當前采集的圖片。
表1 設(shè)備類型Table1 Equipmenttype
根據(jù)上述討論的技術(shù),在移動終端依托微信小程序,利用開源的RTS2,在微信小程序上實現(xiàn)了一套基于RTS2的望遠鏡系統(tǒng)狀態(tài)查看、連接在RTS2上設(shè)備的信息及狀態(tài)查看和望遠鏡拍攝圖片查看的系統(tǒng)原型。系統(tǒng)以部署在Ubuntu16.04上的RTS2為服務(wù),使用系統(tǒng)為Android6.0版本的手機且安裝版本為6.5.10的微信,微信小程序與RTS2交互的訪問流程如圖2。
圖2微信小程序功能圖
Fig.2The WeChat Micro-program function diagram
通過微信開發(fā)工具將微信小程序發(fā)布到微信上即可使用,微信小程序通過使用devices命令獲取連接設(shè)備列表,根據(jù)需要查看設(shè)備的狀態(tài)和信息,設(shè)備信息、狀態(tài)和性能數(shù)據(jù)的顯示界面如圖3。
根據(jù)圖3的顯示信息可以看出通過小程序發(fā)送JSON封裝的命令,獲取連接設(shè)備的基本信息,微信小程序自帶的調(diào)試和性能監(jiān)控功能可以看出中央處理器占用率是1%,內(nèi)存消耗只有151 M,運行小程序?qū)κ謾C硬件的要求不高,同時,由于小程序自身擁有即開即用、不需要下載安裝等特點,也不會占用系統(tǒng)的存儲空間。在現(xiàn)實使用中,觀測人員通過微信小程序可以隨時隨地查看連接設(shè)備信息和拍攝的天文圖片,同時也可以根據(jù)JSON命令控制設(shè)備。
圖3設(shè)備信息、狀態(tài)和性能
Fig.3Device information, status and performance
RTS2作為一個開源的天文望遠鏡控制系統(tǒng),在天文領(lǐng)域許多研究人員對其進行研究和使用,基于瀏覽器通過XMLRPC[1]/WebSocket[3-4]協(xié)議對其進行實時的控制和狀態(tài)查詢進行擴展,通過微信的廣泛使用,以此為載體,提供微信小程序,只需要觀測人員或者值守人員擁有微信客戶端,使用場景與手機操作系統(tǒng)無關(guān),可以在移動終端隨時隨地查看連接設(shè)備狀態(tài),獲取望遠鏡拍攝的圖片。雖然本文的自主控制系統(tǒng)是RTS2,同樣可以借助JSON Proxy Server擴展到ASCOM框架,實現(xiàn)一個基于微信小程序針對自主望遠鏡控制系統(tǒng)遠程的通用框架。
總體來說,本文實現(xiàn)的通用望遠鏡控制微信程序設(shè)計能夠滿足對連接設(shè)備信息查看和控制的觀測需要。由于本文基于HTTP協(xié)議進行,所有獲取都是主動模式,與WebSocket相比,實時方面有所欠缺,在下一步工作中,可尋找技術(shù)手段進行改進。
參考文獻:
[1]冉凡輝, 鄧輝, 梁波, 等. 基于XML-RPC的RTS2自主觀測系統(tǒng)遠程訪問技術(shù)[J]. 天文研究與技術(shù)——國家天文臺臺刊, 2013, 10(4): 372-377.
Ran Fanhui, Deng Hui, Liang Bo, et al. A study of remote access techniques for an RTS2 autonomous observation software system based on the XML-RPC[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China,2013,10(4):372-377.
[2]諶俊毅, 陳東, 范玉峰, 等. 基于嵌入式系統(tǒng)的望遠鏡遠程控制實驗[J]. 天文研究與技術(shù)——國家天文臺臺刊, 2007, 4(1): 36-41.
Chen Junyi, Chen Dong, Fan Yufeng, et al. The remote control experiment of the telescope based on the embedded Internet[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2007, 4(1): 36-41.
[3]許駿, 金振宇. WindowsSockets實現(xiàn)天文終端的遠程控制[J]. 云南天文臺臺刊, 2001(1): 40-46.
Xu Jun, Jin Zhenyu. Remote control of astronomical terminals based on WinSockets[J]. Publications of the Yunnan Observatory, 2001(1): 40-46.
[4]衛(wèi)守林, 曹子皇, 王鋒, 等. 基于WebSocket的RTS2Web控制研究[J].天文研究與技術(shù)——國家天文臺臺刊, 2014, 11(4): 404-409.
Wei Shoulin, Cao Zihuang, Wang Feng, et al. A study of web control of an RTS2 system based on the WebSocket[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2014, 11(4): 404-409.
[5]匡文波, 李芮, 任卓如. 微信小程序面面觀[J]. 新聞?wù)搲? 2017(2): 15-18.
Kuang Wenbo, Li Rui, Ren Zhuoru. Face view micro-program[J]. News Tribune, 2017(2): 15-18.
[6]王天泥. 當圖書館遇上微信小程序[J]. 圖書與情報, 2016(6): 83-86.
Wang Tianni. When library encounters WeChat mini-apps[J]. Library and Information, 2016(6): 83-86.