lwm2m设备上报给emqx的lwm2m网关

lwm2m设备注册和更新都可以,返回了2.04。但设备上报后返回了4.04,是因为Uri-Path的问题吗?


从图片中可以看到:

第一张图(设备上报失败):

  • Uri-Path: "dp"
  • 返回 4.04 错误

第二张图(update操作成功):

  • Uri-Path: ["rd", "2PxfRcjnS3f2KhtG_861234567_gwModel"]
  • 返回 ACK-2.04 成功

问题在于设备上报和注册/更新使用了不同的Uri-Path格式

  1. 注册/更新成功:使用正确的LWM2M标准路径 ["rd", "endpoint_name"]
  2. 数据上报失败:只使用了 "dp" 路径,这是不完整的路径

解决方案

正确的数据上报Uri-Path应该是:

["dp", "2PxfRcjnS3f2KhtG_861234567_gwModel", "ObjectID/InstanceID/ResourceID"]
  1. 检查设备端代码:确保数据上报时使用完整的Uri-Path
  • 不能只使用 "dp"
  • 需要包含endpoint名称和具体的Object路径
  1. 参考成功的update请求
  • endpoint名称:2PxfRcjnS3f2KhtG_861234567_gwModel
  • 确保数据上报也使用相同的endpoint标识
  1. 验证Object路径:确认要上报的数据对应的Object ID、Instance ID和Resource ID

14:07:02.854 [CoapServer(main)#2] DEBUG org.eclipse.californium.core.network.stack.ReliabilityLayer – Exchange[L7, 139.9.141.13:5683] send request
14:07:02.854 [CoapServer(main)#2] DEBUG org.eclipse.californium.core.network.stack.ReliabilityLayer – Exchange[L7, 139.9.141.13:5683] prepare retransmission for CON-POST MID= -1, Token=null, OptionSet={“Uri-Path”:[“dp”,“2PxfRcjnS3f2KhtG_861234567_gwModel”,“/3/0/0”], “Content-Format”:“application/senml+cbor”}, 81 A2 03 72 4C 65 73 68 61 6E 20 44 65 6D 6F 20 44 65 76 69 63 65 21 66 2F 33 2F 30 2F 30
14:07:02.854 [CoapServer(main)#2] DEBUG org.eclipse.californium.core.network.InMemoryMessageExchangeStore – [LWM2M Client-coap://0.0.0.0:0] Exchange[L7, 139.9.141.13:5683] added with generated mid KeyMID[139.9.141.13:5683-31286], CON-POST MID=31286, Token=null, OptionSet={“Uri-Path”:[“dp”,“2PxfRcjnS3f2KhtG_861234567_gwModel”,“/3/0/0”], “Content-Format”:“application/senml+cbor”}, 81 A2 03 72 4C 65 73 68 61 6E 20 44 65 6D 6F 20 44 65 76 69 63 65 21 66 2F 33 2F 30 2F 30
14:07:02.854 [CoapServer(main)#2] DEBUG org.eclipse.californium.core.network.InMemoryMessageExchangeStore – [LWM2M Client-coap://0.0.0.0:0] Exchange[L7, 139.9.141.13:5683] added with generated token KeyToken[139.9.141.13:5683-780DDA1C62E32B30], CON-POST MID=31286, Token=780DDA1C62E32B30, OptionSet={“Uri-Path”:[“dp”,“2PxfRcjnS3f2KhtG_861234567_gwModel”,“/3/0/0”], “Content-Format”:“application/senml+cbor”}, 81 A2 03 72 4C 65 73 68 61 6E 20 44 65 6D 6F 20 44 65 76 69 63 65 21 66 2F 33 2F 30 2F 30
14:07:02.854 [CoapServer(main)#2] DEBUG org.eclipse.californium.core.network.UdpMatcher – tracking open request [KeyMID[139.9.141.13:5683-31286], KeyToken[139.9.141.13:5683-780DDA1C62E32B30]]
14:07:02.855 [UDP-Sender–0.0.0.0:0-0] DEBUG org.eclipse.californium.elements.UDPConnector – UDPConnector (org.eclipse.californium.elements.UDPConnector$Sender@2060ce0e) sent 91 bytes to 139.9.141.13:5683
14:07:02.901 [UDP-Receiver–0.0.0.0:0-0] DEBUG org.eclipse.californium.elements.UDPConnector – UDPConnector (0.0.0.0:56840) received 12 bytes from 139.9.141.13:5683
14:07:02.901 [CoapServer(main)#2] DEBUG org.eclipse.californium.core.network.stack.BlockwiseLayer – [LWM2M Client-coap://0.0.0.0:0] received error ACK-4.04 MID=31286, Token=780DDA1C62E32B30, OptionSet={}, :

按照上述方法实现后,依然是4.04

404就是没找到 自己找找原因

Uri-path格式要求这块emqx有文档吗,麻烦发个链接呗