Emqx-lwm2m

来自资料库(何亚红)
跳转到导航 跳转到搜索

源代码

https://github.com/emqx/emqx-lwm2m

说明

emqx的LwM2M网关插件。此插件通常不需要从源代码安装,直接在EMQX的dashboard的插件页面启用emqx_lwm2m(也可使用源代码ReadMe.md中方式命令启用)。

LwM2MMQTT 的映射

对与MQTT的应用而言,最主要的部分便是主题(Topic)与负载消息(Payload)。

因此,对于LwM2M网关而言,所有的LwM2M操作均将转换到MQTT的主题与负载消息中。最终用户通过发布MQTT消息下发LwM2M命令、订阅MQTT消息获取LwM2M客户端的上行数据。

注意:下列说明中,{}中的内容为变量,会根据实际情况变化。

MQTT主题
主题 说明
lwm2m/{?EndpointName}/up/resp 用于LwM2M客户端的上行数据,其中{?EndpointName}为LwM2M客户端名称
lwm2m/{?EndpointName}/dn 用于向LwM2M客户端发送下行数据,其中{?EndpointName}为LwM2M客户端名称
lwm2m/{?EndpiontName}/up/notify 用于LwM2M客户端的通知数据,其中{?EndpointName}为LwM2M客户端名称

LwM2M网关转换的MQTT消息的负载消息部分通常采用Json格式。

注册/更新 (LwM2M客户端注册接口)

MQTT消息
主题 负载消息 说明
lwm2m/{?EndpointName}/up/resp
{
    "msgType": {?MsgType},
    "data": {
        "ep": {?EndpointName},
        "lt": {?LifeTime},
        "sms": {?MSISDN},
        "lwm2m": {?Lwm2mVersion},
        "b": {?Binding},
        "alternatePath": {?AlternatePath},
        "objectList": {?ObjectList}
    }
}
  • {?EndpointName}:字符串,LwM2M客户端名称
  • {?MsgType}:字符串,消息类型。register=注册,update=更新

下行命令与上行响应 (设备管理与服务启用接口)

MQTT消息
主题 负载消息 说明
lwm2m/{?EndpointName}/dn
{
    "reqID": {?ReqID},
    "msgType": {?MsgType},
    "data": {?Data}
}
此MQTT消息主要用于向LwM2M客户端下发命令。
  • {?EndpointName}:字符串,LwM2M客户端名称
  • {?ReqID}:整数,请求ID,与响应相匹配。
  • {?MsgType}:字符串,消息类型。read=读,discover=发现,write=写,write-attr=写属性,execute=执行,create=创建,delete=删除。
  • {?Data}:Json对象,具体内容取决与消息类型。
    • 当消息类型为read或discover时
      {
          "path": {?ResourcePath}
      }
      
      • {?ResourcePath}:字符串,资源路径。如:"3/0", "/3/0/0", "/3/0/6/0"
    • 当消息类型为write(写单次)时。
      {
          "path": {?ResourcePath},
          "type": {?ValueType},
          "value": {?Value}
      }
      
      • {?ValueType}:字符串,值类型。可为下列值之一:"Time", "String", "Integer", "Float", "Boolean", "Opaque", "Objlnk"。
      • {?Value}:值,取决于值类型。
    • 当消息类型为write(批量写)时。
      {
          "basePath": {?BasePath},
          "content": [
              {
                  "path": {?ResourcePath},
                  "type": {?ValueType},
                  "value": {?Value}
              }
          ]
      }
      
      • 最终路径是basePath与path的结合。content为json数组。
    • 当消息类型为write-attr时。
      {
          "path": {?ResourcePath},
          "pmin": {?PeriodMin},
          "pmax": {?PeriodMax},
          "gt": {?GreaterThan},
          "lt": {?LessThan},
          "st": {?Step}
      }
      
      • {?PeriodMin}:数值,LwM2M通知类属性-最小间隔。
      • {?PeriodMax}:数值,LwM2M通知类属性-最大间隔。
      • {?GreaterThan}:数值,LwM2M通知类属性-大于。
      • {?LessThan}:数值,LwM2M通知类属性-小于。
      • {?Step}:数值,LwM2M通知类属性-步进。
    • 当消息类型为execute时。
      {
          "path": {?ResourcePath},
          "args": {?Arguments}
      }
      
      • {?Arguments}:字符串,LwM2M执行参数。
    • 当消息类型为create时。
      {
          "basePath": "/{?ObjectID}",
          "content": [
              {
                  "path": {?ResourcePath},
                  "type": {?ValueType},
                  "value": {?Value}
              }
          ]
      }
      
      • {?ObjectID}:数值,对象ID。
    • 当消息类型为delete时。
      {
          "path": "{?ObjectID}/{?ObjectInstanceID}"
      }
      
      • {?ObjectInstanceID}:数值,对象实例ID。
lwm2m/{?EndpointName}/up/resp
{
    "reqID": {?ReqID},
    "imei": {?IMEI},
    "imsi": {?IMSI},
    "msgType": {?MsgType},
    "data": {?Data}
}
此MQTT消息主要用于LwM2M客户端的响应数据。
  • {?EndpointName}:字符串,LwM2M客户端名称
  • {?MsgType}:字符串,消息类型。read=读,discover=发现,write=写,write-attr=写属性,execute=执行,create=创建,delete=删除,ack=空响应。
  • {?Data}:Json对象,取决于消息类型。
    • 当消息类型为 write, write-attr, execute, create, delete或 read(当无内容时)时。
      {
            "code": {?StatusCode},
            "codeMsg": {?CodeMsg},
            "reqPath": {?RequestPath}
      }
      
      • {?StatusCode}:字符串,状态码。如 "2.01", "4.00"等
      • {?CodeMsg}:字符串,响应消息。如"content", "bad_request"等
      • {?RequestPath}:字符串,资源路径。
    • 当消息类型为discover时。
      {
          "code": {?StatusCode},
          "codeMsg": {?CodeMsg},
          "reqPath": {?RequestPath},
          "content": [
              {?Link},
              ...
          ]
      }
      
      • {?Link}:字符串,Link格式。如"</3>", "<3/0/1>;dim=8"等
    • 当消息类型为read(有响应内容)时。
      {
          "code": {?StatusCode},
          "codeMsg": {?CodeMsg},
          "content": {?Content}
      }
      
      • {?Content}:json对象数组。
        [
            {
                "path": {?ResourcePath},
                "value": {?Value}
            }
        ]
        
    • 当消息类型为ack时,无data字段。

订阅 (信息上报接口-订阅/取消订阅)

MQTT消息
主题 负载消息 说明
lwm2m/{?EndpointName}/dn
{
    "reqID": {?ReqID},
    "msgType": {?MsgType},
    "data": {
        "path": {?ResourcePath}
    }
}
此MQTT消息主要用于向LwM2M客户端下发订阅/取消订阅命令。
  • {?EndpointName}:字符串,LwM2M客户端名称
  • {?ReqID}:整数,请求ID,与响应相匹配。
  • {?MsgType}:字符串,消息类型。observe=订阅,cancel-observe=取消订阅
  • {?ResourcePath}:字符串,资源路径。
lwm2m/{?EndpointName}/up/resp
{
    "reqID": {?ReqID},
    "msgType": {?MsgType},
    "data": {
        "code": {?StatusCode},
        "codeMsg": {?CodeMsg},
        "reqPath": {?RequestPath},
        "content": [
            {
                "path": {?ResourcePath},
                "value": {?Value}
            }
        ]
    }
}
此MQTT消息主要用于LwM2M客户端的响应数据。
  • {?EndpointName}:字符串,LwM2M客户端名称
  • {?MsgType}:字符串,消息类型。observe=订阅,cancel-observe=取消订阅,ack=空响应。

通知 (信息上报接口 - 通知)

MQTT消息
主题 负载消息 说明
lwm2m/{?EndpiontName}/up/notify
{
    "reqID": {?ReqID},
    "msgType": {?MsgType},
    "seqNum": {?ObserveSeqNum},
    "data": {
        "code": {?StatusCode},
        "codeMsg": {?CodeMsg},
        "reqPath": {?RequestPath},
        "content": [
            {
                "path": {?ResourcePath},
                "value": {?Value}
            }
        ]
    }
}
此MQTT消息主要用于LwM2M客户端通知消息。
  • {?EndpointName}:字符串,LwM2M客户端名称
  • {?MsgType}:字符串,消息类型。一定为notify
  • {?ObserveSeqNum}:数值,CoAP消息的"Observe"值。
  • content字段同read响应的content字段。