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

IoT Platform:使用例

最終更新日:Jun 19, 2026

C Link SDK のデモファイル ./demos/compress_basic_demo.c を使用して、Link SDK API を呼び出し、デバイスのデータ圧縮を有効にします。

背景情報

  • データ圧縮の詳細については、「概要」をご参照ください。

  • データ圧縮は MQTT 接続を使用します。MQTT 関連のコードの詳細については、「使用例」をご参照ください。

ステップ 1: 初期化

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

    ……
    ……
    #include "aiot_compress_api.h"
    ……
  2. 基盤となる依存関係とログ出力を設定します。

    aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
    aiot_state_set_logcb(demo_state_logcb);
  3. aiot_compress_init を呼び出して、データ圧縮インスタンスを作成し、デフォルトパラメータを初期化します。

     /* compress クライアントインスタンスを作成し、デフォルトパラメータを初期化します。 */
        compress_handle = aiot_compress_init();
        if (compress_handle == NULL) {
            demo_mqtt_stop(&mqtt_handle);
            printf("aiot_compress_init failed\n");
            return -1;
        }

ステップ 2: 機能の設定

aiot_compress_setopt を呼び出して、以下の設定を行います。

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

    /* MQTT ハンドルを関連付けます。 */
    aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_MQTT_HANDLE, mqtt_handle);
  2. 圧縮レベルを設定します。

     /* 圧縮レベルを設定します。レベルの範囲は 1~9 です。レベルが高いほど圧縮率は向上しますが、より多くのメモリと時間を消費します。 */
     uint8_t compress_level = 1;
     aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_LEVEL, &compress_level);
  3. 圧縮が必要なモバイル発信 (MO) メッセージのトピックを追加します。

    完全なトピックパスを指定してください。ワイルドカード文字はサポートされていません。

    • リストを定義します。

      /* TODO: ここを圧縮対象のモバイル発信メッセージのトピックリストに置き換えてください。 */
      char *compr_list[] = {
          "/${YourProductKey}/${YourDeviceName}/user/update",
          "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post",
      };
    • トピックリストを設定します。

      /* 圧縮が必要なモバイル発信メッセージのトピックを追加します。 */
      for(int i = 0; i < sizeof(compr_list) / sizeof(char *); i++) {
          aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_APPEND_COMPR_TOPIC, compr_list[i]);
      }
  4. 展開が必要なモバイル着信 (MT) メッセージのトピックを追加します。

    • リストを定義します。

      /* TODO: ここを展開対象のモバイル着信メッセージのトピックリストに置き換えてください。 */
      char *decompr_list[] = {
          "/${YourProductKey}/${YourDeviceName}/user/update_reply",
          "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post_reply",
      };
    • トピックリストを設定します。

       /* 展開が必要なモバイル着信メッセージのトピックを追加します。 */
       for(int i = 0; i < sizeof(decompr_list) / sizeof(char *); i++) {
           aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_APPEND_DECOMPR_TOPIC, decompr_list[i]);
       }
  5. トピックリスト報告用のコールバック関数を設定します。

     /* 圧縮または展開のトピックリストを IoT Platform に報告します。リストの報告は一度だけで済みます。設定は再起動後も保持されます。 */
        uint32_t code = 0;
        aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_RECV_HANDLER, demo_update_reply);
        aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_USERDATA, &code);

    コールバック関数を実装して、結果を取得します。

    static void demo_update_reply(void *handle, const aiot_compress_recv_t *packet, void *userdata)
    {
        uint32_t *code = (uint32_t *)userdata;
        *code = packet->data.update_reply.code;
        printf("compress update reply code %d, message %.*s\r\n", packet->data.update_reply.code, packet->data.update_reply.message_len, packet->data.update_reply.message);
    }

(オプション) ステップ 3: 圧縮トピックリストの報告

デバイスから圧縮または展開のトピックリストを報告し、結果を待ちます。

説明
  • デバイスがリストを報告すると、設定は再起動後も保持されます。

  • トピックリストを更新するには、再度報告してください。IoT Platform は常に、最後に報告されたリストを使用します。

  • 圧縮トピックリストを報告します。

    aiot_compress_topiclist_update(compress_handle);
  • リターンコード 200 は、操作が成功したことを示します。

     if(code != 200) {
            demo_mqtt_stop(&mqtt_handle);
            aiot_compress_deinit(&compress_handle);
            printf("aiot_compress_topiclist_update failed\n");
            return -1;
        }

ステップ 4: 圧縮リスト内のメッセージの報告

圧縮リスト内のトピック へメッセージをパブリッシュすると、Link SDK は自動的にメッセージを圧縮します。

aiot_mqtt_pub を呼び出して、通常のメッセージと同じ方法でメッセージをパブリッシュします。

 char *pub_topic = "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post";
 char *pub_payload = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0, \"message\":\"this is a test message, this is a test message, this is a test message\"}}";
 aiot_mqtt_pub(mqtt_handle, pub_topic, (uint8_t *)pub_payload, (uint32_t)strlen(pub_payload), 0);

ステップ 5: 圧縮リスト内のメッセージの配信

圧縮対象のモバイル着信メッセージは、IoT Platform によって配信前に圧縮されます。Link SDK はこれらのメッセージを自動的に展開し、コールバック関数で展開済みのデータを受信します。

aiot_mqtt_recv を呼び出して、受信したメッセージを処理します。圧縮されたメッセージが到着すると、Link SDK はそれを展開し、メッセージコールバックを実行します。

/* デフォルトの MQTT メッセージ処理コールバック。SDK がサーバーから MQTT メッセージを受信した際に、そのメッセージを処理するための対応するユーザーコールバックが設定されていない場合に呼び出されます。 */
void demo_mqtt_default_recv_handler(void *handle, const aiot_mqtt_recv_t *packet, void *userdata)
{
    switch (packet->type) {

	....
    case AIOT_MQTTRECV_PUB: {
        printf("pub, qos: %d, topic: %.*s\n", packet->data.pub.qos, packet->data.pub.topic_len, packet->data.pub.topic);
        printf("pub, payload: %.*s\n", packet->data.pub.payload_len, packet->data.pub.payload);
    }
    break;

	....
    }
}

ステップ 6: プログラムの終了

aiot_compress_deinit を呼び出して、圧縮インスタンスを破棄し、リソースを解放します。

  /* COMPRESS インスタンスを破棄します。このコード部分は通常実行されません。 */
    res = aiot_compress_deinit(&compress_handle);
    if (res < STATE_SUCCESS) {
        demo_mqtt_stop(&mqtt_handle);
        printf("aiot_compress_deinit failed: -0x%04X\n", -res);
        return -1;
    }

次のステップ

  • サンプルファイルを設定した後、それをコンパイルして実行可能ファイル ./output/compress-basic-demo を生成します。詳細については、「コンパイルと実行」をご参照ください。

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