跳到主要内容

LwM2M 接入

资源受限和蜂窝设备群经常使用 OMA LwM2M,一种基于 CoAP 的紧凑设备管理标准。DeviceChain 直接终止 LwM2M 连接。设备通过由 DTLS 保护的 CoAP/UDP连接,其注册、遥测和固件映射到与其他传输相同的设备模型。

Sparkplug 接入向你的消息代理建立出站连接。LwM2M 则相反:设备向 DeviceChain 的安全 CoAP 端点建立入站连接,与标准 MQTT 路径的方式相同。

状态

LwM2M 接入作为可选服务提供,使用 CoAP/UDP 和 DTLS-PSK。它驱动明确的设备在线状态,将观测到的传感器对象接入为测量,并下发 Read/Write/Execute 命令,为休眠设备提供持久保留与唤醒后投递。Notify 解码只支持 SenML-JSON,因此仅支持 LwM2M 1.0 的客户端可以使用在线状态和命令,但在提供 TLV 解码前无法上报测量。GA 范围是 PSK 凭据;X.509 / 原始公钥和 Bootstrap 服务器仍在计划中。

提供的功能​

握手时认证​

设备提交 DTLS 预共享密钥(PSK)身份。在任何应用流量传输前,DeviceChain 将该身份解析为租户和设备。未知或格式错误的身份会导致握手失败,绝不会进入注册阶段。租户来自经过认证的身份,绝不来自设备在载荷中的声明。

为凭据启用自动注册后,已配置身份首次注册时会创建设备数据行。

网络地址变化的漫游客户端通过 DTLS Connection ID 跟踪,因此蜂窝设备在 IP 变化后仍保留会话。

注册生命周期驱动在线状态​

在线状态由协议明确确定,遵循 LwM2M 注册生命周期:

  • Register 将设备标记为在线。
  • 定期 Updates 保持会话存活。
  • Deregister 或注册有效期到期,将设备标记为离线。

与 Sparkplug-B 一样,LwM2M 是主动声明在线状态的传输:设备在线状态由协议明确确定,而非根据超时推断。

传感器对象转化为测量​

DeviceChain 对设备的传感器对象实例执行 Observe,将每条 Notify 解码为普通事件封装中的带类型测量。随后,LwM2M 遥测与其他读数一样进入历史记录、实时状态、仪表板和检测引擎。

  • 传感器对象的对象 ID 位于当前构建视为遥测的固定 IPSO Smart Object 传感器范围(3200–3441)。
  • 每次注册最多观测 32 个实例。
  • 范围和上限都不是可配置设置。
  • 管理对象(Security、Server、Device 及其他 OMA 对象)绝不被观测。
  • 超过 256 个数值的 Notify 会存为多个事件,每个最多 256 个值,而不是截断。按读数计数的租户接入上限仍然生效:如果 Notify 超过上限一次能够接受的数量,已获准的事件保留,其余被削减,并计入 ingest_samples_shed_total。

目前只解码 SenML-JSON 通知,需要事先考虑这一点:仅支持 LwM2M 1.0 的合规客户端无法产生这种通知。SenML 在 LwM2M 1.1 中引入,因此 1.0 客户端会正确地以 4.06 Not Acceptable 回应 Observe。这类设备仍可注册、驱动在线状态并接受命令,但完全不提供遥测数据。这是当前 LwM2M 支持中最大的功能缺口;后续提供旧 TLV 格式解码才能补齐。两种拒绝情况都会被计数,让运维人员能够观察到,而不是从数据缺失推断。

命令与固件​

平台命令转换为对设备资源执行的 LwM2M Read / Write / Execute 操作。

固件更新以相同方式驱动,是运维人员执行的一系列步骤,而不是单个平台操作。你自行针对标准 Firmware Update 对象发出 Writes 和 Execute,作为普通命令。DeviceChain 保持同一设备命令的入队顺序,因此固件写入和执行绝不会乱序。它不将更新建模为统一管理的任务。

设备响应缓慢、命令积压时,该设备后续命令会暂时搁置,稍后仍按顺序投递。一台设备缓慢不会阻塞其他设备的命令。

当前休眠设备的命令会被持久保留,在下次唤醒时投递(队列模式),而不是丢弃。保留有时间上限,命令不会无限等待。等待期间,命令记录两种状态之一,因此实际积压可能混合两者:

  • PARKED,而不是 SENT。
  • HELD:在线状态已经将设备标记为缺席,命令在尚未发布前就被保留。

两种情况下平台都仍持有命令,因此仍可取消。如果生存时间先到期,记录会说明命令从未到达设备,而不是责怪设备未响应。

相同流水线​

解码后的测量和在线状态变更经过普通的解码 → 解析 → 持久化路径,因此所有下游功能都像处理其他设备一样处理 LwM2M 设备。

租户与身份​

每台设备通过经过认证的 DTLS PSK 身份绑定到租户,连接时映射为 (tenant, externalId)。由于握手时就检查身份,设备绝不可能提交其他租户的流量。线上身份是不透明句柄,而不是可读的 tenant:device 字符串。

高可用性​

同一时间只有一个副本提供 CoAP 端点,由带隔离保护的所有权租约控制。这不是调优选项。设备向一个绑定的 UDP 套接字建立入站连接,如果第二个副本共享 Service,它就会静默收到并丢弃部分数据报。只有租约持有者绑定套接字,部署也拒绝渲染多个副本。

租约使替换安全且自动。替代 Pod 在取得租约前不绑定任何端点,因此两个进程不会同时绑定该端点。队列模式设备可能有意长时间保持静默,所以新领导者从持久化投影重建在线状态,而不是探测设备。未重新注册的设备只有在超过服务器最大注册有效期后才标记为离线。切换不会错误地把休眠设备标记为离线。

恢复是自动的,但不是即时的。需要替代 Pod 调度和绑定的时间,再加上最长 30 秒的租约隔离窗口。该窗口中的数据报会丢失,而 CoAP 可确认消息会重传,因此切换本身大多不会被察觉。

观测不会在切换后保留。 DTLS 会话随旧进程结束,新领导者启动时没有任何会话,因此只有设备主动重新注册后,才会再次发出 Observe。在线状态会重建,遥测不会。

数据中断时长只受每台设备自己的注册有效期限制。使用 LwM2M 默认值的设备,有效期为 86400 秒:完全健康的设备也可能整整一天没有数据。

要缩短中断,请缩短设备请求的注册有效期,代价是注册更新更频繁。应根据你能够接受重启后多长时间没有遥测数据来选择。

服务器的最大注册有效期(maxLifetimeSeconds)是所有注册有效期的上限。降低它不会缩短数据中断,因为设备不会获知这个截断,仍按自身计划更新。应将其设置得高于设备请求的最长有效期。请求更长有效期的设备可能在自身两次更新之间过期,因此不仅每次切换时会被标记为离线,正常运行时也会。

运行​

CoAP 端点由单个拥有所有权的副本提供。因此,在生产环境依赖 LwM2M 前应了解几个运维特性:切换的代价、为什么观测不会自行恢复,以及如何限制遥测中断。这些内容见**运行边缘服务**。