All Products
Search
Document Center

IoT Platform:Contoh penggunaan

Last Updated:Jun 19, 2026

Gunakan file demo ./demos/compress_basic_demo.c dalam C Link SDK untuk memanggil API Link SDK dan mengaktifkan kompresi data untuk suatu perangkat.

Informasi latar belakang

  • Untuk informasi selengkapnya tentang kompresi data, lihat Overview.

  • Kompresi data menggunakan koneksi MQTT. Untuk informasi selengkapnya tentang kode terkait MQTT, lihat Contoh penggunaan.

Langkah 1: Inisialisasi

  1. Tambahkan file header.

    ……
    ……
    #include "aiot_compress_api.h"
    ……
  2. Konfigurasikan dependensi dasar dan output log.

    aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
    aiot_state_set_logcb(demo_state_logcb);

  3. Panggil aiot_compress_init untuk membuat instans kompresi data dan menginisialisasi parameter default.

     /* Buat instans client compress dan inisialisasi parameter default. */
        compress_handle = aiot_compress_init();
        if (compress_handle == NULL) {
            demo_mqtt_stop(&mqtt_handle);
            printf("aiot_compress_init failed\n");
            return -1;
        }

Langkah 2: Konfigurasi fitur

Panggil aiot_compress_setopt untuk mengonfigurasi pengaturan berikut.

  1. Asosiasikan handle koneksi MQTT.

    /* Asosiasikan handle MQTT. */
    aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_MQTT_HANDLE, mqtt_handle);
  2. Tetapkan tingkat kompresi.

     /* Tetapkan tingkat kompresi. Tingkat berkisar dari 1 hingga 9. Tingkat yang lebih tinggi memberikan kompresi lebih baik tetapi mengonsumsi lebih banyak memori dan waktu. */
     uint8_t compress_level = 1;
     aiot_compress_setopt(compress_handle, AIOT_COMPRESSOPT_LEVEL, &compress_level);
  3. Tambahkan topik untuk pesan yang berasal dari perangkat seluler (MO) yang memerlukan kompresi.

    Tentukan path topik lengkap. Karakter wildcard tidak didukung.

    • Definisikan daftar tersebut.

      /* TODO: Ganti ini dengan daftar topik untuk pesan yang berasal dari perangkat seluler yang ingin Anda kompresi. */
      char *compr_list[] = {
          "/${YourProductKey}/${YourDeviceName}/user/update",
          "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post",
      };
    • Konfigurasikan daftar topik.

      /* Tambahkan topik untuk pesan yang berasal dari perangkat seluler yang memerlukan kompresi. */
      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. Tambahkan topik untuk pesan terminasi seluler (MT) yang memerlukan dekompresi.

    • Definisikan daftar tersebut.

      /* TODO: Ganti ini dengan daftar topik untuk pesan terminasi seluler yang ingin Anda kompresi. */
      char *decompr_list[] = {
          "/${YourProductKey}/${YourDeviceName}/user/update_reply",
          "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post_reply",
      };
    • Konfigurasikan daftar topik.

       /* Tambahkan topik untuk pesan terminasi seluler yang memerlukan dekompresi. */
       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. Tetapkan fungsi callback untuk pelaporan daftar topik.

     /* Laporkan daftar topik untuk kompresi atau dekompresi ke Platform IoT. Anda hanya perlu melaporkan daftar ini sekali. Konfigurasi tetap berlaku setelah restart. */
        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);

    Implementasikan fungsi callback untuk mengambil hasilnya.

    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);
    }

(Opsional) Langkah 3: Laporkan daftar topik kompresi

Laporkan daftar topik untuk kompresi atau dekompresi dari perangkat, dan tunggu hasilnya.

Catatan
  • Setelah perangkat melaporkan daftar tersebut, konfigurasi tetap berlaku meskipun perangkat direstart.

  • Untuk memperbarui daftar topik, laporkan kembali. Platform IoT selalu menggunakan daftar terbaru yang dilaporkan.

  • Laporkan daftar topik kompresi.

    aiot_compress_topiclist_update(compress_handle);
  • Kode return 200 menunjukkan bahwa operasi berhasil.

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

Langkah 4: Laporkan pesan dalam daftar kompresi

Saat Anda memublikasikan pesan ke topik dalam daftar kompresi, Link SDK secara otomatis mengompresi pesan tersebut.

Panggil aiot_mqtt_pub untuk memublikasikan pesan dengan cara yang sama seperti pesan biasa.

 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);

Langkah 5: Kirimkan pesan dalam daftar terkompresi

Untuk pesan terminasi seluler yang memerlukan kompresi, Platform IoT mengompresinya sebelum dikirimkan. Link SDK secara otomatis mendekompresi pesan-pesan tersebut, dan fungsi callback menerima data yang telah didekompresi.

Panggil aiot_mqtt_recv untuk memproses pesan yang diterima. Saat pesan terkompresi tiba, Link SDK mendekompresinya dan menjalankan callback pesan.

/* Callback pemrosesan pesan MQTT default. Ini dipanggil saat SDK menerima pesan MQTT dari server dan tidak tersedia callback pengguna yang sesuai untuk memprosesnya. */
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;

	....
    }
}

Langkah 6: Keluar dari program

Panggil aiot_compress_deinit untuk menghapus instans kompresi dan melepaskan sumber daya.

  /* Hapus instans COMPRESS. Bagian kode ini biasanya tidak dijalankan. */
    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;
    }

Langkah selanjutnya

  • Setelah Anda mengonfigurasi file contoh, kompilasi file tersebut untuk menghasilkan file yang dapat dieksekusi ./output/compress-basic-demo. Untuk informasi selengkapnya, lihat Kompilasi dan jalankan.

  • Untuk informasi selengkapnya tentang hasil operasi, lihat Log operasional.