HTTPS経由でデバイスをIoT Platformに接続できます。 このトピックでは、HTTPS経由でデバイスをIoT Platformに接続する方法について説明します。
使用法のメモと制限
- HTTPS経由でIoT Platformにデバイスを接続するには、 中国 (上海) リージョン。
- デバイスとIoT Platform間のHTTPSによる短期間の接続は、中国 (上海) リージョンでのみ確立できます。 デバイスがIoT Platformに接続または切断されたときに、IoT Platformコンソールで短期間のHTTPS接続を持つデバイスのステータス変更を表示できます。 Advanced Message Queuing Protocol (AMQP) サーバー側サブスクリプションを設定して、デバイスのステータス変更に関するメッセージを受信できます。
- HTTPS経由でIoT Platformに直接接続されたデバイスのみ接続できます。 ゲートウェイまたはサブデバイスをHTTPS経由でIoT Platformに接続することはできません。
- HTTPSによる接続は、デバイスがデータを送信するために使用されます。 デバイスは一度に最大128 KBのデータを送信できます。
- HTTPSトピックとMQTTトピックは同じ標準を共有します。 HTTPS経由でデバイスをIoT Platformに接続する場合、デバイスとIoT Platform間の通信にMQTTトピックを使用できます。 HTTPS経由でデバイスをIoT Platformに接続すると、デバイスは
${endpoint}/topic/${topic}
形式でデータをトピックに送信します。? query_String=xxx
形式はサポートされていません。 - POSTリクエストメソッドのみがサポートされています。
- デバイス認証中に返されたトークンは、指定された期間後に期限切れになります。 現在の有効期間は7日です。 期限切れのトークンを処理するロジックを指定してください。
処理中
デバイスを認証してデバイストークンを取得し、トークンを使用してデータを送信する必要があります。
- デバイスを認証して、デバイストークンを取得します。
認証リクエスト:
POST /auth HTTP/1.1 ホスト: ${YourEndpoint} Content-Type: application/json コンテンツ-長さ: 214 body: {"version":"default","clientId":"mylight1000002","signmethod":"hmacsha1","sign":"4870141D4067227128CBB4377906C3731CAC221C","productKey":"ZG1EvTE ****","deviceName":"NlwaSPXsCpTQuh8FxBGH","timestamp":"1501668289957"}
表1. 次の表にパラメーターを示します。 パラメーター 説明 メソッド リクエスト方式。 有効値: POST。 URL URL HTTPSのみがサポートされます。 有効値: /auth ホスト HTTP経由でデバイスを接続するパブリックインスタンスまたはEnterprise Editionインスタンスのエンドポイント。 詳細については、「インスタンスのエンドポイントの管理」をご参照ください。 コンテンツタイプ デバイスがIoT Platformに送信するアップストリームデータのMultipurpose Internet Mail Extensions (MIME) タイプ。 有効値: application/json。 別のMIMEタイプを指定すると、エラーが発生します。 コンテンツ長 HTTPメッセージ本文の長さ。 重要- HTTP/1.1以降を使用する場合、デフォルトでContent-Lengthパラメーターがリクエストに含まれます。 HTTP/1.0以前を使用している場合、このパラメーターはデフォルトではリクエストに含まれません。 HTTPプロトコルを使用してデバイスを認証する場合は、Content-Lengthパラメーターを指定する必要があります。
- Content-Lengthの値は、メッセージ本文の長さと同じである必要があります。 それ以外の場合、メッセージ本文は解析できず、認証は失敗します。
ボディ JSON形式の認証用のデバイス情報。 詳細については、「メッセージ本文のパラメーター」をご参照ください。 表2. メッセージ本文のパラメーターを パラメーター 必須 説明 productKey 必須 デバイスが属するプロダクトのProductKey。 IoT Platformコンソールにログインし、インスタンスの [デバイスの詳細] ページでProductKeyを取得できます。 deviceName 必須 デバイスのDeviceName。 IoT Platformコンソールにログインし、インスタンスの [デバイスの詳細] ページでDeviceNameを取得できます。 clientId 必須 クライアントのID。 クライアントIDの長さは1 ~ 64文字である必要があります。 clientIdパラメーターの値として、デバイスのMACアドレスまたはSNを使用することを推奨します。 timestamp 任意 タイムスタンプ。 リクエストは、タイムスタンプが生成されてから15分間有効です。 タイムスタンプは数値形式で、値は1970年1月1日木曜日00:00:00から経過したミリ秒数を表します。 サイン 必須 署名。 署名は、
hmacmd5(deviceSecret,content)
関数を使用して計算されます。contentの値は、version、sign、およびsignmethodパラメーターを除く、デバイスがIoT Platformに送信するすべてのパラメーターを含む文字列です。 送信されたパラメータはアルファベット順にソートされ、連結記号なしで連結されます。
例:
clientIdパラメーターが127.0.0.1に設定されている場合、deviceNameパラメーターはhttp_testに設定され、productKeyパラメーターはa1FHTWxQ **** に設定され、timestampパラメーターは1567003778853に設定され、signmethodパラメーターはhmacmd5に設定され、deviceSecretパラメーターは89VTJylyMRFuy2T3sywQGbm5Hmk1 **** に設定されます。
hmacmd5("89VTJylyMRFuy2T3sywQGbm5Hmk1 ****","clientId127.0.0.1deviceNamehttp_testproductKeya1FHTWxQ **** timestamp1567003778853").toHexString();
toHexString()
メソッドは、バイナリ結果を形成する4ビットのバイナリ数字のセットを16進文字列に変換するために使用されます。 16進文字列は大文字と小文字を区別しません。 たとえば、10進数形式の結果を含む配列は、[60 68 -67 -7 -17 99 30 69 117 -54 -58 -58 103 -23 113 71] です。 配列は次の16進文字列に変換されます。signmethod 任意 署名アルゴリズム。 有効な値: hmacmd5およびhmacsha1。 デフォルト値: hmacmd5。
バージョン 任意 バージョン番号。 デフォルト値:default。 レスポンス例:
ボディ: { "code": 0, "message": "success", "info": { "token": "6944e5bfb92e4d4ea3918d1eda39 ****" } }
説明- 返されたトークンをデバイスにキャッシュする必要があります。
- トークンは、デバイスがIoT Platformにデータを送信するたびに必要です。 トークンの有効期限が切れた場合、デバイスを再認証して別のトークンを取得する必要があります。
表3. エラーコード コード メッセージ 説明 10000 common error 不明なエラーが発生した場合に返されるエラーメッセージ。 10001 param error 1つ以上のパラメーターが無効な場合に返されるエラーメッセージ。 20000 auth check error デバイスの認証に失敗した場合に返されるエラーメッセージ。 20004 update session error デバイスの更新に失敗した場合に返されるエラーメッセージ。 40000 request too many IoT Platformが処理できるリクエストの数がスロットリングしきい値を超えた場合に返されるエラーメッセージ。 - データを送信します。
デバイスは、デバイスが発行権限を持つトピックにのみデータを送信します。 カスタムトピックを使用できます。
たとえば、トピックは
/${YourProductKey}/${YourDeviceName}/pub
、DeviceNameはdevice123、ProductKeyはa1GFjLP **** です。https://iot-as-http.cn-shanghai.aliyuncs.com/topic/a1GFjLP ****/device123/pub
のURLを使用してデータを送信できます。リクエストの例
POST /topic/${topic} HTTP/1.1 ホスト: ${YourEndpoint} password :${ token} Content-Type: application/octet-stream コンテンツ-長さ: 53 body: ${your_data}
表4. パラメーター パラメーター 説明 メソッド リクエスト方式。 有効値: POST。 URL /topic/${topic}
です。${topic}
変数を、データの送信先のトピックに置き換えます。 HTTPSのみがサポートされます。ホスト エンドポイント。 パスワード このパラメーターはリクエストヘッダーに含まれています。 このパラメーターを、auth操作を呼び出してデバイスを認証した後に返されるトークンに設定します。 コンテンツタイプ デバイスがIoT Platformに送信するアップストリームデータのMIMEタイプ。 有効値: application/octet-stream。 別のMIMEタイプを指定すると、エラーが発生します。 コンテンツ長 HTTPメッセージ本文の長さ。 ボディ 指定されたトピックに送信されるデータ。 データ形式の詳細については、「トピック」をご参照ください。. レスポンス例:
ボディ: { "code": 0, "message": "success", "info": { "messageId": 892687 **** 47040 } }
表5. エラーコード コード メッセージ 説明 10000 common error 不明なエラーが発生した場合に返されるエラーメッセージ。 10001 param error 1つ以上のパラメーターが無効な場合に返されるエラーメッセージ。 20001 token is expired トークンの有効期限が切れた場合に返されるエラーメッセージ。 auth操作を呼び出して、デバイスを再認証し、新しいトークンを取得する必要があります。 20002 token is null リクエストヘッダーにトークンが指定されていない場合に返されるエラーメッセージ。 20003 check token error IoT Platformがトークンに基づいてデバイスID情報を取得できなかった場合に返されるエラーメッセージ。 auth操作を呼び出して、デバイスを再認証し、新しいトークンを取得する必要があります。 30001 publish message error デバイスがデータの送信に失敗した場合に返されるエラーメッセージ。 40000 request too many IoT Platformが処理できるリクエストの数がスロットリングしきい値を超えた場合に返されるエラーメッセージ。
サンプル値
HTTPクライアントをIoT Platformに接続する方法については、「HTTPを使用したIoT Platformへのアクセス」をご参照ください。