MQTT Encoding and Decoding

From IoT with AME
Revision as of 08:26, 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
    • b7-4: MQTT Packet Typ, b3-0: Flags
    • 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

Text is encoded in UTF-8 without a terminating "0" byte, after the number of bytes in the text encoded as two bytes, MSB first.

Type Number Direction Flags Variable Header Payload
Msg ID
CONNECT 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
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 y message ID of PUBREC packet:word -
PUBCOMP 7 Both 0 y message ID of PUBREL packet:word -
SUBSCRIBE 8 Device to Broker 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 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