このトピックでは、Link SDK for CのAPI操作を呼び出して、デバイスタグをIoT Platformに送信したり、デバイスタグを削除したりする方法について説明します。 この例では、という名前のサンプルコードファイルです。/demos/devinfo_posix_demo.cが使用されます。
背景情報
ステップ1: クライアントの初期化
ヘッダーファイルを追加します。
を含む…… …… # 「aiot_devinfo_api.h」基になる依存関係を追加し、ログ出力機能を設定します。
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);aiot_devinfo_init操作を呼び出して、
Devinfoという名前のクライアントインスタンスを作成し、デフォルトパラメーターを初期化します。devinfo_handle = aiot_devinfo_init(); if (devinfo_handle == NULL) { demo_mqtt_stop(&mqtt_handle); printf("aiot_devinfo_init failed\n"); return -1; }
ステップ2: 機能の設定
aiot_devinfo_setopt操作を呼び出して、次の機能を設定します。
MQTT接続ハンドルに関連付けます。
重要デバイスタグ固有のパラメーターを設定する前に、デバイス検証情報が指定されていることを確認してください。 詳細については、「例」をご参照ください。
サンプルコード:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, mqtt_handle);パラメーター:
パラメーター
例
説明
AIOT_DEVINFOOPT_MQTT_HANDLE
mqtt_handle
デバイスタグ。
メッセージコールバック関数の設定
サンプルコード:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_RECV_HANDLER, (void *)demo_devinfo_recv_handler);パラメーター:
パラメーター
例
説明
AIOT_DEVINFOOPT_RECV_HANDLER
demo_devinfo_recv_handler
デバイスタグ固有のメッセージが受信されると、コールバック関数が呼び出される。
ステータスモニタリングの設定
ステータスを監視するコールバック関数を定義します。
コールバック関数の処理ロジックを指定する場合は、次の項目に注意してください。
タグの送信に失敗した場合、次のイベントタイプが返されます。
イベントタイプ
説明
AIOT_DEVINFOEVT_INVALID_DEVINFO
レスポンスのデバイス情報が無効です。 ProductKeyとDeviceNameは取得できません。
AIOT_DEVINFOEVT_INVALID_RESPONSE
レスポンスのフィールドが無効です。
AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT
応答のフィールドの形式が無効です。
この例では、応答が印刷される。 ビジネス要件に基づいて処理ロジックを指定できます。
void demo_devinfo_event_handler(void * handle, const aiot_devinfo_event_t * event, void * userdata) { switch (event->type) { case AIOT_DEVINFOEVT_INVALID_DEVINFO: { printf("AIOT_DEVINFOEVT_INVALID_DEVINFO\n"); } break; case AIOT_DEVINFOEVT_INVALID_RESPONSE: { printf("AIOT_DEVINFOEVT_INVALID_RESPONSE\n"); } break; case AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT: { printf("AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT\n"); } break; default: { } } }状態を監視するコールバック関数を指定します。
サンプルコード:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_EVENT_HANDLER, (void *)demo_devinfo_event_handler);パラメーター:
パラメーター
例
説明
AIOT_DEVINFOOPT_EVENT_HANDLER
demo_devinfo_event_handler
デバイス接続のステータスが変更されると、コールバックが呼び出されて必要な操作が実行されます。
ステップ3: タグの更新
aiot_devinfo_send関数を呼び出して、IoT Platformにリクエストを送信します。 リクエストのパラメーターの詳細については、前の手順をご参照ください。
リクエストを送信するときは、次の項目に注意してください。
aiot_devinfo_msg_tは、
aiot_devinfo_send()関数の入力パラメーターです。 データ形式を指定します。AIOT_DEVINFO_MSG_UPDATEはメッセージタイプを指定します。
サンプルメッセージ:
リクエストメッセージ
Alink形式
説明
[ { "attrKey": "testKey" 、 "attrValue": "testValue" } ]{ "id": "123", "version": "1.0"、 "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey" 、 "attrValue": "testValue" } ], "method": "thing.de viceinfo.update" }メッセージの内容はJSON形式です。 コンテンツは、Alinkデータのparamsパラメーターの値です。 詳細は、「タグの送信」をご参照ください。
この例では、指定されたタグは
testKey: testValueです。
{ aiot_devinfo_msg_t devinfo_update; char * update = "[{\" attrKey\":\" testKey\",\" attrValue\":\" testValue\"}]"; memset(&devinfo_update, 0, sizeof(aiot_devinfo_msg_t)); devinfo_update.product_key = product_key; devinfo_update.device_name = device_name; devinfo_update.type = AIOT_DEVINFO_MSG_UPDATE; devinfo_update.data.update.params = update; res = aiot_devinfo_send(devinfo_handle, &devinfo_update); if (res < STATE_SUCCESS) { aiot_devinfo_deinit(&devinfo_handle); demo_mqtt_stop(&mqtt_handle); return -1; } printf("aiot_devinfo_send update msg id: % d\n", res); }IoT Platformがリクエストメッセージを受信すると、IoT Platformはデバイスタグを更新し、応答メッセージを返します。
デバイスが応答メッセージを受信すると、
demo_devinfo_recv_handlerコールバック関数が呼び出され、必要な操作が実行されます。コールバック関数の処理ロジックを指定する場合は、次の項目に注意してください。
aiot_devinfo_recv_tは、コールバック関数の入力パラメーターです。 データ形式を指定します。
AIOT_DEVINFORECV_GENERIC_REPLYはメッセージタイプを指定します。
この例では、メッセージが印刷される。
void demo_devinfo_recv_handler(void * handle, const aiot_devinfo_recv_t * packet, void * userdata) { switch (packet->type) { /* IoT Platformからの応答メッセージ。 */ case AIOT_DEVINFORECV_GENERIC_REPLY: { printf("pk: % s、dn: % s、code: % d、msg id: % d、data: %.* s、message: %.* s\n" 、packet->product_key、packet->device_name、 packet->data.generic_reply.code, packet->data.generic_reply.msg_id, packet->data.generic_reply.data_len, packet->data.generic_reply.data, packet->data.generic_reply.message_len, packet->data.generic_reply.message); } break; default: { } } }
(オプション) ステップ4: タグの削除
デバイスタグがIoT Platformに送信された後、aiot_devinfo_send操作を呼び出してタグを削除できます。
リクエストを送信するときは、次の項目に注意してください。
aiot_devinfo_msg_tは、
aiot_devinfo_send()関数の入力パラメーターです。 データ形式を指定します。AIOT_DEVINFO_MSG_DELETEはメッセージタイプを指定します。
サンプルメッセージ:
リクエストメッセージ
Alink形式
説明
{ "attrKey": "testKey" }{ "id": "123", "version": "1.0"、 "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey" 、 } ], "method": "thing.de viceinfo.update" }メッセージの内容はJSON形式です。 コンテンツは、Alinkデータのparamsパラメーターの値です。 詳細については、「タグの削除」をご参照ください。
この例では、指定されたタグは
testKeyです。{ aiot_devinfo_msg_t devinfo_delete; char * delete = "[{\" attrKey\":\" testKey\"}]"; memset(&devinfo_delete, 0, sizeof(aiot_devinfo_msg_t)); devinfo_delete.product_key = product_key; devinfo_delete.device_name = device_name; devinfo_delete.type = AIOT_DEVINFO_MSG_DELETE; devinfo_delete.data.delete.params = delete; res = aiot_devinfo_send(devinfo_handle、およびdevinfo_delete); if (res < STATE_SUCCESS) { aiot_devinfo_deinit(&devinfo_handle); demo_mqtt_stop(&mqtt_handle); return -1; } printf("aiot_devinfo_send delete msg id: % d\n", res); }
IoT Platformがリクエストメッセージを受信すると、IoT Platformはタグを削除し、応答メッセージを返します。
デバイスが応答メッセージを受信した後、demo_devinfo_recv_handlerコールバック関数が呼び出され、必要な操作が実行されます。
詳細については、「レスポンスメッセージの処理」をご参照ください。
ステップ5: プログラムを終了する
aiot_devinfo_deinit関数を呼び出して、Devinfoクライアントインスタンスを削除し、対応するリソースをリリースします。
res = aiot_devinfo_deinit(&devinfo_handle);
if (res < STATE_SUCCESS) {
demo_mqtt_stop(&mqtt_handle);
printf("aiot_devinfo_deinit failed: -0x % 04X\n" 、-res);
return -1;
}