[toc]
物联网协议
可以看出lwm2m的实现:最下层是基于UDP协议的CoAP实现,中间是基于CoAP的LWM2M协议实现,其中LwM2M报文承载在CoAP报文的payload之中
基于coap协议:coap是一种基于rest的占用内存和计算很少的应用层协议,
lwm2m:轻量级的物联网协议
连接车辆
这个就是为啥我要了解这个协议,为了能够让无状态的设备来与平台进行控制类型的交互。
基础结构LWM2M
- LWM2M server
-
LWM2m client
功能分类:
-
Bootstrap
引导接口:向客户端提供注册到服务器的必要信息,如访问信息,客户端支持的资源信息等,一般引导信息是厂家预先存储的。 -
register
客户端注册: 让客户端和服务能互联,将客户端相关信息保存再服务器上,只有完成注册后,客户端与服务器之间的通信和管理才能使用。 -
information reporting
信息上报接口允许LwM2M服务器端向客户端订阅资源信息,客户端接收订阅后按照约定的模式向服务器端报告自己的资源变化情况。 -
Device Management and Service Enablement
服务器向客户端发送指令,客户端做应答会响应。
实现
开源的协议实现:
– OMA LwM2M DevKit:提供可视化界面与LwM2M服务器交互。
– Eclipse Leshan:基于Java,提供了LwM2M服务器与LwM2M客户端的实现。
– Eclipse Wakaama:基于C,提供了LwM2M服务器与LwM2M客户端的实现。
– AVSystem Anjay:基于C,提供了LwM2M客户端的实现。
- 本项目实现:https://projects.eclipse.org/projects/iot.leshan
-
每个请求都会先根据不同的请求方式。put,get,post等进到不同的handler里面去
-
// 获取uri String URI = coapExchange.getRequestOptions().getUriPathString(); //获取参数?号的的 例如?jia=diao&jun=ok,这个list保持的就是俩值jia=diao,自己还要切一下 List<String> uriQueries = coapExchange.advanced().getRequest().getOptions().getUriQuery(); //这个是获取path的 例如 /rb/jia/jun 它便获取了三个 rb,jia,jun List<String> uriQueries = coapExchange.advanced().getRequest().getOptions().getUriPath();
register
实现其注册用途:
- 起一个server,来监听其请求。
- 注册一共分三个接口
如上图register 分为三个接口 - register:/rb?ep=注册设备传递ep这个是id,lt是生命周期,也就是连接时间,平台可以自己根据此来管理通信时间
- update:更新,主要是上报lt来更新生命周期
- deregister:去注册,主要是告诉平台断开连接,取消订阅信息。
– 上图是发送接口及返回数据,三个接口都要带id也就是ep,但是携带的方式不同,假如id为1111
regist是post请求,ep是在参数中传递的(/ed?ep=1111),记住只有register的才要求要有返回值携带location: /rd/ep 也就是/rd/1111 .返回码是2.01
update这个有些特殊可能是post或者put,这个没有定论的,虽然图上是post,但实际很多是put的请求。这个ep是在路径中的(/rd/ep)也就是/rd/1111 返回码是2.04
deregister 是delete请求,参数也是/rd/1111 返回码是2.02
实现就很简单了
获取rui 根据路径是/rd/ 还是/rd/ep 来区分是注册还是更新
根据是delete来区分deregister。
区分了不同的请求就可以通过平台自己保存的id来进行下一步操作,更新lt时间,或者下发啥的。
参考文档:
官方文档:里面很详细:OMA-TS-LightweightM2M-V1_0-20170208-A
发表回复