MQTT Encoding and Decoding

From IoT with AME
Revision as of 08:39, 4 July 2017 by Ctreber (talk | contribs)
Jump to navigation Jump to search

MQTT

MQTT Encoding and Decoding

The MQTT protocol is very lightweight (does not use many bytes to get the message across).

Each MQTT packet consists of:

  • Fixed header
    • packet type:byte
      • b7-4: MQTT packet type
    • remaining length - this one is a bit tricky and consumes between 1 and 4 bytes. Encoding is least significant bits first in b6-0 while b7 is a "continuation bit" ('1' meaning "another byte follows").
  • Variable header (optional), depending on the package type
  • Payload (optional), depending on the package type

Type "Array" is binary data, after the number of bytes in the text encoded as two bytes, MSB first.

Type "String" is like "Array", text encoded in UTF-8 without a terminating "0" byte.

Type Number Direction Flags Variable Header Payload
Msg ID
CONNECT 1 (you may read this as "fixed QoS of 1") Device to Broker 0 -
  • "MQTT":String
  • protocol level (4):byte
  • connect flags:byte
    • b7: user
    • b6: password, b5: will retain
    • b4-3: will QoS
    • b2: will
    • b1: clean session)
  • keep alive:word
  • client ID:String
  • will topic:String (if present)
  • will payload:Array (if present)
  • user name:String (if present)
  • password:Array (if present)
CONNACK 2 Broker to Device 0 -
  • connect acknowledge flags:byte
    • b0: session present
  • connect return code:byte
    • 0: connection accepted
    • 1: unacceptable protocol version
    • 2: identifier rejected
    • 3: server unavailable
    • 4: bad user name or password
    • 5: not authorized
-
PUBLISH 3 Both
  • b3: DUP
  • b2-1: QoS
  • b0: RETAIN
QoS > 0 ? y
  • topic name:String
  • message ID:word (is QoS > 0)
payload:Array (optional)
PUBACK 4 Both 0 y
  • message ID of PUBLISH packet:word
-
PUBREC 5 Both 0 y
  • message ID of PUBLISH packet:word
-
PUBREL 6 Both 1 (you may read this as "fixed QoS of 1") y
  • message ID of PUBREC packet:word
-
PUBCOMP 7 Both 0 y
  • message ID of PUBREL packet:word
-
SUBSCRIBE 8 Device to Broker 1 (you may read this as "fixed QoS of 1") y
  • message ID:word
  • topic filter:String
  • requested QoS:byte (b1-0: QoS)

repeat sequence one or more times

SUBACK 9 Broker to Device 0 y
  • message ID of SUBSCRIBE packet:word
  • return code:byte
    • b7: failure
    • b1-0: maximum QoS

repeat sequence one or more times

UNSUBSCRIBE 10 Device to Broker 1 (you may read this as "fixed QoS of 1") y
  • message ID:word
  • topic filter:String

repeat sequence one or more times

UNSUBACK 11 Broker to Device 0 y
  • message ID of SUBSCRIBE packet:word
-
PINGREQ 12 Device to Broker 0 - -
PINGRESP 13 Broker to Device 0 - -
DISCONNECT 14 Device to Broker 0 - -

MQTT