IoT Platform は、WebSocket 接続経由の Message Queuing Telemetry Transport(MQTT)をサポートしています。WebSocket プロトコルを使用して接続を確立し、WebSocket 接続経由で MQTT プロトコルを使用して通信できます。
背景情報
WebSocket には次の利点があります。- ブラウザベースのアプリケーションがサーバーへの持続的接続を確立できるようにします。
- ポート 443 を使用するため、メッセージがほとんどのファイアウォールを通過できます。
手順
- 証明書を準備します。
暗号化されていない接続には WebSocket を、暗号化された接続には WebSocket Secure を使用できます。Transport Layer Security(TLS)は、WebSocket Secure 接続を暗号化するために使用されます。WebSocket Secure 接続には ルート証明書 が必要です。これは TLS 接続にも必要です。
- クライアントを開発します。
IoT Platform は、Java 用 MQTT SDK を提供しています。SDK を使用してクライアントを開発できますが、SDK の URL を WebSocket で使用される URL に置き換える必要があります。他のプログラミング言語の MQTT SDK の入手方法、またはカスタム MQTT SDK の使用方法については、「ライブラリ」をご参照ください。MQTT SDK を使用する前に、手順を読み、WebSocket がサポートされているかどうかを確認してください。
- IoT Platform への接続を確立します。
TCP 接続経由の MQTT と比較して、WebSocket 接続経由の MQTT は、URL のプロトコルとポート番号が異なります。WebSocket 接続経由の MQTT は、securemode パラメーターを除いて、TCP 接続経由の MQTT と同じパラメーターを持ちます。WebSocket Secure を使用する場合は、このパラメーターを
2に設定します。WebSocket を使用する場合は、このパラメーターを3に設定します。- エンドポイント形式:
wss://${MQTT エンドポイント}またはws://${MQTT エンドポイント}。 パブリックインスタンスと Enterprise Edition インスタンスの MQTT エンドポイントについては、「インスタンスのエンドポイントを管理する」をご参照ください。 - ポート番号: 443
- 可変ヘッダー: Keep Alive。
CONNECT メッセージに Keep Alive パラメーターを含める必要があります。Keep Alive 期間の有効値: 30 ~ 1,200。単位: 秒。Keep Alive パラメーターの値がこの範囲内にない場合、IoT Platform は接続を拒否します。300 秒より大きい値を指定することをお勧めします。ネットワーク接続が不安定な場合は、Keep Alive 期間を大きな値に設定することをお勧めします。
Keep Alive 期間中に、デバイスは少なくとも 1 つのメッセージを送信する必要があります。メッセージは ping リクエストにすることができます。
IoT Platform が Keep Alive 期間内にメッセージを受信しない場合、デバイスは IoT Platform から切断されます。デバイスをサーバーに再接続する必要があります。
- MQTT Connect メッセージには、次のパラメーターが含まれています:
mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|" mqttUsername: deviceName+"&"+productKey mqttPassword: sign_hmac(deviceSecret,content)パラメーターの説明は次のとおりです。mqttClientId: 拡張パラメーターは縦棒(
| |)の間に配置されます。clientId: クライアントの ID。ビジネス要件に基づいてクライアント ID を指定できます。クライアント ID は 64 文字を超えることはできません。デバイスの MAC アドレスまたはシリアル番号(SN)をクライアント ID として使用することをお勧めします。
- securemode: セキュアモード。有効値: 2(WebSocket Secure)および 3(WebSocket)。
signmethod: 署名アルゴリズム。有効値: hmacmd5、hmacsha1、および hmacsha256。
timestamp: 現在の時刻(ミリ秒単位)。このパラメーターは省略可能です。
mqttPassword: パスワード。計算方法: サーバーに送信されるパラメーターをアルファベット順にソートし、指定された署名アルゴリズムに基づいてパラメーターを暗号化します。署名計算の例については、「MQTT 接続の署名を作成する例」をご参照ください。
content: サーバーに送信されるパラメーターで構成される連結文字列。これらのパラメーターには、productKey、deviceName、timestamp、および clientId が含まれます。パラメーターはアルファベット順にソートされ、デリミタなしで連結されます。
重要productKey と deviceName は必須です。timestamp と clientId は省略可能です。timestamp または clientId パラメーターを設定する場合は、パラメーター値は mqttClientId パラメーターに指定された値と同じである必要があります。
Link SDK を使用してデバイスを IoT Platform に接続することをお勧めします。接続用のカスタムデバイス SDK の開発方法については、「MQTT 接続の署名を作成する例」をご参照ください。
- エンドポイント形式: