MQTT クライアントエラーコード
MQTTプロトコルを介して接続されたデバイスに対して、サーバーの一般的なエラーコードについて以下に説明します。
MQTT v3.1.1
MQTT v3.1.1プロトコルには10種類のリターンコードのみがあります。これらのリターンコードは意味が限定的であり、同じリターンコードの値でもメッセージによって異なる意味を持つ場合があります。
CONNACKパケット
CONNECTパケットには6種類のリターンコードのみ存在します。サーバーから返されるCONNACKパケットのリターンコードが0の場合のみ、接続が正常に確立されたことを示します。
値 | リターンコード | 説明 |
---|---|---|
0 | 0x00 Connection accepted | 接続が受理されました |
1 | 0x01 Connection rejected for unsupported protocol version | クライアントが要求したMQTTプロトコルのバージョンをサーバーがサポートしていません |
2 | 0x02 Connection rejected for rejected client ID | クライアントIDは正しいUTF-8文字列ですが、サーバーによって許可されていません |
3 | 0x03 Connection rejected for unavailable server | ネットワーク接続は確立されていますが、MQTTサービスが利用できません |
4 | 0x04 Connection rejected for damaged username or password | ユーザー名またはパスワードのデータ形式が不正です |
5 | 0x05 Connection rejected for unauthorized | クライアント接続が認可されていません |
6-255 | Reserved for future | 将来のために予約されています |
SUBACKパケット
SUBACKパケットには4種類のリターンコードのみ存在します。リターンコード0x80は失敗を示し、それ以外はサブスクライブ成功を示します。値0、1、2はサブスクライブされたメッセージの最大QoS値を表します。
値 | リターンコード | 説明 |
---|---|---|
0 | 0x00 success | 最大許可QoS 0のメッセージ |
1 | 0x01 success | 最大許可QoS 1のメッセージ |
2 | 0x02 success | 最大許可QoS 2のメッセージ |
128 | 0x80 Failure | 失敗 |
MQTT v5.0
MQTT v5.0プロトコルではリターンコードが理由コードに名称変更され、より多くの種類のエラーを示すために理由コードが追加されました。
以下の表は理由コードの値と、その理由コードを含むコントロールパケットの一覧です。
10進数 | 16進数 | 名前 | パケット |
---|---|---|---|
0 | 0x00 | Success | CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH |
0 | 0x00 | Granted QoS 0 | SUBACK |
1 | 0x01 | Granted QoS 1 | SUBACK |
2 | 0x02 | Granted QoS 2 | SUBACK |
4 | 0x04 | Disconnect with Will Message | DISCONNECT |
16 | 0x10 | No matching subscribers | PUBACK, PUBREC |
17 | 0x11 | No subscription existed | UNSUBACK |
24 | 0x18 | Continue authentication | AUTH |
25 | 0x19 | Re-authenticate | AUTH |
128 | 0x80 | Unspecified error | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
129 | 0x81 | Malformed Packet | CONNACK, DISCONNECT |
130 | 0x82 | Protocol Error | CONNACK, DISCONNECT |
131 | 0x83 | Implementation specific error | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
132 | 0x84 | Unsupported Protocol Version | CONNACK |
133 | 0x85 | Client Identifier not valid | CONNACK |
134 | 0x86 | Bad User Name or Password | CONNACK |
135 | 0x87 | Not authorized | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
136 | 0x88 | Server unavailable | CONNACK |
137 | 0x89 | Server busy | CONNACK, DISCONNECT |
138 | 0x8A | Banned | CONNACK |
139 | 0x8B | Server shutting down | DISCONNECT |
140 | 0x8C | Bad authentication method | CONNACK, DISCONNECT |
141 | 0x8D | Keep Alive timeout | DISCONNECT |
142 | 0x8E | Session taken over | DISCONNECT |
143 | 0x8F | Topic Filter invalid | SUBACK, UNSUBACK, DISCONNECT |
144 | 0x90 | Topic Name invalid | CONNACK, PUBACK, PUBREC, DISCONNECT |
145 | 0x91 | Packet Identifier in use | PUBACK, PUBREC, SUBACK, UNSUBACK |
146 | 0x92 | Packet Identifier not found | PUBREL, PUBCOMP |
147 | 0x93 | Receive Maximum exceeded | DISCONNECT |
148 | 0x94 | Topic Alias invalid | DISCONNECT |
149 | 0x95 | Packet too large | CONNACK, DISCONNECT |
150 | 0x96 | Message rate too high | DISCONNECT |
151 | 0x97 | Quota exceeded | CONNACK, PUBACK, PUBREC, SUBACK, DISCONNECT |
152 | 0x98 | Administrative action | DISCONNECT |
153 | 0x99 | Payload format invalid | PUBACK, PUBREC, DISCONNECT |
154 | 0x9A | Retain not supported | CONNACK, DISCONNECT |
155 | 0x9B | QoS not supported | CONNACK, DISCONNECT |
156 | 0x9C | Use another server | CONNACK, DISCONNECT |
157 | 0x9D | Server moved | CONNACK, DISCONNECT |
158 | 0x9E | Shared Subscription not supported | SUBACK, DISCONNECT |
159 | 0x9F | Connection rate exceeded | CONNACK, DISCONNECT |
160 | 0xA0 | Maximum connect time | DISCONNECT |
161 | 0xA1 | Subscription Identifiers not supported | SUBACK, DISCONNECT |
162 | 0xA2 | Wildcard Subscription not supported | SUBACK, DISCONNECT |
理由コードは、操作結果を示す1バイトの符号なし値です。理由コードが0x80未満の場合は操作が成功したことを示します。通常、操作で返される理由コードの値は0です。理由コードが0x80以上の場合は操作が失敗したことを示します。
CONNACK、PUBACK、PUBREC、PUBREL、PUBCOMP、DISCONNECT、AUTHコントロールパケットの理由コードは可変ヘッダーに格納されます。SUBACKおよびUNSUBACKパケットはペイロード内に理由コードのリストを含みます。