All Products
Search
Document Center

IoT Platform:Contoh penggunaan

Last Updated:Jun 17, 2026

Gunakan file demo ./demos/subdev_basic_demo.c dalam C Link SDK untuk memanggil API Link SDK dan menghubungkan perangkat sub ke IoT Platform melalui gateway.

Informasi latar belakang

  • Untuk informasi lebih lanjut tentang gateway dan perangkat sub, lihat Ikhtisar.

  • Gateway untuk perangkat sub harus mempertahankan koneksi persisten dengan IoT Platform. Metode koneksi sama dengan perangkat yang terhubung langsung. Untuk informasi lebih lanjut, lihat Ikhtisar koneksi MQTT.

    Dalam contoh ini, informasi otentikasi identitas untuk perangkat gateway adalah sebagai berikut:

    ProductKey

    DeviceName

    DeviceSecret

    a18wP******

    LightSwitchGW

    uwMTmVAMnGGHaAkqmeDY6cHxxB******

Langkah 1: Inisialisasi

  1. Tambahkan file header.

    ……
    ……
    
    #include "aiot_subdev_api.h"
  2. Konfigurasikan dependensi tingkat bawah dan output log.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Panggil aiot_subdev_init untuk membuat instans client subdev dan menginisialisasi parameter default.

        subdev_handle = aiot_subdev_init();
        if (subdev_handle == NULL) {
            printf("aiot_subdev_init failed\n");
            demo_mqtt_stop(&mqtt_handle);
            return -1;
        }

Langkah 2: Konfigurasi fitur

Panggil aiot_subdev_setopt untuk mengonfigurasi fitur-fitur berikut.

  1. Kaitkan handle koneksi MQTT.

  2. Konfigurasikan callback pesan untuk fitur gateway dan perangkat sub.

  1. Kaitkan handle koneksi MQTT.

    Penting

    Sebelum mengonfigurasi parameter fitur gateway dan perangkat sub, pastikan Anda telah mengonfigurasi informasi otentikasi identitas untuk gateway. Untuk informasi lebih lanjut, lihat Konfigurasi parameter koneksi untuk MQTT.

    • Kode contoh:

          aiot_subdev_setopt(subdev_handle, AIOT_SUBDEVOPT_MQTT_HANDLE, mqtt_handle);
    • Parameter:

      Item konfigurasi

      Contoh

      Deskripsi

      AIOT_SUBDEVOPT_MQTT_HANDLE

      mqtt_handle

      Fitur gateway dan perangkat sub bergantung pada koneksi MQTT. Gunakan item konfigurasi ini untuk mengaitkan handle koneksi MQTT.

  2. Konfigurasikan callback pesan untuk fitur gateway dan perangkat sub.

    1. Konfigurasikan fungsi callback pesan.

      • Kode contoh:

            aiot_subdev_setopt(subdev_handle, AIOT_SUBDEVOPT_RECV_HANDLER, demo_subdev_recv_handler);
      • Parameter:

        Item konfigurasi

        Nilai contoh

        Deskripsi

        AIOT_SUBDEVOPT_RECV_HANDLER

        demo_subdev_recv_handler

        Saat perangkat menerima pesan gateway atau perangkat sub dari IoT Platform, fungsi callback ini dipicu untuk memprosesnya.

    2. Definisikan fungsi callback pesan.

      Untuk informasi tentang format data Alink untuk pesan, lihat Kelola hubungan topologi dan Status online dan offline perangkat sub.

      void demo_subdev_recv_handler(void *handle, const aiot_subdev_recv_t *packet, void *user_data)
      {
          switch (packet->type) {
              case AIOT_SUBDEVRECV_TOPO_ADD_REPLY:
              case AIOT_SUBDEVRECV_TOPO_DELETE_REPLY:
              case AIOT_SUBDEVRECV_TOPO_GET_REPLY:
              case AIOT_SUBDEVRECV_BATCH_LOGIN_REPLY:
              case AIOT_SUBDEVRECV_BATCH_LOGOUT_REPLY:
              case AIOT_SUBDEVRECV_SUB_REGISTER_REPLY:
              case AIOT_SUBDEVRECV_PRODUCT_REGISTER_REPLY: {
                  printf("msgid        : %d\n", packet->data.generic_reply.msg_id);
                  printf("code         : %d\n", packet->data.generic_reply.code);
                  printf("product key  : %s\n", packet->data.generic_reply.product_key);
                  printf("device name  : %s\n", packet->data.generic_reply.device_name);
                  printf("message      : %s\n", (packet->data.generic_reply.message == NULL)?("NULL"):(packet->data.generic_reply.message));
                  printf("data         : %s\n", packet->data.generic_reply.data);
              }
              break;
              case AIOT_SUBDEVRECV_TOPO_CHANGE_NOTIFY: {
                  printf("msgid        : %d\n", packet->data.generic_notify.msg_id);
                  printf("product key  : %s\n", packet->data.generic_notify.product_key);
                  printf("device name  : %s\n", packet->data.generic_notify.device_name);
                  printf("params       : %s\n", packet->data.generic_notify.params);
              }
              break;
              default: {
      
              }
          }
      }

Langkah 3: Tambahkan hubungan topologi

  1. Dapatkan informasi otentikasi perangkat sub.

    Buat produk dan perangkat untuk perangkat sub. Saat membuat produk, atur tipe node menjadi Gateway Sub-device. Misalnya, buat produk perangkat sub dan tambahkan empat perangkat sub.

    Nama Produk

    ProductKey

    DeviceName

    DeviceSecret

    ProductSecret

    LightSwitchSD

    a13FN******

    LightSwitch_SubDev_01

    768XBgQwgOakz3K4uhOiLeeh9x******

    y7GSILD480******

    LightSwitch_SubDev_02

    iwTZrbjbgNVChfuJkihjE5asek******

    LightSwitch_SubDev_03

    fdutq35iKMYdcWWBuIINY26hsN******

    LightSwitch_SubDev_04

    HCKv50YqgwdKhy5cE0Vz4aydmK******

    Untuk informasi lebih lanjut, lihat Buat produk dan Buat perangkat.

  2. Definisikan variabel g_subdev untuk informasi otentikasi perangkat sub.

    Kode contoh telah menetapkan informasi otentikasi untuk empat perangkat sub. Di lingkungan produksi, tulis kode Anda sendiri untuk mengambil informasi otentikasi perangkat sub. Contohnya:

    • Definisikan protokol antara gateway dan perangkat sub yang memungkinkan gateway menemukan perangkat sub dan mendapatkan sertifikat perangkatnya. Produsen gateway dan perangkat sub menentukan protokol ini.
    • Atau, produsen gateway dapat menyediakan metode untuk mengonfigurasi informasi sertifikat perangkat sub di gateway sebelumnya.
    aiot_subdev_dev_t g_subdev[] = {
        {
            "a13FN******",
            "LightSwitch_SubDev_01",
            "768XBgQwgOakz3K4uhOiLeeh9x******",
            "y7GSILD480******"
        },
        {
            "a13FN******",
            "LightSwitch_SubDev_02",
            "iwTZrbjbgNVChfuJkihjE5asek******",
            "y7GSILD480******"
        },
        {
            "a13FN******",
            "LightSwitch_SubDev_03",
            "fdutq35iKMYdcWWBuIINY26hsN******",
            "y7GSILD480******"
        },
        {
            "a13FN******",
            "LightSwitch_SubDev_04",
            "HCKv50YqgwdKhy5cE0Vz4aydmK******",
            "y7GSILD480******"
        }
    };
  3. Panggil aiot_subdev_send_topo_add untuk mengirim permintaan ke IoT Platform guna menambahkan hubungan topologi antara perangkat sub dan perangkat gateway.

        res = aiot_subdev_send_topo_add(subdev_handle, g_subdev, sizeof(g_subdev)/sizeof(aiot_subdev_dev_t));
        if (res < STATE_SUCCESS) {
            printf("aiot_subdev_send_topo_add failed, res: -0x%04X\n", -res);
            aiot_subdev_deinit(&subdev_handle);
            demo_mqtt_stop(&mqtt_handle);
            return -1;
        }
  4. Opsi: Jika perangkat gateway tidak lagi bertindak sebagai agen untuk perangkat sub dalam menerima pesan dari IoT Platform, panggil aiot_subdev_send_topo_delete untuk menghapus hubungan topologi antara perangkat sub dan perangkat gateway.

         aiot_subdev_send_topo_delete(subdev_handle, g_subdev, sizeof(g_subdev)/sizeof(aiot_subdev_dev_t));
         if (res < STATE_SUCCESS) {
             printf("aiot_subdev_send_topo_delete failed, res: -0x%04X\n", -res);
             aiot_subdev_deinit(&subdev_handle);
             demo_mqtt_stop(&mqtt_handle);
             return -1;
         }

Langkah 4: Login perangkat sub

  1. Panggil aiot_subdev_send_batch_login untuk mengirim permintaan ke IoT Platform agar login perangkat sub secara batch. Setelah perangkat sub login menggunakan hubungan topologi yang telah dibuat, statusnya berubah menjadi Online.

        aiot_subdev_send_batch_login(subdev_handle, g_subdev, sizeof(g_subdev)/sizeof(aiot_subdev_dev_t));
        if (res < STATE_SUCCESS) {
            printf("aiot_subdev_send_batch_login failed, res: -0x%04X\n", -res);
            aiot_subdev_deinit(&subdev_handle);
            demo_mqtt_stop(&mqtt_handle);
            return -1;
        }
  2. Opsi: Untuk menjadikan perangkat sub offline, panggil aiot_subdev_send_batch_logout untuk mengirim permintaan ke IoT Platform. Setelah IoT Platform menerima permintaan tersebut, perangkat sub akan dijadikan offline dan statusnya berubah menjadi Offline.

    Penting

    Saat API ini dipanggil, IoT Platform memperbarui status perangkat sub menjadi offline, sehingga mencegah gateway menerima pesan yang ditujukan untuk perangkat sub tersebut.

         aiot_subdev_send_batch_logout(subdev_handle, g_subdev, sizeof(g_subdev)/sizeof(aiot_subdev_dev_t));
         if (res < STATE_SUCCESS) {
             printf("aiot_subdev_send_batch_logout failed, res: -0x%04X\n", -res);
             aiot_subdev_deinit(&subdev_handle);
             demo_mqtt_stop(&mqtt_handle);
             return -1;
         }

Setelah perangkat sub login atau logout, IoT Platform menangani pesan berdasarkan status perangkat sub:

  • Jika perangkat sub offline, pesan QoS=0 dari IoT Platform ke perangkat sub akan segera dibuang.

  • Jika perangkat sub online, IoT Platform mengirim pesan untuk perangkat sub ke gateway yang sesuai, yang kemudian meneruskannya ke perangkat sub.

Langkah 5: Berlangganan topik untuk perangkat sub

Setelah perangkat sub terhubung ke IoT Platform melalui gateway, panggil aiot_mqtt_sub untuk berlangganan topik perangkat sub dan menerima pesan darinya.

Penting

Saat berlangganan topik, bedakan antara ProductKey dan DeviceName perangkat sub dan gateway. Pastikan Anda berlangganan topik perangkat yang benar.

  • Kode contoh:

        {
            char *sub_topic = "/a13FN******/LightSwitch_SubDev_01/user/get";
    
            res = aiot_mqtt_sub(mqtt_handle, sub_topic, NULL, 1, NULL);
            if (res < 0) {
                printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res);
                return -1;
            }
        }
  • Parameter:

    Parameter

    Contoh

    Deskripsi

    sub_topic

    /a13FN******/LightSwitch_SubDev_01/user/get

    Topik yang memiliki izin berlangganan untuk Anda. Di topik ini:

    • a13FN****** adalah ProductKey perangkat sub.

    • LightSwitch_SubDev_01 adalah DeviceName perangkat sub.

    Contoh ini menggunakan topik kustom default untuk perangkat sub agar menerima pesan dari IoT Platform.

    Untuk informasi lebih lanjut tentang topik, lihat Apa itu topik?.

Langkah 6: Publikasikan pesan dari perangkat sub

Panggil aiot_mqtt_pub untuk mempublikasikan pesan ke topik perangkat sub tertentu.

  • Kode contoh:

         {
            char *pub_topic = "/a13FN******/LightSwitch_SubDev_01/user/update";
            char *pub_payload = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}";
    
            res = aiot_mqtt_pub(mqtt_handle, pub_topic, (uint8_t *)pub_payload, (uint32_t)strlen(pub_payload), 0);
            if (res < 0) {
                printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res);
                return -1;
            }
        }
  • Parameter:

    Parameter

    Contoh

    Deskripsi

    pub_topic

    /a13FN******/LightSwitch_SubDev_01/user/update

    Topik yang memiliki izin publikasi. Dalam topik ini:

    • a13FN****** adalah ProductKey perangkat sub.

    • LightSwitch_SubDev_01 adalah DeviceName perangkat sub.

    Contoh ini menggunakan topik kustom default untuk perangkat sub. Perangkat menggunakan topik ini untuk mempublikasikan pesan ke IoT Platform.

    Untuk informasi lebih lanjut tentang topik, lihat Apa itu topik?.

    pub_payload

    {\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}

    Isi pesan yang dilaporkan ke IoT Platform.

    Karena kategori topik untuk pesan contoh ini adalah kustom, format datanya juga dapat dikustomisasi.

    Untuk informasi lebih lanjut tentang format data, lihat Format data.

Langkah 7: Putuskan koneksi gateway

Catatan

MQTT biasanya digunakan untuk perangkat yang memerlukan koneksi persisten. Oleh karena itu, program biasanya tidak mencapai titik ini.

Dalam program contoh, thread utama bertanggung jawab untuk mengonfigurasi parameter dan membangun koneksi. Setelah koneksi terbentuk, thread utama dapat masuk ke mode hibernasi.

Anda dapat memanggil aiot_mqtt_disconnect untuk mengirim pesan pemutusan koneksi ke IoT Platform dan memutuskan koneksi jaringan.

    res = aiot_mqtt_disconnect(mqtt_handle);
    if (res < STATE_SUCCESS) {
        aiot_mqtt_deinit(&mqtt_handle);
        printf("aiot_mqtt_disconnect failed: -0x%04X\n", -res);
        return -1;
    }

Langkah 8: Keluar dari program

Panggil aiot_subdev_deinit untuk menghapus instans client subdev dan melepaskan sumber daya terkait.

    res = aiot_subdev_deinit(&subdev_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_subdev_deinit failed: -0x%04X\n", res);
    }

Langkah selanjutnya

  • Setelah mengonfigurasi file contoh, kompilasi untuk menghasilkan file yang dapat dieksekusi ./output/subdev-basic-demo.

    Untuk informasi lebih lanjut, lihat Kompilasi dan jalankan.