任瑞芳 金慧
摘要:對(duì)傳統(tǒng)物聯(lián)網(wǎng)設(shè)備遠(yuǎn)程控制技術(shù)進(jìn)行測試和分析,提出一種改進(jìn)的物聯(lián)網(wǎng)設(shè)備遠(yuǎn)程控制方法,旨在解決因?yàn)橥ㄐ叛舆t或錯(cuò)誤導(dǎo)致的用戶終端狀態(tài)更新慢、數(shù)據(jù)過期、界面異常或卡機(jī)等影響人機(jī)交互流暢性的問題。在用戶終端創(chuàng)建虛擬設(shè)備模塊,該模塊與網(wǎng)絡(luò)應(yīng)用服務(wù)器連接,用于接收用戶指令、轉(zhuǎn)發(fā)控制消息、同步和校驗(yàn)設(shè)備終端狀態(tài)等工作;在設(shè)備終端聯(lián)網(wǎng)模塊上增加指令抵達(dá)消息反饋機(jī)制,在接收到有虛擬設(shè)備發(fā)送的控制指令時(shí)先立即以輕量數(shù)據(jù)包原路返回,然后再把控制指令轉(zhuǎn)發(fā)給下層電器模塊進(jìn)行處理。實(shí)驗(yàn)結(jié)果表明:這種改進(jìn)的遠(yuǎn)程交互方法和裝置,減輕了應(yīng)用服務(wù)器與設(shè)備終端的數(shù)據(jù)處理壓力、能夠保證用戶終端與設(shè)備終端狀態(tài)的匹配、明顯提升了用戶終端指令響應(yīng)速度,操作過程流暢、敏捷、正確。
關(guān)鍵詞:物聯(lián)網(wǎng);遠(yuǎn)程控制;用戶體驗(yàn);交互流暢;虛擬物聯(lián)設(shè)備
圖書分類號(hào):TP309 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)11-0250-03
The Research and Improvement oF IoT Equipment Remote Control Technology
REN Rui-fang1, JIN Hui2
(1.Network Center, Huizhou Health Vocational College, Huizhou 516025, China;2.Industry Research Institute TCL Group, Huizhou 516006, China)
Abstract: Based on the test of the remote control technology of the traditional IoT equipment and research on it, a new method is proposed to resolve the human-machine interaction fluency problems such as status update slow, data expired, UI exception or system halted, that caused by communication delay or error. A virtual device module is created on the user terminal, which connected with the network application server. It can send and receive command messages, and forwardly synchronize and check the equipment running state. A message feedback mechanism is created in network module of the equipment terminal, when it received a control message, It will be the first to return data with a lightweight data packet and then forwarded to the next layer of electrical module. The experimental result shows that the improved method and device can reduce the processing pressure, guarantee the data correctness of the equipment and user terminal , It really improves the fluency of human-machine interaction.
Key words: internet of things (IoT); remote control; user experience; smooth interaction; virtual IoT equipment
隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,智能醫(yī)療、智能電教、智能家電等物聯(lián)網(wǎng)產(chǎn)品逐漸出現(xiàn)在人們的生活和工作中,然而人們對(duì)產(chǎn)品的需求不僅僅是設(shè)備能夠上網(wǎng)通信,而是特別注重用戶的參與、用戶體驗(yàn)[1]。用戶遠(yuǎn)在千里之外,他們遠(yuǎn)程控制實(shí)體智能設(shè)備的交互體驗(yàn)顯然是來自手機(jī)、電腦、Pad等用戶終端,在用戶終端的人機(jī)交互是否流暢將對(duì)物聯(lián)網(wǎng)產(chǎn)品的普及起到非常重要的作用。
傳統(tǒng)物聯(lián)網(wǎng)遠(yuǎn)程控制技術(shù)一般是在網(wǎng)絡(luò)通信模塊與實(shí)體設(shè)備的控制器之間通過網(wǎng)絡(luò)協(xié)議建立長連接,然后由網(wǎng)絡(luò)通信模塊被動(dòng)接受用戶指令并發(fā)送給實(shí)體設(shè)備的控制器,實(shí)體設(shè)備控制器再轉(zhuǎn)發(fā)給電器處理模塊,電器處理模塊完成控制請(qǐng)求后后將處理結(jié)果原路返回,最后,網(wǎng)絡(luò)通信模塊再被動(dòng)接收處理結(jié)果并告知用戶終端[2]。
這種單純靠物理鏈路的被動(dòng)式消息收發(fā)機(jī)制在遠(yuǎn)距離高頻次數(shù)據(jù)交互過程中經(jīng)常會(huì)造成來往雙向通訊的信息延遲、數(shù)據(jù)錯(cuò)誤等情況,從而導(dǎo)致用戶交互界面的反映遲鈍、狀態(tài)與實(shí)際不符,這有時(shí)候會(huì)嚴(yán)重影響人機(jī)交互的流暢性[3]。然而改變通訊模塊、電器處理部件性能或物理帶寬雖然可以加快通訊速度,但效果不明顯,且成本高、靈活性差、部署慢。
使用本文所述的技術(shù)方法和裝置,可以在用戶終端接收控制指令時(shí)較好的提高通訊質(zhì)量,減輕服務(wù)器壓力,及時(shí)對(duì)用戶的操作做出響應(yīng),人機(jī)交互過程流暢敏捷,并且其良好的數(shù)據(jù)同步機(jī)制能夠確保狀態(tài)數(shù)據(jù)的正確性。
1 傳統(tǒng)軟件與通訊系統(tǒng)設(shè)置
1.1 軟件系統(tǒng)架構(gòu)
物聯(lián)網(wǎng)遠(yuǎn)程控制技術(shù)實(shí)現(xiàn)方案的通訊系統(tǒng)架構(gòu)可以由五個(gè)子模塊構(gòu)成:設(shè)備終端、網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器、Web服務(wù)器、用戶終端和數(shù)據(jù)庫,如圖1所示。
各模塊的功能如下所述:
(1)設(shè)備終端:可理解為“智能醫(yī)療設(shè)備”、“智能電教設(shè)備”和“智能家電設(shè)備”,它們是實(shí)際被控制的物聯(lián)網(wǎng)設(shè)備或裝置[4]。
(2)用戶終端:可理解為“手機(jī)”、“PAD”、“PC”上的應(yīng)用程序或“瀏覽器”,它們是用戶用來控制物聯(lián)網(wǎng)設(shè)備或裝置的“遙控”終端。
(3)網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器:選擇Openfire應(yīng)用,它可用于實(shí)現(xiàn)XMPP網(wǎng)關(guān),打通異構(gòu)網(wǎng)絡(luò)設(shè)備終端與用戶終端的連接與綁定,實(shí)現(xiàn)控制指令與消息的轉(zhuǎn)發(fā)。
(4)Web服務(wù)器:用于連接瀏覽器類型的用戶終端,把瀏覽器用戶終端的控制請(qǐng)求轉(zhuǎn)發(fā)給網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器。Web服務(wù)器還可以對(duì)所有接入設(shè)備和用戶信息進(jìn)行管理與分析。
(5)數(shù)據(jù)庫:用于存儲(chǔ)用戶屬性、設(shè)備屬性、綁定關(guān)系、登錄驗(yàn)證、系統(tǒng)日志等數(shù)據(jù)。
1.2 通訊系統(tǒng)流程
在通訊協(xié)議方面,選擇XMPP(可擴(kuò)展通訊和表示協(xié)議)作為控制命令消息格式 ,用戶在用戶終端發(fā)起一個(gè)控制命令“開機(jī)”,并最終得到“開機(jī)”狀態(tài)反饋,流程如2所示:
圖2 通訊模塊交互流程圖
(1)遠(yuǎn)程控制客戶端輸入開機(jī)命令;
(2)網(wǎng)絡(luò)通信模塊將開機(jī)控制命令發(fā)送給Openfire網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器;
(3)Openfire把開機(jī)控制命令轉(zhuǎn)發(fā)給指定的實(shí)體設(shè)備Wifi板控制器;
(4)Wifi板控制器收到開機(jī)控制命令,轉(zhuǎn)發(fā)給實(shí)體設(shè)備處理器完成電器開機(jī)控制;
(5)實(shí)體設(shè)備處理器將處理結(jié)果返回給Wifi板控制器;
(6)Wifi板控制器將結(jié)果轉(zhuǎn)發(fā)給Openfire網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器;
(7)Openfire網(wǎng)絡(luò)中轉(zhuǎn)服務(wù)器通過網(wǎng)絡(luò)通信模塊返回給遠(yuǎn)程控制客戶端顯示(用戶終端)。
從圖2可以看到,基于上述流程的控制命令收發(fā),可以完成對(duì)實(shí)體設(shè)備進(jìn)行遠(yuǎn)程控制的數(shù)據(jù)交互,但每一次接收到用戶指令,都要從用戶終端到電器終端被動(dòng)的完成一次消息傳輸與處理。在實(shí)際應(yīng)用中,數(shù)萬計(jì)的用戶在用戶終端(比如手機(jī))要完成頻繁遠(yuǎn)程控制,這種被動(dòng)式消息發(fā)送機(jī)制將會(huì)給網(wǎng)絡(luò)服務(wù)器帶來很大壓力,消息容易阻塞,延遲現(xiàn)象將會(huì)加重,影響用戶交互流暢體驗(yàn)。
2 通訊機(jī)制優(yōu)化
為提高用戶終端人機(jī)交互流暢性,需要想辦法優(yōu)化通訊機(jī)制,減少客戶端狀態(tài)對(duì)網(wǎng)絡(luò)服務(wù)器、遠(yuǎn)程實(shí)體設(shè)備的依賴[5]。通過在用戶終端加裝“虛擬設(shè)備”模塊,該模塊具備實(shí)體設(shè)備相同的電器處理邏輯?;谠摗疤摂M設(shè)備”調(diào)整遠(yuǎn)程控制通訊交互機(jī)制,變被動(dòng)通訊為主動(dòng)通訊,對(duì)用戶操作主動(dòng)判斷并做出及時(shí)響應(yīng),流程如圖3所示:
圖3 通訊模塊交互流程圖改進(jìn)
假定用戶終端應(yīng)用程序當(dāng)前連接的設(shè)備狀態(tài)為關(guān)機(jī),用戶輸入開機(jī)指令,用戶終端預(yù)存控制指令:TurnOnPreValue = On,用戶終端調(diào)用虛擬設(shè)備開關(guān)機(jī)狀態(tài)status值為off,操作符合設(shè)備處理邏輯,虛擬設(shè)備將發(fā)送一條開機(jī)指令,接下來用戶終端無需等待電器處理結(jié)果便可以實(shí)現(xiàn)同等的交互效果,以下是相關(guān)代碼實(shí)現(xiàn):
用戶終端輸入:
//電源開關(guān)
$("#power").bind('click',function(){
//用戶點(diǎn)擊電源按鈕
//操作頻率、運(yùn)行時(shí)設(shè)備狀態(tài)決定用戶輸入有效性
if($(this).attr("disable") == "false"){
//用戶輸入用效,獲取虛擬設(shè)備電源狀態(tài)
var status = $(this).attr("status");
if(status == "off"){
//標(biāo)記預(yù)設(shè)值
DeviceValue.TurnOnPreValue = "on";
//發(fā)送遠(yuǎn)程開機(jī)命令
var msg = ContrlMsg.SendDeviceSwitch (deviceInfo.jid,"on");
MsgManager.getChatManager().sendMessage(msg);
}else{
//標(biāo)記預(yù)設(shè)值
DeviceValue.TurnOnPreValue = "off";
//發(fā)送遠(yuǎn)程關(guān)機(jī)命令
var msg = ContrlMsg . SendDeviceSwitch (deviceInfo.jid,"off");
MsgManager.getChatManager().sendMessage(msg);
}//end if status
}//end if disable
}).bind('touchstart', function(){
//用戶端UI交互處理
if($(this).attr("disable") == "false"){
$(this).addClass("btn_power_focu");
}
}).bind('touchend',function(){
$(this).removeClass("btn_power_focu");
});//end click function
虛擬設(shè)備響應(yīng):
parseMsg: function (from, msg) {
//獲取消息類型
var keyWord = msg.getAttribute('msgid');
//獲取消息發(fā)送設(shè)備賬號(hào)
var device_jid = Strophe . getNodeFromJid (from);
switch (keyWord) {//判斷消息類型
/*ACKSetMessage設(shè)備終端快速應(yīng)答消息*/
case "ACKSetMessage":
var seq = msg.getAttribute('seq');
//獲取應(yīng)答消息序列ID
var ackid = this.getChildVal(msg, 'Return');//獲取應(yīng)答消息內(nèi)容
switch(seq){
case '1'://1代表開關(guān)機(jī)操作
$("#power").attr("status",DeviceValue.TurnOnPreValue);//虛擬設(shè)備處理狀態(tài)
if (DeviceValue.TurnOnPreValue == "on") {
initTurnOnUI();//開機(jī)界面初始化
}else if(VirDeviceValue.TurnOnPreValue =="off"){
initTurnOffUI();//關(guān)機(jī)界面初始化
resetDeviceValue();//重置狀態(tài)
}
break;
default:
break;
}//end switch
}//end function
優(yōu)化的用戶終端和網(wǎng)絡(luò)通訊機(jī)制,不再需要每次都等待遠(yuǎn)程的實(shí)體設(shè)備電器模塊處理返回結(jié)果,而是在用戶終端做了邏輯同步,通過虛擬設(shè)備來完全模擬實(shí)體設(shè)備的處理。因此,在用戶終端就可以及時(shí)響應(yīng)用戶請(qǐng)求,在物理距離遠(yuǎn)、高并發(fā)的時(shí)候就不會(huì)造成服務(wù)器控制消息堆積,讓服務(wù)器只處理有效的請(qǐng)求,緩解通訊壓力,用戶終端UI反饋處理則更為及時(shí)敏捷,有效提升人機(jī)交互體驗(yàn)的流暢性。
3 數(shù)據(jù)同步機(jī)制優(yōu)化
要使得改進(jìn)后的用戶終端和網(wǎng)絡(luò)通訊機(jī)制保障用戶終端狀態(tài)的正確性,前文提到的虛擬設(shè)備具有實(shí)體設(shè)備相同的電器處理邏輯還需要基于一種良好的數(shù)據(jù)同步方式才得以做出正確結(jié)果,這里以瀏覽器客戶端為例,虛擬設(shè)備使用輕量級(jí)的jwchat聊天客戶端與實(shí)體設(shè)備終端連接,數(shù)據(jù)同步的方式采用如下幾種方案:
(1)在登錄連接時(shí)同步
步驟1:在客戶端創(chuàng)建一個(gè)會(huì)話連接,該連接實(shí)現(xiàn)與設(shè)備終端的通信:
con = new JSJaCHttpBindingConnection (oArg);//實(shí)例化JSJaC連接對(duì)象
步驟2:注冊(cè)一個(gè)廣播消息,通過presence廣播可以返回實(shí)體設(shè)備端是否在線:
con.registerHandler('presence', handlePresence);//注冊(cè)presence消息
步驟3:注冊(cè)一個(gè)狀態(tài)交換的消息,用于接收實(shí)體設(shè)備端狀態(tài):
con.registerHandler('message', handleMessage);//注冊(cè)message消息
步驟4:如果接收到實(shí)體設(shè)備在線,虛擬設(shè)備可以發(fā)送一次同步狀態(tài)請(qǐng)求:
var msg = ContrlMsg.getInit(from);
//from表示發(fā)送者,即用戶終端
MsgManager.getChatManager().sendMessage(msg); //發(fā)送設(shè)備狀態(tài)同步請(qǐng)求消息
步驟6:實(shí)體設(shè)備端接收到同步狀態(tài)請(qǐng)求后,使用stateUpdateMessage消息回復(fù)給虛擬設(shè)備,由虛擬設(shè)備處理同步結(jié)果:
(2)在后臺(tái)運(yùn)行時(shí)同步
步驟1:在用戶終端創(chuàng)建一個(gè)定時(shí)器
步驟2:輪詢發(fā)送同步狀態(tài)請(qǐng)求
步驟3:接收到的stateUpdateMessage消息交給虛擬設(shè)備處理同步結(jié)果
(3) 在交互完成時(shí)同步
步驟1:用戶終端發(fā)起一次控制命令
步驟2:當(dāng)發(fā)起控制命令后,由設(shè)備終端自動(dòng)觸發(fā)同步
步驟3:接收到的stateUpdateMessage消息交給虛擬設(shè)備處理同步結(jié)果
虛擬設(shè)備處理設(shè)備終端返回的statusUpdateMsg消息的消息設(shè)計(jì)如下:
parseMsg: function (from, msg) {
(下轉(zhuǎn)第264頁)
(上接第252頁)
var keyWord = msg.getAttribute ('msgid');//獲取消息類型
var device_jid = Strophe. getNodeFromJid(from);//獲取消息發(fā)送設(shè)備賬號(hào)
//判斷消息類型
switch (keyWord) {
/*終端設(shè)備電器處理結(jié)果消息接收*/
case "statusUpdateMsg":
var TurnOn = this.getChildVal(msg, 'TurnOn');//開關(guān)機(jī)
//開關(guān)機(jī)處理
if (TurnOn) {
if (TurnOn == "on") {
DeviceValue.TurnOn = true;//標(biāo)記開機(jī)狀態(tài)initTurnOnUI();//開機(jī)界面初始化
} else if (TurnOn == "off") {
DeviceValue.TurnOn = false;//標(biāo)記關(guān)機(jī)狀態(tài)
initTurnOffUI();//關(guān)機(jī)界面初始化
resetBwashValue();//重置設(shè)備狀態(tài)
}
}//end if
}//end switch
}//end function
通過這種數(shù)據(jù)同步機(jī)制,虛擬設(shè)備不僅可以高效的響應(yīng)用戶操作,又保障了與實(shí)體設(shè)備的正確性。
4 結(jié)束語
利用創(chuàng)新的用戶終端虛設(shè)備來模擬真實(shí)設(shè)備控制邏輯,并基于該虛擬設(shè)備搭建的通訊交互機(jī)制,變被動(dòng)為主動(dòng),對(duì)用戶的操作合理處理、快速反饋,提高物聯(lián)網(wǎng)設(shè)備遠(yuǎn)程控制交互流暢性,有利于物聯(lián)網(wǎng)產(chǎn)品的應(yīng)用普及。
參考文獻(xiàn):
[1] Internet of Things-An Action Plan for Europe.2009.http://ec.europa.eu/ information _society/ policy/rfid / document/ commiont 2009.pdf
[2] (美)莫菲特(Jack Moffitt).XMPP高級(jí)編程,北京:清華大學(xué)出版社,2011.6
[4] 陶國榮.jQuery權(quán)威指南,北京:機(jī)械工業(yè)出版社,2011.1 82-123,159-193
[5] (澳)威利(Luke Welling),(澳)湯姆森(Laura Thomson).PHP和MySQL Web開發(fā),北京:機(jī)械工業(yè)出版社,2009.4 117-154,200-234
[6] 列旭松,陳文.PHP核心技術(shù)與最佳實(shí)踐,北京:機(jī)械工業(yè)出版社,2012.12
[7] 楊正洪.大數(shù)據(jù)、物聯(lián)網(wǎng)和云計(jì)算之應(yīng)用,北京:清華大