1. 协议简介
LwM2M是一套适用于物联网的协议。首先,EMQ君从整体上来带领大家来了解一下这个协议,看以下几个问题:
-
LwM2M这几个字母数字摆一起是什么意思?
-
LwM2M协议是由谁定义的?
-
LwM2M最适合给谁用?
LwM2M的全称是Lightweight Machine-To-Machine,它的名称里面包含了这么两个重要含义:1)这个协议是轻量级的;2)这个协议适用于物联网设备。
LwM2M协议是由OMA(Open Mobile Alliance)提出并定义的。OMA这个组织专注于移动通讯以及物联网产业的标准开发,给自己的定位是“规范大工厂”。随着“万物皆可联”概念的兴起,物联网终端数目急剧膨胀,也不再局限于智能手机这样的强力大块头。有很多设备,要么电量有限,要么内存有限,要么可使用带宽有限,之前那些适于强劲终端设备管理的协议对它们来说有些太重了难以承受,因此,为了照顾到这些资源有限的小个子设备们,LwM2M协议在2013年底诞生了。目前的成熟版本号依然是1.0,OMA的专家们正在努力整1.1版。
概括地说:LwM2M是适用于资源有限的终端设备管理的轻量级物联网协议。
2. 协议详细介绍
接着,我们从几个方面详细介绍LwM2M协议:
-
协议基本架构
-
协议定义的接口
-
协议的主要特点
先看一下LwM2M协议的基本架构。
协议最主要的实体包括LwM2M Server和LwM2M Client。
-
LwM2M Server作为服务器,部署在M2M服务供应商处或网络服务供应商处。
-
LwM2M Client作为客户端,部署在各个LwM2M设备上。
此外,根据需要还可以加入LwM2M引导服务器(Bootstrap Server)或智能卡(SmartCard),对客户端完成初始的引导。
在这些实体之间,协议定义了4个接口,来实现预期的功能。
-
引导接口(Bootstrap):
引导接口的目的是向LwM2M客户端提供注册到LwM2M服务器的必要信息,例如服务器访问信息、客户端支持的资源信息等。这些引导信息可以是由生产厂家预先存储在设备中,也可以通过上文提到的LwM2M引导服务器或者智能卡提前写入设备。
-
客户端注册接口(Client Registration)
注册接口的目的是使LwM2M客户端与LwM2M服务器互联,将LwM2M客户端的相关信息存储在LwM2M服务器上。只有完成注册后,LwM2M客户端与服务器端之间的通信与管理才成为可能。
-
设备管理与服务实现接口(Device Management and Service Enablement)
设备管理与服务实现接口的主控方为LwM2M服务器,服务器向客户端发送指令,客户端对指令做出回应并将回应消息发送给服务器。
-
信息上报接口(Information Reporting)
信息上报接口允许LwM2M服务器端向客户端订阅资源信息,客户端接收订阅后按照约定的模式向服务器端报告自己的资源变化情况。
LwM2M协议有以下几个突出特点:
-
协议基于REST架构。
-
协议的消息传递是通过CoAP协议来达成的。
-
协议定义了一个紧凑高效又不乏扩展性的数据模型。
考虑到与时俱进,实现简洁易懂的风格,LwM2M协议采用了REST。
但由于协议的服务对象是资源有限的终端设备,传统的HTTP数据传输方式显得过分笨重,难以支持受限资源,因此选择了具备REST风格的CoAP来完成消息和数据传递。一方面CoAP基于UDP,与TCP相比,在网络资源有限及无法确保设备始终在线的环境里更加游刃有余(出于安全性考虑,使用了基于UDP的DTLS安全传输协议)。另一方面CoAP本身的消息结构非常简单,报文压缩,主要部分可以做到特别小巧,无需占用过多资源。
出于类似的考虑,协议的数据结构必须足够简单。LwM2M协议定义了一个以资源(Resource)为基本单位的模型,每个资源可以携带数值,可以指向地址,以表示LwM2M客户端中每一项可用的信息。资源都存在于对象实例中(Object Instance),即对象(Object)的实例化。LwM2M协议预定义了8种对象(Object)来满足基本的需求,分别是:
Object | Object ID |
---|---|
Security(安全对象) | 0 |
Server(服务器对象) | 1 |
Access Control(访问控制对象) | 2 |
Device(设备对象) | 3 |
Connectivity Monitoring(连通性监控对象) | 4 |
Firmware(固件对象) | 5 |
Location(位置对象) | 6 |
Connectivity Statistics(连通性统计对象) | 7 |
考虑到扩展性,协议也允许根据实际需要自定义更多的对象。在这样的数据模型中,资源、对象实例以及对象都是用数字对应的ID来表示的,以实现最大程度的压缩,因此任何资源都可以用最多3级的简洁方式表示,例如/1/0/1表示服务器对象(Server Object)第1个实例中的服务器短ID资源。 在注册阶段,LwM2M客户端把携带了资源信息的对象实例传递给LwM2M服务器,以通知服务器自身设备所具备的能力。
3. 协议实现
LwM2M协议的主要开源实现有以下几个:
-
OMA LwM2M DevKit:提供可视化界面与LwM2M服务器交互。
-
Eclipse Leshan:基于Java,提供了LwM2M服务器与LwM2M客户端的实现。
-
Eclipse Wakaama:基于C,提供了LwM2M服务器与LwM2M客户端的实现。
-
AVSystem Anjay:基于C,提供了LwM2M客户端的实现。
此外,EMQ也实现了EMQ服务器上的LwM2M网关插件,实现了LwM2M协议的大部分功能,LwM2M设备可以注册至EMQ-LWM2M上,从而通过EMQ-LWM2M访问并管理设备,设备也可以向EMQ-LWM2M上报信息,并使用EMQ后端的服务来采集数据。
4. 参考资料
-
https://www.omaspecworks.org/what-is-oma-specworks/iot/lightweight-m2m-lwm2m/
-
https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/wiki/LwM2M-Open-Source-Code
转自:https://www.jianshu.com/p/11d34008f486