背景
随着物联网(IOT)
的发展,很多的智能设备进入了寻常人家,比如各类智能家电产品,比如智能洗衣机、智能冰箱、智能空调,这些智能产品为我们的生活提供了很多的便利和舒适的生活,并且解放了我们的双手。现在的我们只需在手机上下载产品的APP
(格力+、海尔智家、美的美居),只需在移动端动动手指,设备可以快速地通过网络的方式被控制。那APP端的控制命令是怎样到设备的呢?经过了怎样的转换呢?
一般来说,APP
端的控制信号会传递到自己的服务器,之后再通过服务器来进行命令转发;但是在前后端分离的大背景下,两者之间传递的都是Json
格式的数据,那如果直接将Json格式的命令直接给电控端,就会导致命令不匹配,因为电控板只是支持二进制控制,那这里就涉及到控制命令的转化了。所以我们设备控制的流程图就如下:
如图2 所示,在转化过程中,使用到了一种脚本语言:lua
。lua
在智能设备控制中起到了举足轻重的左右,所有的控制都需要经过它转换,那什么是lua
呢?
转换脚本—lua
简介
维基百科:Lua
是一个简洁、轻量、可扩展的脚本语言。Lua
有着相对简单的C
API
而很容易嵌入应用中。很多应用程序使用Lua
作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。
特点
Lua
因为其快速、可扩展的优势,被广泛应用于多个方面,其中主要的两个方面是游戏开发和 Web
应用脚本。
实例
这是一条智能空调设备的控制命令:
{"control":{"mode":"auto","applianceId":"178*****56","wind_swing_ud":"off","small_temperature":0,"mac_value":"88,77,22,24,34,bb","sensor_mode":1,"Oxygenerator_cmd":1,"wind_swing_lr":"off","temperature":26,"wind_speed":101,"power":"off","position_value":"01"}}
以上的控制命令属于脚本值,我们是很方便看懂的,但对于设备来说它是不会的,因此需要用编写的脚本对这些脚本值进行处理,转换成电控能识别的属性值。
AA 16 AC BA 00 00 00 00 00 21 02 01 01 06 00 06 88 77 22 24 34 BB 1F
这是一条下发的命令,对于设备响应之后,同理会对当前的设备的状态进行上报,上报的状态也需要进过lua脚本进行解析,解析之后发送到APP端进行状态同步;及时告诉用户此时设备的运行状态。因此整个设备的控制是双向的:控制下发和状态上报。