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

| 番号 | 説明 |
| ① | デバイスの 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 操作とメッセージプッシュサービスを使用して、データをビジネスサーバーに転送し、デバイスとアプリケーションを統合します。 |
対称暗号化を使用してデバイスを接続する
- CoAP サーバーに接続します。エンドポイント:CoAP 経由でデバイスをパブリックインスタンスまたは Enterprise Edition インスタンスのエンドポイントに接続する方法については、「インスタンスのエンドポイントを管理する
- デバイスを検証します。
リクエストの例:
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。 URL URL。有効な値: /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 を表示できます。
- content:version、sign、resources、および 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 アップストリームデータとダウンストリームデータを暗号化するために使用されるキー。 seqOffset seq パラメーターの初期オフセット。 token デバイスが検証された場合に返されるトークン。 - データを送信します。
リクエストの例:
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****です。- deviceSecret パラメーターと random パラメーターの値を組み合わせて、
${deviceSecret},${random}形式の文字列を作成します。zPwChiLh0EaifR809D5Rc6LDIC6A****,8fe3c8d50e10**** - IoT Platform は、前の文字列を UTF-8 形式でエンコードし、エンコードされた文字列を SHA-256 アルゴリズムを使用して暗号化し、次に文字列を 16 進文字列に変換します。
59ea5ac1cb092e5910c405821119959e5297516d185b71e344735cf3f268**** - IoT Platform は、subString(16,48) 関数を使用して、前の文字列から 32 文字のサブ文字列を抽出してキーを作成します。抽出は、文字列の 17 番目の文字から開始します。
10c405821119959e5297516d185b71e3
CustomOptions はい カスタムオプション。有効な値: 2088:token パラメーター。デバイスが検証された後に返される token パラメーターの値を使用します。説明 デバイスがデータを送信するときは、token パラメーターが必要です。token の期限が切れている場合は、デバイスを再検証して別の token を取得する必要があります。2089:seq パラメーター。値は、seqOffset パラメーターの値よりも大きい必要があります。値は、検証の有効期間中に一意の乱数である必要があります。各リクエストで seq パラメーターに基づいて増分される値を使用し、AES を使用して値を暗号化することをお勧めします。
レスポンスの例:
number:20902090: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 が返されます。
- deviceSecret パラメーターと random パラメーターの値を組み合わせて、
DTLS 経由でデバイスを IoT Platform に接続する
- CoAP サーバーに接続します。エンドポイント:CoAP 経由でデバイスをパブリックインスタンスまたは Enterprise Edition インスタンスのエンドポイントに接続する方法については、「インスタンスのエンドポイントを管理する
- 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 はい タイムスタンプ。 - デバイスを検証します。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 内部サーバーエラー ペイロードなし タイムアウトの問題または検証サーバーでエラーが発生したため、リクエストは失敗しました。 - データを送信します。デバイスは、カスタムトピックを使用して 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 を取得する必要があります。 - number:値を
例
CoAP 経由でデバイスを IoT Platform に接続する例については、「CoAP 経由でデバイスを IoT Platform に接続する」をご参照ください。