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

IoT Platform:例:

最終更新日:Apr 09, 2025

このトピックでは、Link SDK for CのAPI操作を呼び出して、デバイスタグをIoT Platformに送信したり、デバイスタグを削除したりする方法について説明します。 この例では、という名前のサンプルコードファイルです。/demos/devinfo_posix_demo.cが使用されます。

背景情報

  • デバイスタグの詳細については、「概要」をご参照ください。

  • デバイスタグ機能は、MQTT (Message Queuing Telemetry Transport) を介してIoT Platformに接続されているデバイスでのみ使用できます。 機能を設定するためのMQTT接続関連コードの詳細については、「概要」をご参照ください。

ステップ1: クライアントの初期化

  1. ヘッダーファイルを追加します。

    ……
    ……
    
    # 「aiot_devinfo_api.h」
    を含む
  2. 基になる依存関係を追加し、ログ出力機能を設定します。

    aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb); 
  3. 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操作を呼び出して、次の機能を設定します。

  1. MQTT接続ハンドルに関連付けます。

    重要

    デバイスタグ固有のパラメーターを設定する前に、デバイス検証情報が指定されていることを確認してください。 詳細については、「」をご参照ください。

    • サンプルコード:

      aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, mqtt_handle);
    • パラメーター:

      パラメーター

      説明

      AIOT_DEVINFOOPT_MQTT_HANDLE

      mqtt_handle

      デバイスタグ。

  2. メッセージコールバック関数の設定

    • サンプルコード:

      aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_RECV_HANDLER, (void *)demo_devinfo_recv_handler);
    • パラメーター:

      パラメーター

      説明

      AIOT_DEVINFOOPT_RECV_HANDLER

      demo_devinfo_recv_handler

      デバイスタグ固有のメッセージが受信されると、コールバック関数が呼び出される。

  3. ステータスモニタリングの設定

    1. ステータスを監視するコールバック関数を定義します。

      コールバック関数の処理ロジックを指定する場合は、次の項目に注意してください。

      • タグの送信に失敗した場合、次のイベントタイプが返されます。

        イベントタイプ

        説明

        AIOT_DEVINFOEVT_INVALID_DEVINFO

        レスポンスのデバイス情報が無効です。 ProductKeyDeviceNameは取得できません。

        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: {
      
              }
          }
      }
    2. 状態を監視するコールバック関数を指定します。

      • サンプルコード:

        aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_EVENT_HANDLER, (void *)demo_devinfo_event_handler);
      • パラメーター:

        パラメーター

        説明

        AIOT_DEVINFOOPT_EVENT_HANDLER

        demo_devinfo_event_handler

        デバイス接続のステータスが変更されると、コールバックが呼び出されて必要な操作が実行されます。

ステップ3: タグの更新

  1. 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);
        }
  2. IoT Platformがリクエストメッセージを受信すると、IoT Platformはデバイスタグを更新し、応答メッセージを返します。

  3. デバイスが応答メッセージを受信すると、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: タグの削除

  1. デバイスタグがIoT Platformに送信された後、aiot_devinfo_send操作を呼び出してタグを削除できます。

    リクエストを送信するときは、次の項目に注意してください。

    • aiot_devinfo_msg_tは、aiot_devinfo_send() 関数の入力パラメーターです。 データ形式を指定します。

    • AIOT_DEVINFO_MSG_DELETEはメッセージタイプを指定します。

    • サンプルメッセージ:

      リクエストメッセージ

      Alink形式

      説明

          {
              "attrKey": "testKey"
          }
      {
        "id": "123",
        &quot;version&quot;: &quot;1.0&quot;、
        "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);
          } 
  2. IoT Platformがリクエストメッセージを受信すると、IoT Platformはタグを削除し、応答メッセージを返します。

  3. デバイスが応答メッセージを受信した後、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;
    }

次のステップ

  • サンプルコードファイルを設定したら、ファイルをコンパイルして実行可能ファイルを生成します。 この例では、。/demos/devinfo-posix-demoの実行可能ファイルが生成されます。

    詳細については、「環境の準備」をご参照ください。

  • 実行結果の詳細については、「ログの表示」をご参照ください。