物联网设备远程控制技术研究与改进
2015-06-24任瑞芳金慧
任瑞芳 金慧
摘要:对传统物联网设备远程控制技术进行测试和分析,提出一种改进的物联网设备远程控制方法,旨在解决因为通信延迟或错误导致的用户终端状态更新慢、数据过期、界面异常或卡机等影响人机交互流畅性的问题。在用户终端创建虚拟设备模块,该模块与网络应用服务器连接,用于接收用户指令、转发控制消息、同步和校验设备终端状态等工作;在设备终端联网模块上增加指令抵达消息反馈机制,在接收到有虚拟设备发送的控制指令时先立即以轻量数据包原路返回,然后再把控制指令转发给下层电器模块进行处理。实验结果表明:这种改进的远程交互方法和装置,减轻了应用服务器与设备终端的数据处理压力、能够保证用户终端与设备终端状态的匹配、明显提升了用户终端指令响应速度,操作过程流畅、敏捷、正确。
关键词:物联网;远程控制;用户体验;交互流畅;虚拟物联设备
图书分类号:TP309 文献标识码:A 文章编号: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
随着物联网技术的不断发展,智能医疗、智能电教、智能家电等物联网产品逐渐出现在人们的生活和工作中,然而人们对产品的需求不仅仅是设备能够上网通信,而是特别注重用户的参与、用户体验[1]。用户远在千里之外,他们远程控制实体智能设备的交互体验显然是来自手机、电脑、Pad等用户终端,在用户终端的人机交互是否流畅将对物联网产品的普及起到非常重要的作用。
传统物联网远程控制技术一般是在网络通信模块与实体设备的控制器之间通过网络协议建立长连接,然后由网络通信模块被动接受用户指令并发送给实体设备的控制器,实体设备控制器再转发给电器处理模块,电器处理模块完成控制请求后后将处理结果原路返回,最后,网络通信模块再被动接收处理结果并告知用户终端[2]。
这种单纯靠物理链路的被动式消息收发机制在远距离高频次数据交互过程中经常会造成来往双向通讯的信息延迟、数据错误等情况,从而导致用户交互界面的反映迟钝、状态与实际不符,这有时候会严重影响人机交互的流畅性[3]。然而改变通讯模块、电器处理部件性能或物理带宽虽然可以加快通讯速度,但效果不明显,且成本高、灵活性差、部署慢。
使用本文所述的技术方法和装置,可以在用户终端接收控制指令时较好的提高通讯质量,减轻服务器压力,及时对用户的操作做出响应,人机交互过程流畅敏捷,并且其良好的数据同步机制能够确保状态数据的正确性。
1 传统软件与通讯系统设置
1.1 软件系统架构
物联网远程控制技术实现方案的通讯系统架构可以由五个子模块构成:设备终端、网络中转服务器、Web服务器、用户终端和数据库,如图1所示。
各模块的功能如下所述:
(1)设备终端:可理解为“智能医疗设备”、“智能电教设备”和“智能家电设备”,它们是实际被控制的物联网设备或装置[4]。
(2)用户终端:可理解为“手机”、“PAD”、“PC”上的应用程序或“浏览器”,它们是用户用来控制物联网设备或装置的“遥控”终端。
(3)网络中转服务器:选择Openfire应用,它可用于实现XMPP网关,打通异构网络设备终端与用户终端的连接与绑定,实现控制指令与消息的转发。
(4)Web服务器:用于连接浏览器类型的用户终端,把浏览器用户终端的控制请求转发给网络中转服务器。Web服务器还可以对所有接入设备和用户信息进行管理与分析。
(5)数据库:用于存储用户属性、设备属性、绑定关系、登录验证、系统日志等数据。
1.2 通讯系统流程
在通讯协议方面,选择XMPP(可扩展通讯和表示协议)作为控制命令消息格式 ,用户在用户终端发起一个控制命令“开机”,并最终得到“开机”状态反馈,流程如2所示:
图2 通讯模块交互流程图
(1)远程控制客户端输入开机命令;
(2)网络通信模块将开机控制命令发送给Openfire网络中转服务器;
(3)Openfire把开机控制命令转发给指定的实体设备Wifi板控制器;
(4)Wifi板控制器收到开机控制命令,转发给实体设备处理器完成电器开机控制;
(5)实体设备处理器将处理结果返回给Wifi板控制器;
(6)Wifi板控制器将结果转发给Openfire网络中转服务器;
(7)Openfire网络中转服务器通过网络通信模块返回给远程控制客户端显示(用户终端)。
从图2可以看到,基于上述流程的控制命令收发,可以完成对实体设备进行远程控制的数据交互,但每一次接收到用户指令,都要从用户终端到电器终端被动的完成一次消息传输与处理。在实际应用中,数万计的用户在用户终端(比如手机)要完成频繁远程控制,这种被动式消息发送机制将会给网络服务器带来很大压力,消息容易阻塞,延迟现象将会加重,影响用户交互流畅体验。
2 通讯机制优化
为提高用户终端人机交互流畅性,需要想办法优化通讯机制,减少客户端状态对网络服务器、远程实体设备的依赖[5]。通过在用户终端加装“虚拟设备”模块,该模块具备实体设备相同的电器处理逻辑。基于该“虚拟设备”调整远程控制通讯交互机制,变被动通讯为主动通讯,对用户操作主动判断并做出及时响应,流程如图3所示:
图3 通讯模块交互流程图改进
假定用户终端应用程序当前连接的设备状态为关机,用户输入开机指令,用户终端预存控制指令:TurnOnPreValue = On,用户终端调用虚拟设备开关机状态status值为off,操作符合设备处理逻辑,虚拟设备将发送一条开机指令,接下来用户终端无需等待电器处理结果便可以实现同等的交互效果,以下是相关代码实现:
用户终端输入:
//电源开关
$("#power").bind('click',function(){
//用户点击电源按钮
//操作频率、运行时设备状态决定用户输入有效性
if($(this).attr("disable") == "false"){
//用户输入用效,获取虚拟设备电源状态
var status = $(this).attr("status");
if(status == "off"){
//标记预设值
DeviceValue.TurnOnPreValue = "on";
//发送远程开机命令
var msg = ContrlMsg.SendDeviceSwitch (deviceInfo.jid,"on");
MsgManager.getChatManager().sendMessage(msg);
}else{
//标记预设值
DeviceValue.TurnOnPreValue = "off";
//发送远程关机命令
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
虚拟设备响应:
parseMsg: function (from, msg) {
//获取消息类型
var keyWord = msg.getAttribute('msgid');
//获取消息发送设备账号
var device_jid = Strophe . getNodeFromJid (from);
switch (keyWord) {//判断消息类型
/*ACKSetMessage设备终端快速应答消息*/
case "ACKSetMessage":
var seq = msg.getAttribute('seq');
//获取应答消息序列ID
var ackid = this.getChildVal(msg, 'Return');//获取应答消息内容
switch(seq){
case '1'://1代表开关机操作
$("#power").attr("status",DeviceValue.TurnOnPreValue);//虚拟设备处理状态
if (DeviceValue.TurnOnPreValue == "on") {
initTurnOnUI();//开机界面初始化
}else if(VirDeviceValue.TurnOnPreValue =="off"){
initTurnOffUI();//关机界面初始化
resetDeviceValue();//重置状态
}
break;
default:
break;
}//end switch
}//end function
优化的用户终端和网络通讯机制,不再需要每次都等待远程的实体设备电器模块处理返回结果,而是在用户终端做了逻辑同步,通过虚拟设备来完全模拟实体设备的处理。因此,在用户终端就可以及时响应用户请求,在物理距离远、高并发的时候就不会造成服务器控制消息堆积,让服务器只处理有效的请求,缓解通讯压力,用户终端UI反馈处理则更为及时敏捷,有效提升人机交互体验的流畅性。
3 数据同步机制优化
要使得改进后的用户终端和网络通讯机制保障用户终端状态的正确性,前文提到的虚拟设备具有实体设备相同的电器处理逻辑还需要基于一种良好的数据同步方式才得以做出正确结果,这里以浏览器客户端为例,虚拟设备使用轻量级的jwchat聊天客户端与实体设备终端连接,数据同步的方式采用如下几种方案:
(1)在登录连接时同步
步骤1:在客户端创建一个会话连接,该连接实现与设备终端的通信:
con = new JSJaCHttpBindingConnection (oArg);//实例化JSJaC连接对象
步骤2:注册一个广播消息,通过presence广播可以返回实体设备端是否在线:
con.registerHandler('presence', handlePresence);//注册presence消息
步骤3:注册一个状态交换的消息,用于接收实体设备端状态:
con.registerHandler('message', handleMessage);//注册message消息
步骤4:如果接收到实体设备在线,虚拟设备可以发送一次同步状态请求:
var msg = ContrlMsg.getInit(from);
//from表示发送者,即用户终端
MsgManager.getChatManager().sendMessage(msg); //发送设备状态同步请求消息
步骤6:实体设备端接收到同步状态请求后,使用stateUpdateMessage消息回复给虚拟设备,由虚拟设备处理同步结果:
(2)在后台运行时同步
步骤1:在用户终端创建一个定时器
步骤2:轮询发送同步状态请求
步骤3:接收到的stateUpdateMessage消息交给虚拟设备处理同步结果
(3) 在交互完成时同步
步骤1:用户终端发起一次控制命令
步骤2:当发起控制命令后,由设备终端自动触发同步
步骤3:接收到的stateUpdateMessage消息交给虚拟设备处理同步结果
虚拟设备处理设备终端返回的statusUpdateMsg消息的消息设计如下:
parseMsg: function (from, msg) {
(下转第264页)
(上接第252页)
var keyWord = msg.getAttribute ('msgid');//获取消息类型
var device_jid = Strophe. getNodeFromJid(from);//获取消息发送设备账号
//判断消息类型
switch (keyWord) {
/*终端设备电器处理结果消息接收*/
case "statusUpdateMsg":
var TurnOn = this.getChildVal(msg, 'TurnOn');//开关机
//开关机处理
if (TurnOn) {
if (TurnOn == "on") {
DeviceValue.TurnOn = true;//标记开机状态initTurnOnUI();//开机界面初始化
} else if (TurnOn == "off") {
DeviceValue.TurnOn = false;//标记关机状态
initTurnOffUI();//关机界面初始化
resetBwashValue();//重置设备状态
}
}//end if
}//end switch
}//end function
通过这种数据同步机制,虚拟设备不仅可以高效的响应用户操作,又保障了与实体设备的正确性。
4 结束语
利用创新的用户终端虚设备来模拟真实设备控制逻辑,并基于该虚拟设备搭建的通讯交互机制,变被动为主动,对用户的操作合理处理、快速反馈,提高物联网设备远程控制交互流畅性,有利于物联网产品的应用普及。
参考文献:
[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高级编程,北京:清华大学出版社,2011.6
[4] 陶国荣.jQuery权威指南,北京:机械工业出版社,2011.1 82-123,159-193
[5] (澳)威利(Luke Welling),(澳)汤姆森(Laura Thomson).PHP和MySQL Web开发,北京:机械工业出版社,2009.4 117-154,200-234
[6] 列旭松,陈文.PHP核心技术与最佳实践,北京:机械工业出版社,2012.12
[7] 杨正洪.大数据、物联网和云计算之应用,北京:清华大