Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

OM2M/one/MQTT Binding

The Eclipse OM2M MQTT Binding implements the TS-0010 MQTT Protocol Binding defined by the oneM2M consortium. The document is available on the oneM2M website. The Eclipse Paho library has been used as a MQTT Client for the Eclipse OM2M MQTT Binding.

Configuration

Broker

The OM2M MQTT Binding does NOT include the MQTT Broker. The use of the MQTT binding requires to use an external MQTT Broker. For instance, the Eclipse Mosquitto broker can be used (available at: Mosquitto Website).

Constants

The following constants can be specified in the OM2M product (org.eclipse.om2m.site.*-cse projects) or directly in the config.ini file in the compiled product (under the configuration folder).

Constant value Usage Default value
org.eclipse.om2m.mqtt.ip Broker Host name or IP localhost
org.eclipse.om2m.mqtt.port Broker Port 1883
org.eclipse.om2m.mqtt.username Broker username (optional) null
org.eclipse.om2m.mqtt.password Broker password (optional) null
org.eclipse.om2m.mqtt.timeout Binding request timeout for the client (second) 20

Start the binding

At first, the binding is not started in the org.eclipse.om2m.site.in-cse product. To start it, one must retrieve the bundleId of the MQTT binding plugin using the ss mqtt and then start it using the command start <bundleId>. Otherwise, it can be set as auto-start into the OM2M product.

oneM2M Requests

oneM2M defines a request/response paradigm to interact with the CSE Entities. Since the MQTT protocol uses a different paradigm (publish/subscribe), an adaptation has to be done.

To achieve this communication via the MQTT Protocol, a request topic has been defined where the client will be able to send the serialized request. Then the response will be posted on a predefined topic where the client will retrieve the serialized response. All information concerning the authentification, the operation, the response status and other parameters will be held into the serialized request/response.

MQTT Topic

The oneM2M technical specification provides the topics that has to be used for MQTT communication. The serialized request has to be pushed on a specific request topic and the response will be given to a different predefined topic.

Request topic

The request topic is formulated as the following:

/oneM2M/req/<originator>/<target-id>/<serialization-format>

The <target-id> shall be the CSE-ID that is listening on the broker (for instance in-cse) and the <originator> correspond to the originator provided into the X-M2M-Origin header.

Then the last information of the topic is serialization format of the request. The <serialization-format> parameter can have 2 values:

  • xml for XML format
  • json for JSON format

Response topic

The response topic is constructed based on the request topic.

/oneM2M/resp/<target-id>/<originator>/<serialization-format>

MQTT Payload

The payload published into the topic is the serialized RequestPrimitive or ResponsePrimitive. The RequestPrimitive correspond to all information needed to formulate a oneM2M request and receive the response into the ResponsePrimitive.

The main parameters are:

Parameter short name Parameter name Usage
fr From Originator of the request
to To Destination of the request
op Operation The operation to perform (CREATE, RETRIEVE, ...)
rqi Request Identifier Correlation ID for the request and response
pc Primitive Content Content of the request (e.g., ressource to be created)
ty Type The type of the resource to be created
rsc Response Status Code  The oneM2M response status code


The Operation values are:

Operation Value
CREATE  1
RETRIEVE  2
UPDATE 3
DELETE 4
NOTIFY 5
DISCOVERY 6

Retrieve the CSE Base

The aim of this request is to retrieve the CSE Base resource of the in-cse. The request topic is: /oneM2M/req/AE_123/in-cse/json.

{
   "m2m:rqp": {
      "fr": "AE_123",
      "to": "/in-cse",
      "op": 2,
      "rqi": 123456
   }
}

The response will be published on the topic: /oneM2M/resp/in-cse/AE_123/json. Response payload is:

{
   "m2m:rsp" : {
      "rsc" : 2000,
      "rqi" : "1234",
      "pc" : {
         "m2m:cb" : [ {
            "rn" : "in-name",
            "ty" : 5,
            "ri" : "/in-cse",
            "ct" : "20161116T111621",
            "lt" : "20161116T111621",
            "acpi" : [ "/in-cse/acp-95896161" ],
            "cst" : 1,
            "csi" : "in-cse",
            "srt" : [ 1, 2, 3, 4, 5, 9, 14, 15, 16, 17, 23 ],
            "poa" : [ "http://127.0.0.1:8080/" ]
         } ]
      },
      "to" : "AE_123",
      "fr" : "/in-cse"
   }
}

Create container

The aim of the request is to create a container named cntName. The Request topic is: /oneM2M/req/AE_123/in-cse/json.

Payload:

{
    "m2m:rqp" : {
        "fr" : "AE_123",
        "to" : "/in-cse/in-name/AE_123",
        "op" : 1,
        "rqi": 123456,
        "pc": {
            "m2m:cnt" : {
                "rn": "cntName"
            }
        },
        "ty": 3
    }
}

The response will be pushed on the topic: /oneM2M/resp/in-cse/AE_123/json. The payload would be:

{
   "m2m:rsp" : {
      "rsc" : 2001,
      "rqi" : "123456",
      "pc" : {
         "m2m:cnt" : [ {
            "rn" : "cntName",
            "ty" : 3,
            "ri" : "/in-cse/cnt-114901069",
            "pi" : "/in-cse",
            "ct" : "20161116T111750",
            "lt" : "20161116T111750",
            "acpi" : [ "/in-cse/acp-95896161" ],
            "et" : "20171116T111750",
            "st" : 0,
            "mni" : 10,
            "mbs" : 10000,
            "mia" : 0,
            "cni" : 0,
            "cbs" : 0,
            "ol" : "/in-cse/in-name/AE_123/cntName/ol",
            "la" : "/in-cse/in-name/AE_123/cntName/la"
         } ]
      },
      "to" : "AE_1234",
      "fr" : "/in-cse"
}

Back to the top