すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:WebSocket 経由の MQTT 接続の確立

最終更新日:Mar 26, 2025

IoT Platform は、WebSocket 接続経由の Message Queuing Telemetry Transport(MQTT)をサポートしています。WebSocket プロトコルを使用して接続を確立し、WebSocket 接続経由で MQTT プロトコルを使用して通信できます。

背景情報

WebSocket には次の利点があります。
  • ブラウザベースのアプリケーションがサーバーへの持続的接続を確立できるようにします。
  • ポート 443 を使用するため、メッセージがほとんどのファイアウォールを通過できます。

手順

  1. 証明書を準備します。

    暗号化されていない接続には WebSocket を、暗号化された接続には WebSocket Secure を使用できます。Transport Layer Security(TLS)は、WebSocket Secure 接続を暗号化するために使用されます。WebSocket Secure 接続には ルート証明書 が必要です。これは TLS 接続にも必要です。

  2. クライアントを開発します。

    IoT Platform は、Java 用 MQTT SDK を提供しています。SDK を使用してクライアントを開発できますが、SDK の URL を WebSocket で使用される URL に置き換える必要があります。他のプログラミング言語の MQTT SDK の入手方法、またはカスタム MQTT SDK の使用方法については、「ライブラリ」をご参照ください。MQTT SDK を使用する前に、手順を読み、WebSocket がサポートされているかどうかを確認してください。

  3. 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: サーバーに送信されるパラメーターで構成される連結文字列。これらのパラメーターには、productKeydeviceNametimestamp、および clientId が含まれます。パラメーターはアルファベット順にソートされ、デリミタなしで連結されます。

        重要

        productKeydeviceName は必須です。timestampclientId は省略可能です。timestamp または clientId パラメーターを設定する場合は、パラメーター値は mqttClientId パラメーターに指定された値と同じである必要があります。

    この では、ID が iot-06****9 の Enterprise Edition インスタンス下のデバイスが使用されます。接続を確立する前に、次のパラメーターを指定する必要があります。
    clientId = 12345, deviceName = device, productKey = pk, timestamp = 789, signmethod=hmacsha1, deviceSecret=secret
    次の接続パラメーターを指定します。
    • WebSocket 接続を確立するには:
      • エンドポイント:
        ws://iot-06****9.mqtt.iothub.aliyuncs.com:443
      • 接続パラメーター:
        mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
        mqttUsername=device&pk
        mqttPasswrod=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString(); 
    • WebSocket Secure 接続を確立するには:
      • エンドポイント:
        wss://iot-06****9.mqtt.iothub.aliyuncs.com:443
      • 接続パラメーター:
        mqttclientId=12345|securemode=2,signmethod=hmacsha1,timestamp=789|
        mqttUsername=device&pk
        mqttPasswrod=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString();

    Link SDK を使用してデバイスを IoT Platform に接続することをお勧めします。接続用のカスタムデバイス SDK の開発方法については、「MQTT 接続の署名を作成する例」をご参照ください。

WebSocket 接続経由の MQTT を使用して IoT Platform にアクセスする