定义
LwM2M(Lightweight M2M)是 OMA 制定的轻量级 M2M 协议,基于 CoAP,专为物联网设备管理设计,支持设备注册、远程配置、OTA 升级等。适用于 NB-IoT 等低功耗场景。
对象模型与能力
LwM2M 采用对象-实例-资源的层级模型,预定义设备、连接、固件、位置等对象。支持 Bootstrap 引导注册、Read/Write/Execute 操作、Observe 订阅、FOTA 固件升级。基于 UDP/CoAP 的轻量传输,适合 NB-IoT、LoRa 等低带宽网络。设备管理平台需部署 LwM2M Server 或通过协议网关将 LwM2M 映射为平台内部模型,实现与 MQTT 等协议设备的统一管理。
与 DMP 的集成
平台通过 LwM2M 网关或原生支持接入 LwM2M 设备。设备注册后,平台可读取设备对象、下发配置、发起 OTA。OTA 采用 LwM2M 固件更新对象(/5),支持包下载、执行、更新结果上报。与 Device Access 设备接入、Thing Model 物模型配合,需将 LwM2M 对象映射为平台物模型属性与服务,实现多协议统一。
应用场景
适用于智能表计、烟感、井盖、资产追踪等 NB-IoT 设备;工业传感器、环境监测等低功耗场景。LwM2M 是 3GPP 推荐的物联网设备管理标准之一,与 NB-IoT 深度适配。
对象资源和自定义主题的差别
LwM2M 把设备能力编成对象、实例和资源。对象是一类功能,例如设备信息、连接监视或固件更新;实例是这一类里的第几个;资源才是可读写的具体项。读、写、执行和观察都针对这个路径,而不是针对一段自由格式的消息。设备先注册,告诉服务器自己支持哪些对象,服务器再按路径访问。这个模型和“双方口头约定一个主题字符串”不同:路径是编号化的,标准对象有公开的含义,厂商扩展对象必须另行登记,否则服务器不知道某个编号代表什么。传输多用 UDP 上的 CoAP,报文短,适合窄带和会休眠的终端,但也意味着会话和可靠送达要靠上层重试,不能假设底层一直保持一条长连接。观察资源时,服务器订阅的是某个资源的变化,不是把所有上报都收进一个不区分类型的管道。设备影子若要呈现这些资源,得先有一张编号到属性的对照,而不是把路径原样显示给业务系统。
窄带终端才划算的使用条件
它适合电量和带宽都紧、管理动作又以读数、改参数、做固件更新为主的终端。设备要能完成引导注册或持有服务器地址,醒来时办完注册、收发和确认,再回到休眠。平台侧的超时必须盖过省电周期,否则会把正常睡眠当成离线。固件更新对象有自己的状态机:下载链接、执行更新、回报结果,不能用一次普通写入代替整个状态机。对象定义在设备和服务器上要是同一版本,扩展资源的编号、类型和可执行操作要事先约定。需要频繁上下行、大块文件或复杂远程桌面时,这条轻量路径并不合适。和差分包配合时,仍要确认设备有足够空间存放补丁并按固件更新对象的步骤切换,不能只把包的地址写进一个自定义资源就认为升级协议已经完成。
编号和平台属性对不上
容易出错的是服务器按标准对象去读,设备却把同一含义放在厂商自定义编号里,结果一直读到空。实例从 0 还是从 1 起算不一致,会写到相邻的另一路传感器。把可执行资源当成可写资源去写入,设备拒绝后被平台记成离线。观察请求在设备每次醒来时不恢复,变化通知丢失,平台仍显示旧值。固件更新状态停在“下载中”,超时后服务器又发一次执行,设备和服务器的状态机错开。注册信息里的生存期比实际休眠短,服务器反复判定过期并要求重新注册,把电量耗在注册上。安全模式配成预共享密钥,却在文档里按证书去发放,设备无法完成引导。队列里的写操作不带版本,设备醒来后依次执行过期配置,把刚刚修好的参数又改回去。