IoT Platform は CoAP を介した接続をサポートしています。 CoAP は NB-IoT デバイスなど、リソースに制限のある低電力デバイスに適しています。 ここでは、CoAP を介して IoT Platform にデバイスを接続する方法と、対応している 2 種類の認証方法 (DTLS と対称暗号化) について説明します。

CoAP ベースの接続手順

次の図は、NB-IoT デバイスを IoT Platform に接続する手順を示しています。
手順は次のとおりです。
  1. Alibaba Cloud IoT Platform SDK をデバイスクライアントの NB-IoT モジュールに組み込みます。 具体的には、IoT Platform コンソールでプロダクトとデバイスを登録し、固有のデバイス証明書 (ProductKey、DeviceName、DeviceSecret の各コンポーネント) を取得してから、その証明書をデバイスにインストールします。
  2. 通信事業者の携帯電話回線を介した接続を確立して、NB-IoT デバイスが IoT Platform に接続できるようにします。 デバイスの設置されているリージョンで NB-IoT ネットワークを使用できることを地域の通信事業者に確認することを推奨します。
  3. デバイスを IoT Platform に接続した後、M2M (machine-to-machin) プラットフォームは、NB-IoT デバイスによって発生するデータトラフィックや料金を管理します。 M2M プラットフォームは指定の通信事業者によって運営されています。
  4. デバイスは、CoAP/UDP プロトコルを介して、データをリアルタイムで IoT Platform に送信します。 IoT Platform は、数億台規模の NB-IoT デバイスのデータを接続および管理できる安全なサービスです。 その後、IoT Platform のルールエンジンを介して、ビッグデータプロダクト、ApsaraDB for RDS、Table Store など、他の Alibaba Cloud プロダクトのインスタンスにデバイスデータを転送できます。
  5. API と、IoT Platform が提供するメッセージ送信サービスを使用し、サポートされているサービスのインスタンスへデータを転送して、すばやくデバイス資産と実際のアプリケーションを統合します。

DTLS 接続の確立

  1. CoAP サーバーに接続します。 エンドポイントアドレスは ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com:${port} です。

    注:

    • ${YourProductKey}: この変数を、デバイスの ProductKey 値に置き換えます。
    • ${port}: ポート番号。 DTLS 接続の場合、ポート番号を 5684 に設定します。
  2. ルート証明書をダウンロードします。
  3. デバイスを認証します。 auth を呼び出して、デバイスを認証し、デバイストークンを取得します。 トークン情報は、デバイスが IoT Platform にデータを送信する際に必要です。

    リクエストメッセージ:

    Post /auth
    Host: ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"ZG1EvTEa7NN","deviceName":"NlwaSPXsCpTQuh8FxBGH","clientId":"mylight1000002","sign":"bccb3d2618afe74b3eab12b94042f87b"}
    表 1. パラメーターの説明
    パラメーター 説明
    Method リクエストメソッド。 POST メソッドがサポートされています。
    URL /auth
    Host エンドポイントアドレス。 エンドポイントの形式は ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com です。 変数 ${YourProductKey} を、デバイスの ProductKey 値に置き換えます。
    Port 値を 5684 に設定します。
    Accept デバイスが受信するデータのエンコード形式。 現在、application/json と application/cbor がサポートされています。
    Content-Format デバイスが IoT Platform に送信するデータのエンコード形式。 現在、application/json と application/cbor がサポートされています。
    payload 認証用のデバイス情報 (JSON 形式)。 詳細については、「ペイロードパラメーター」をご参照ください。
    表 2. ペイロードパラメーター
    パラメーター 必須 説明
    productKey はい IoT Platform によってプロダクトに発行された一意の識別子。 この情報は、IoT Platform コンソールのデバイス詳細ページで取得できます。
    deviceName はい デバイスを登録したときに指定した、または IoT Platform によって生成されたデバイス名。 この情報は、IoT Platform コンソールのデバイス詳細ページで取得できます。
    ackMode いいえ 通信モード。 値のオプションは以下のとおりです。
    • 0: デバイスクライアントからリクエストを受信した後、サーバーはデータを処理し、その結果を確認応答 (ACK) で返します。
    • 1: クライアントからリクエストを受信した後、サーバーは直ちに ACK を返してからデータ処理を開始します。 データ処理が完了すると、サーバーは結果を返します。

    デフォルト値は 0 です。

    sign はい 署名。

    署名アルゴリズムは hmacmd5 (DeviceSecret, content) です。

    content の値は、サーバーに送信される必要があるすべてのパラメーター (versionsignresources、および signmethod を除く ) を、区切り文字なしでアルファベット順に並べ替え、連結して作成された文字列です。

    signmethod いいえ アルゴリズムの種類。 サポートされているタイプは hmacmd5 と hmacsha1 です。
    clientId はい デバイスクライアント ID。最大 64 文字の任意の文字列です。 デバイスの MAC アドレスまたは SN コードをクライアント ID として使用することを推奨します。
    timestamp いいえ タイムスタンプ。 現在、タイムスタンプは検証されていません。
    レスポンス例:
    response: {"token":"f13102810756432e85dfd351eeb41c04"}
    表 3. リターンコード
    コード メッセージ ペイロード 説明
    2.05 Content 認証が成功した場合、ペイロードにトークンが含まれています。 リクエストは成功しました。
    4.00 Bad Request ペイロードなし リクエスト内のペイロードが無効です。
    4.01 Unauthorized ペイロードなし リクエストが承認されていません。
    4.03 Forbidden ペイロードなし リクエストは禁止されています。
    4.04 Not Found ペイロードなし リクエストされたパスが存在しません。
    4.05 Method Not Allowed ペイロードなし リクエストメソッドがサポート対象外です。
    4.06 Not Acceptable ペイロードなし Accept パラメーターの値が、サポートされている形式ではありません。
    4.15 Unsupported Content-Format ペイロードなし Content-Format パラメーターの値が、サポートされている形式ではありません。
    5.00 Internal Server Error ペイロードなし 認証リクエストがタイムアウトしたか、認証サーバー上でエラーが発生しました。
  4. デバイスがデータを送信します。

    デバイスは、指定されたトピックにデータをパブリッシュします。 IoT Platform コンソールの、プロダクトの [トピックカテゴリ] タブページで、トピックカテゴリを作成することができます。

    現在、メッセージのパブリッシュ権限を持つトピックのみ、データのパブリッシュに使用できます (例: /${YourProductKey}/${YourDeviceName}/pub)。 具体的な例として、デバイス名が device、プロダクトキーが a1GFjLP3xxC の場合、そのデバイスはアドレス a1GFjLP3xxC.coap.cn-shanghai.link.aliyuncs.com:5684/topic/a1GFjLP3xxC/device/pub を使用してデータを送信することができます。

    リクエストメッセージ:
    POST /topic/${topic}
    Host: ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088(token)
    表 4. リクエストパラメーター
    パラメーター 必須 説明
    Method はい リクエストメソッド。 POST メソッドがサポートされています。
    URL はい /topic/${topic}: 変数 ${topic} を、データのパブリッシュに使用されるデバイストピックに置き換えます。
    Host はい エンドポイントアドレス。 形式は、${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com です。 ${YourProductKey} を、デバイスの ProductKey 値に置き換えます。
    Port はい 値を 5684 に設定します。
    Accept はい デバイスが受信するデータのエンコード形式。 現在、application/json と application/cbor がサポートされています。
    Content-Format はい デバイスが IoT Platform に送信するデータのエンコード形式。 サーバーはこのパラメーターを検証しません。 現在、application/json と application/cbor がサポートされています。
    CustomOptions はい
    • 数値: 2088。
    • token の値は、デバイス認証のために auth が呼び出された後に返されるトークン情報です。
    トークン情報は、デバイスがデータを送信するたびに必要です。 トークンを紛失したか、トークンが期限切れになった場合、デバイス認証リクエストをもう一度行って、新しいトークンを取得してください。

対称暗号化方式の使用

  1. CoAP サーバーに接続します。 エンドポイントアドレスは ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com:${port} です。

    注:

    • ${YourProductKey}: デバイスの ProductKey 値に置き換えます。
    • ${port} はポート番号です。 値を 5682 に設定します。
  2. デバイスを認証します。
    リクエストメッセージ:
    POST /auth
    Host: ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"a1NUjcVkHZS","deviceName":"ff1a11e7c08d4b3db2b1500d8e0e55","clientId":"a1NUjcVkHZS&ff1a11e7c08d4b3db2b1500d8e0e55","sign":"F9FD53EE0CD010FCA40D14A9FEAB81E0", "seq":"10"}

    パラメーター (Port パラメーターを除く。この方式で利用するポートは 5682) とペイロードの内容についての詳細は、「パラメーターの説明」をご参照ください。

    レスポンス例 :

    {"random":"ad2b3a5eb51d64f7","seqOffset":1,"token":"MZ8m37hp01w1SSqoDFzo0010500d00.ad2b"}
    表 5. レスポンスパラメーター
    パラメーター 説明
    random データ通信に使用される暗号化キー。
    seqOffset 認証シーケンスのオフセット。
    token デバイスの認証後に返されるトークン。
  3. デバイスがデータを送信します。

    リクエストメッセージ:

    POST /topic/${topic}
    Host: ${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088(token), 2089(seq)
    表 6. リクエストパラメーター
    パラメーター 必須 説明
    Method はい リクエストメソッド。 POST メソッドがサポートされています。
    URL はい 形式は、/topic/${topic} です。 変数 ${topic} を、データのパブリッシュで使用されるデバイストピックに置き換えます。
    Host はい エンドポイントアドレス。 形式は、${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com です。 変数 ${YourProductKey} を、デバイスの ProductKey 値に置き換えます。
    Port はい ポート番号。 値を 5682 に設定します。
    Accept はい デバイスが受信するデータのエンコード形式。 現在、application/json と application/cbor がサポートされています。
    Content-Format はい デバイスが送信するデータのエンコード形式。 現在、application/json と application/cbor がサポートされています。
    payload はい 送信される暗号化データ。 AES (Advanced Encryption Standard) アルゴリズムを使用してデータを暗号化します。
    CustomOptions はい オプションの値は 2088 または 2089 です。オプションの詳細を以下に説明します。
    • 2088 : トークンです。 デバイスが認証された後に返されるトークンの値です。
      トークン情報は、デバイスがデータを送信するたびに必要です。 トークンを紛失したか、トークンが期限切れになった場合、デバイス認証リクエストをもう一度行って、新しいトークンを取得してください。
    • 2089: シーケンスです。 デバイスの認証後に返される seqOffset 値よりも大きく、なおかつ一意の乱数でなければなりません。 値を AES で暗号化します。
    オプションのレスポンスメッセージ
    number:2090 (IoT Platform message ID)

    メッセージが IoT Platform に送信された後、ステータスコードとメッセージ ID が返されます。