このトピックでは、Link SDK for CのAPI操作を呼び出してHTTPSリクエストをIoT Platformに送信し、デバイスを動的に登録し、デバイスのアクティブ化に必要な検証情報を取得する方法について説明します。 この例では、という名前のサンプルコードファイルを示します。/demos/dynreg_basic_demo.cは 使用されます。
背景情報
HTTPSベースの動的登録の詳細については、「概要」をご参照ください。
手順1: クライアントインスタンスの初期化
ヘッダーファイルを追加します。
を含む# 「aiot_state_api.h」を含める # 「aiot_sysdep_api.h」を含む # 「aiot_dynreg_api.h」基になる依存関係を追加し、ログ出力機能を設定します。
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);aiot_dynreg_init関数を呼び出して、
dynregという名前のクライアントインスタンスを作成し、デフォルトパラメーターを設定します。dynreg_handle = aiot_dynreg_init(); if (dynreg_handle == NULL) { printf("aiot_dynreg_init failed\n"); return -1; }
ステップ2: 必要な機能の設定
aiot_dynreg_init関数を呼び出して、次の項目を設定します。
詳細については、「HTTPSベースの動的登録」をご参照ください。
接続パラメーターの設定
サンプルコード:
char * url = "iot-auth.cn-shanghai.aliyuncs.com"; …… char * product_key = "a18wP ******"; char * product_secret = "CpIlPVCXI7 ******"; char * device_name = "LightSwitch"; …… …… /* サーバーのエンドポイントを指定します。 */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_HOST, (void *)host); /* サーバーのポートを指定します。 */ aiot_dynreg_setopt(dynreg_handle、AIOT_DYNREGOPT_PORT、(void *)&port); /* デバイスが属するプロダクトのProductKeyを指定します。 */ aiot_dynreg_setopt(dynreg_handle、AIOT_DYNREGOPT_PRODUCT_KEY、(void *)product_key); /* デバイスが属する製品のProductSecretを指定します。 */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_SECRET, (void *)product_secret); /* デバイスのDeviceNameを指定します。 */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_DEVICE_NAME, (void *)device_name); /* 接続のセキュリティ資格情報を指定します。 */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_NETWORK_CRED, (void *)&cred); …… ……パラメータ:
パラメーター
例
説明
url
iot-auth.cn-shanghai.aliyuncs.com
HTTPSサーバーのエンドポイント。
デバイスを接続するエンドポイントを取得するために、サンプルコードの
cn-shanghaiをIoT Platformがアクティブ化されているリージョンのIDに置き換えます。IoT Platformコンソールの左上隅にリージョンを表示できます。 リージョンIDの詳細については、「」をご参照ください。サポートされているリージョン
この例では、中国 (上海) リージョンに存在するパブリックインスタンスが使用されています。
説明中国 (北京) および中国 (深セン) リージョンはサポートされていません。
product_key
a18wP ******
IoT Platformコンソールでプロダクトを作成したときに保存したProductKeyとProductSecret。 詳細については、「プロダクトの作成」をご参照ください。
product_secret
CpIlPVCXI7 ******
device_name
LightSwitch
デバイスのDeviceNameをします。 このパラメーターの値は、IoT Platformでデバイスを製品に追加したときに指定したDeviceNameと同じである必要があります。
IoT Platformは、デバイスがアクティベーション要求を開始するときにDeviceNameをチェックします。 デバイスから取得できる識別子をDeviceNameとして使用することを推奨します。 識別子は、デバイスのMACアドレス、International Mobile Equipment Identity (IMEI) 番号、またはシリアル番号 (SN) とすることができる。
重要このパラメーターの値は、IoT Platformコンソールでデバイスを追加したときに指定したDeviceNameと同じである必要があります。
メッセージコールバックの設定
メッセージコールバック関数を指定します。
サンプルコード:
int main(int argc, char * argv[]) { …… …… aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_RECV_HANDLER, (void *)demo_dynreg_recv_handler); aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_USERDATA, (void *)&demo_info); …… …… }パラメータ:
パラメーター
例
説明
AIOT_DYNREGOPT_RECV_HANDLER
demo_dynreg_recv_handler
メッセージコールバック関数。 メッセージが受信されると、コールバック関数が呼び出されて必要な操作が実行されます。
AIOT_DYNREGOPT_USERDATA
&demo_info
コンテキスト。
demo_dynregmq_recv_handler関数が呼び出されると、関数から取得した値が返されます。
メッセージコールバック関数を定義します。
void demo_dynreg_recv_handler(void * handle, const aiot_dynreg_recv_t * packet, void * userdata) { demo_info_t * demo_info = (demo_info_t *)userdata; switch (packet->type) { ケースAIOT_DYNREGRECV_STATUS_CODE: { demo_info->code = packet->data.status_code.code; } break; /* TODO: コールバックポイントのパケットパラメータの領域を保存する必要があります。 コールバックが実装された後、スペースは解放されます。 */ case AIOT_DYNREGRECV_DEVICE_INFO: { demo_info->device_secret = malloc(strlen(packet->data.de vice_info.device_secret) + 1); if (demo_info->device_secret != NULL) { memset(demo_info->device_secret, 0, strlen(packet->data.de vice_info.device_secret) + 1); memcpy(demo_info->device_secret, packet->data.de vice_info.device_secret, strlen(packet->data.de vice_info.device_secret); } } break; default: { } break; } }
ステップ3: リクエストを送信する
aiot_dynregmq_send_request操作を呼び出して、動的登録リクエストをサーバーに送信します。 パラメーターの設定方法については、「接続パラメーターの設定」をご参照ください。
/* 動的登録リクエストを送信します。 */
res = aiot_dynreg_send_request(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_send_request failed: -0x % 04X\n", -res);
return -1;
}ステップ4: 応答を受け取る
登録リクエストが送信されると、IoT Platformはレスポンスを返します。 デバイスはaiot_dynreg_recv操作を呼び出して応答データを受信し、メッセージコールバック関数を呼び出してデータを処理します。
res = aiot_dynreg_recv(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_recv failed: -0x % 04X\n", -res);
return -1;
} この例では、応答データが印刷される。 返されたデバイス検証情報をオンプレミスに保存するロジックを指定する必要があります。 検証情報は、デバイスがIoT Platformに接続するときに使用されます。
if (demo_info.device_secret != NULL) {
printf("device secret: % s\n", demo_info.device_secret);
無料 (demo_info.device_secret);
}ステップ5: プログラムを終了
aiot_dynreg_deinit関数を呼び出して、dynregクライアントインスタンスを削除し、関連するリソースをリリースします。
res = aiot_dynregmq_deinit(&dynregmq_handle);