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

IoT Platform:CoAP 経由でデバイスを IoT Platform に接続する

最終更新日:Mar 27, 2025

デバイスを CoAP(Constrained Application Protocol)経由で IoT Platform に接続できます。CoAP は、NB-IoT デバイスなどの低電力でリソースに制約のあるデバイスに適しています。このトピックでは、CoAP 経由でデバイスを IoT Platform に接続する方法について説明します。また、DTLS(Datagram Transport Layer Security)または対称暗号化を使用してデバイスを検証する方法についても説明します。

手順

次の図は、NB-IoT デバイスを IoT Platform に接続する方法を示しています。coap
番号説明
デバイスの NB-IoT モジュールに IoT Platform SDK を統合します。デバイスプロバイダーは、IoT Platform コンソールでデバイス証明書を申請し、デバイス証明書をデバイスに書き込みます。
キャリアのモバイルネットワーク経由で NB-IoT デバイスを IoT Platform に接続します。デバイスが存在するリージョンで NB-IoT ネットワークが利用可能であることを確認するには、現地のキャリアにお問い合わせください。
キャリアの M2M(Machine-to-Machine)プラットフォームを使用して、データトラフィックと料金を管理します。M2M プラットフォーム機能は、キャリアによって提供されます。
データをリアルタイムで収集し、CoAP または UDP 経由で IoT Platform に送信します。IoT Platform を使用すると、何億ものデバイスと安全な接続を確立し、大量のデバイスデータを管理できます。IoT Platform では、複数の Alibaba Cloud サービスにデータを転送してさらに処理することもできます。これらのサービスには、ビッグデータサービス、データベースサービス、および Tablestore が含まれます。
IoT Platform によって提供されるデータアクセス関連の API 操作とメッセージプッシュサービスを使用して、データをビジネスサーバーに転送し、デバイスとアプリケーションを統合します。

対称暗号化を使用してデバイスを接続する

  1. CoAP サーバーに接続します。
    エンドポイント:CoAP 経由でデバイスをパブリックインスタンスまたは Enterprise Edition インスタンスのエンドポイントに接続する方法については、「インスタンスのエンドポイントを管理する
  2. デバイスを検証します。

    リクエストの例:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"a1NUjcV****","deviceName":"ff1a11e7c08d4b3db2b1500d8e0e55","clientId":"a1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55","sign":"F9FD53EE0CD010FCA40D14A9FE******", "seq":"10"}
    表 1. パラメーター
    パラメーター説明
    メソッドリクエストメソッド。有効な値:POST。
    URLURL。有効な値:/auth
    ホストエンドポイント。
    ポートポート番号。有効な値:5682
    Acceptデバイスが受信するデータの MIME(Multipurpose Internet Mail Extensions)タイプ。有効な値:application/json および application/cbor
    Content-Formatデバイスが IoT Platform に送信するデータの MIME タイプ。有効な値:application/json および application/cbor
    payload検証用の JSON 形式のデバイス情報。詳細については、次の表を参照してください。
    表 2. payload パラメーターのフィールド
    フィールド必須説明
    productKeyはいデバイス証明書の ProductKey。ProductKey は、IoT Platform がプロダクトに発行するグローバル一意識別子(GUID)です。IoT Platform コンソールにログインし、[デバイスの詳細] ページで ProductKey を表示できます。
    deviceNameはいデバイス証明書の DeviceName。DeviceName は、デバイスを登録するときにシステム定義またはカスタムで指定されたデバイス名です。IoT Platform コンソールにログインし、[デバイスの詳細] ページで DeviceName を表示できます。
    ackModeいいえ通信モード。有効な値:
    • 0:IoT Platform は応答データと ACK メッセージを同時に返します。
    • 1:IoT Platform は ACK メッセージを返し、次に応答データを返します。

    デフォルト値:0。

    signはい署名を計算します。

    signmethod(DeviceSecret,content) 関数を使用して署名を計算できます。次に、sign パラメーターに署名を指定できます。hmacmd5 および hmacsha1 署名アルゴリズムがサポートされています。

    必須パラメーター:

    • signmethod:署名アルゴリズム。signmethod パラメーターに指定した値と同じ値である必要があります。
    • DeviceSecret:デバイスの DeviceSecret。IoT Platform コンソールにログインし、[デバイスの詳細] ページで DeviceSecret を表示できます。
    • contentversionsignresources、および signmethod パラメーターを除く、IoT Platform に送信されるすべてのパラメーター。値は、パラメーターのアルファベット順に基づいて順番に連結されます。値を区切るために連結記号は使用されません。
      説明 署名の計算に使用するパラメーター値は、デバイス検証のリクエストで指定するパラメーター値と同じである必要があります。

    例:

    hmac_md5(mRPVdzSMu2nVBxzK77ERPIMxSYIv****, clientIda1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55deviceNameff1a11e7c08d4b3db2b1500d8e0e55productKeya1NUjcV****seq10timestamp1524448722000)
    signmethodいいえ署名アルゴリズム。有効な値:hmacmd5 および hmacsha1。デフォルト値:hmacmd5。
    clientIdはいクライアントの ID。クライアント ID は、1 ~ 64 文字の長さである必要があります。デバイスの MAC アドレスまたは SN を clientId パラメーターの値として指定することをお勧めします。
    timestampいいえタイムスタンプ。IoT Platform はタイムスタンプを検証しません。
    seqはい検証リクエストに含まれるシリアル番号。値は、デバイスによって生成される乱数です。

    レスポンスの例:

    {"random":"ad2b3a5eb51d6****","seqOffset":1,"token":"MZ8m37hp01w1SSqoDFzo001050****.ad2b"}
    表 3. レスポンスパラメーター
    パラメーター説明
    randomアップストリームデータとダウンストリームデータを暗号化するために使用されるキー。
    seqOffsetseq パラメーターの初期オフセット。
    tokenデバイスが検証された場合に返されるトークン。
  3. データを送信します。

    リクエストの例:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088, 2089
    表 4. パラメーター
    パラメーター必須説明
    メソッドはいリクエストメソッド。有効な値:POST。
    URLはいトピックの URL。形式:/topic/${topic}${topic} 変数を、データの送信先のトピックに置き換えます。
    ホストはいエンドポイント。
    ポートはいポート番号。有効な値:5682
    Acceptはいデバイスが受信するデータの MIME タイプ。有効な値:application/json および application/cbor
    Content-Formatはいアップストリームデータの MIME タイプ。IoT Platform はデータを検証しません。有効な値:application/json および application/cbor
    payloadはいAES(Advanced Encryption Standard)を使用して暗号化されたアップストリームデータ。
    説明 AES を使用してデータを暗号化する場合は、Transform パラメーターを AES/CBC/PKCS5Padding に設定し、IV パラメーターを 543yhjy97ae7fyfg に設定します。キーは、SHA-256 アルゴリズムを使用して生成されます。

    例:

    リクエストが deviceSecret=zPwChiLh0EaifR809D5Rc6LDIC6A**** の場合、レスポンスは random=8fe3c8d50e10**** です。
    1. deviceSecret パラメーターと random パラメーターの値を組み合わせて、${deviceSecret},${random} 形式の文字列を作成します。
      zPwChiLh0EaifR809D5Rc6LDIC6A****,8fe3c8d50e10****
    2. IoT Platform は、前の文字列を UTF-8 形式でエンコードし、エンコードされた文字列を SHA-256 アルゴリズムを使用して暗号化し、次に文字列を 16 進文字列に変換します。
      59ea5ac1cb092e5910c405821119959e5297516d185b71e344735cf3f268****
    3. IoT Platform は、subString(16,48) 関数を使用して、前の文字列から 32 文字のサブ文字列を抽出してキーを作成します。抽出は、文字列の 17 番目の文字から開始します。
      10c405821119959e5297516d185b71e3
    CustomOptionsはいカスタムオプション。有効な値:
    • 2088token パラメーター。デバイスが検証された後に返される token パラメーターの値を使用します。
      説明 デバイスがデータを送信するときは、token パラメーターが必要です。token の期限が切れている場合は、デバイスを再検証して別の token を取得する必要があります。
    • 2089seq パラメーター。値は、seqOffset パラメーターの値よりも大きい必要があります。値は、検証の有効期間中に一意の乱数である必要があります。各リクエストで seq パラメーターに基づいて増分される値を使用し、AES を使用して値を暗号化することをお勧めします。

    レスポンスの例:

    number:2090

    2090:IoT Platform でのメッセージの ID。

    token パラメーターと seq パラメーターは、CustomOptions パラメーターで指定できます。また、URL パラメーターで token パラメーターと seq パラメーターを指定することもできます。例:/topic/${topic}?token=xxxx&seq=xxxxx。CustomOptions パラメーターと URL パラメーターの両方で token パラメーターと seq パラメーターを指定した場合、CustomOptions パラメーターが使用されます。

    メッセージが IoT Platform に送信されると、リクエストが成功したことを示す状態コードと、IoT Platform によって生成されたメッセージ ID が返されます。

DTLS 経由でデバイスを IoT Platform に接続する

  1. CoAP サーバーに接続します。
    エンドポイント:CoAP 経由でデバイスをパブリックインスタンスまたは Enterprise Edition インスタンスのエンドポイントに接続する方法については、「インスタンスのエンドポイントを管理する
  2. DTLS セキュアチャネルのルート証明書をダウンロードします。その後、DTLS ライブラリを使用してデバイスを IoT Platform に接続できます。
    psk_id: "${authType}" + "|" + "${signMethod}" + "|" + "${productKey}" + "&" + "${deviceName}" + "timestamp"
    psk: signMethod(DeviceSecret, "${productKey}" + "&" + "${deviceName}" + "${timestamp}")
    表 5. パラメーター
    パラメーター必須説明
    authTypeはい検証タイプ。有効な値:devicename。
    signMethodはい署名アルゴリズム。有効な値:hmacmd5、hmacsha1、および hmacsha256。
    productKeyはいデバイスが属するプロダクトの ProductKey。
    deviceNameはいデバイスの DeviceName。
    DeviceSecretはいデバイスの DeviceSecret。
    timestampはいタイムスタンプ。
  3. デバイスを検証します。auth 操作を使用してデバイスを検証し、トークンを取得できます。デバイスがデータを送信するときは、token パラメーターが必要です。

    リクエストの例:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"ZG1EvTE****","deviceName":"NlwaSPXsCpTQuh8FxBGH","clientId":"mylight1000002","sign":"bccb3d2618afe74b3eab12b94042****"}

    Port パラメーターを除く必須パラメーターと payload パラメーターの詳細については、「対称暗号化を使用してデバイスを接続する」をご参照ください。

    レスポンスの例:

    response: {"token":"f13102810756432e85dfd351eeb4****"}
    表 7. レスポンスコード
    コードメッセージペイロード説明
    2.05コンテンツデバイスが検証に合格した場合のトークン。リクエストは有効です。
    4.00無効なリクエストペイロードなしリクエストのペイロードが無効です。
    4.01未承認ペイロードなしリクエストは承認されていません。
    4.03禁止ペイロードなしリクエストは禁止されています。
    4.04見つかりませんペイロードなしリクエストされた URL は存在しません。
    4.05許可されていないメソッドペイロードなしリクエストメソッドは許可されていません。
    4.06受け入れ不可ペイロードなしAccept パラメーターが無効です。
    4.15サポートされていない Content-Formatペイロードなしリクエストされたコンテンツが無効です。
    5.00内部サーバーエラーペイロードなしタイムアウトの問題または検証サーバーでエラーが発生したため、リクエストは失敗しました。
  4. データを送信します。
    デバイスは、カスタムトピックを使用して IoT Platform にデータを送信します。

    IoT Platform コンソールでカスタムトピックを作成できます。デバイスが属するプロダクトの [プロダクトの詳細] ページに移動し、[トピックカテゴリ] タブをクリックします。Publish 権限を持つトピックのみを使用してデータを送信できます。

    たとえば、トピックは /${YourProductKey}/${YourDeviceName}/pub 形式です。DeviceName が device で、ProductKey が a1GFjLP **** の場合、a1GFjLP****.coap.cn-shanghai.link.aliyuncs.com:5684/topic/a1GFjLP****/device/pub トピックを使用してデータを送信できます。

    リクエストの例:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088
    表 8. パラメーター
    パラメーター必須説明
    メソッドはいリクエストメソッド。有効な値:POST。
    URLはい/topic/${topic}${topic} 変数を、データの送信先のトピックに置き換えます。
    ホストはいエンドポイント。
    ポートはいポート番号。有効な値:5684
    Acceptはいデバイスが受信するデータの MIME タイプ。有効な値:application/json および application/cbor
    Content-Formatはいアップストリームデータの MIME タイプ。IoT Platform はデータを検証しません。有効な値:application/json および application/cbor
    CustomOptionsはい
    • number:値を 2088 に設定します。
    • token:検証サービスによって返される token
    説明 デバイスがデータを送信するときは、token パラメーターが必要です。token の期限が切れている場合は、デバイスを再検証して別の token を取得する必要があります。

CoAP 経由でデバイスを IoT Platform に接続する例については、「CoAP 経由でデバイスを IoT Platform に接続する」をご参照ください。