All Products
Search
Document Center

IoT Platform:Contoh penggunaan

Last Updated:Jun 17, 2026

Panggil operasi API C Link SDK untuk mendistribusikan perangkat menggunakan file kode contoh ./demos/bootstrap_posix_demo.c.

Informasi latar belakang

  • Untuk informasi selengkapnya mengenai fitur distribusi perangkat, lihat Ikhtisar.

  • Setelah memperoleh informasi koneksi perangkat melalui distribusi perangkat, hubungkan perangkat ke Platform IoT. Untuk informasi selengkapnya mengenai koneksi MQTT, lihat Koneksi MQTT.

Langkah 1: Inisialisasi

  1. Tambahkan file header.

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

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Panggil aiot_bootstrap_init untuk membuat instance Bootstrap

        bootstrap_handle =  aiot_bootstrap_init();
        if (bootstrap_handle == NULL) {
            printf("aiot_bootstrap_init failed\n");
            return -1;
        }

Langkah 2: Konfigurasi fitur

Panggil aiot_bootstrap_setopt untuk mengonfigurasi fitur-fitur berikut.

  1. Penting

    Jenis koneksi keamanan untuk lapisan Transport Layer Security (TLS) harus berbasis sertifikat (AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA).

    •     int32_t res = STATE_SUCCESS;
          void *bootstrap_handle = NULL, *mqtt_handle = NULL;
          aiot_sysdep_network_cred_t cred;
          demo_info_t demo_info;
      
          /* TODO: Ganti dengan productKey dan deviceName perangkat Anda. */
          char *product_key       = "a18wP******";
          char *device_name       = "LightSwitch";
          char *device_secret     = "uwMTmVAMnGGHaAkqmeDY6cHxxB******";
          ……
          ……
          memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t));
          cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA;  /* Gunakan sertifikat RSA untuk mengotentikasi server MQTT. */
          cred.max_tls_fragment = 16384; /* Panjang maksimum shard adalah 16 KB. Nilai valid lainnya adalah 4 KB, 2 KB, 1 KB, dan 0,5 KB. */
          cred.sni_enabled = 1;                               /* Mendukung Server Name Indicator (SNI) saat pembentukan koneksi TLS. */
          cred.x509_server_cert = ali_ca_cert;                 /* Sertifikat root RSA yang digunakan untuk mengotentikasi server MQTT. */
          cred.x509_server_cert_len = strlen(ali_ca_cert);     /* Panjang sertifikat root RSA yang digunakan untuk mengotentikasi server MQTT. */
          ……
          ……
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_HOST, (void *)host);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_PORT, (void *)&port);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_PRODUCT_KEY, (void *)product_key);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_DEVICE_NAME, (void *)device_name);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_NETWORK_CRED, (void *)&cred);
      
          ……
          ……
    • Parameter

      Contoh

      Deskripsi

      product_key

      a18wP******

      Informasi otentikasi perangkat. Untuk informasi selengkapnya, lihat Peroleh informasi verifikasi perangkat.

      Dalam contoh ini, metode otentikasi sertifikat unik per perangkat digunakan.

      Parameter device_secret digunakan ketika perangkat membentuk koneksi MQTT setelah memperoleh nama domain dan nomor port koneksi.

      device_name

      LightSwitch

      device_secret

      uwMTmVAMnGGHaAkqmeDY6cHxxB******

  2. Konfigurasi callback pesan.

    •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_RECV_HANDLER, (void *)demo_bootstrap_recv_handler); 
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_USERDATA, (void *)&demo_info);
    • Item konfigurasi

      Nilai contoh

      Deskripsi

      AIOT_BOOTSTRAPOPT_RECV_HANDLER

      demo_bootstrap_recv_handler

      Fungsi ini dipanggil ketika pesan distribusi perangkat diterima.

      AIOT_BOOTSTRAPOPT_USERDATA

      demo_info

      Mengatur konteks pengguna. Ketika demo_bootstrap_recv_handler dipicu, userdata dikembalikan. Lakukan casting data yang dikembalikan ke tipe yang sesuai sebelum digunakan.

  3. Konfigurasi pemantauan status.

    1. Definisikan callback untuk memantau status.

      void demo_bootstrap_event_handler(void *handle, const aiot_bootstrap_event_t *event, void *userdata)
      {
          switch (event->type) {
              case AIOT_BOOTSTRAPEVT_INVALID_RESPONSE: {
                  printf("AIOT_BOOTSTRAPEVT_INVALID_RESPONSE\n");
              }
              break;
              case AIOT_BOOTSTRAPEVT_INVALID_CMD: {
                  printf("AIOT_BOOTSTRAPEVT_INVALID_CMD\n");
              }
              break;
              default: {
      
              }
              break;
          }
      }
    2. Tentukan callback untuk memantau status.

      • Kode contoh:

            aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_EVENT_HANDLER, (void *)demo_bootstrap_event_handler);
      • Parameter:

        Item konfigurasi

        Nilai contoh

        Deskripsi

        AIOT_BOOTSTRAPOPT_EVENT_HANDLER

        demo_bootstrap_event_handler

        Ketika status koneksi perangkat berubah, logika pemrosesan yang sesuai yang didefinisikan dalam fungsi callback ini akan dieksekusi.

Langkah 3: Kirim permintaan

Penting

Sebelum mengirim permintaan distribusi perangkat, pastikan operasi distribusi perangkat telah dikonfigurasi di Konsol Platform IoT. Jika tidak, nama domain dan port yang dikembalikan akan berlaku untuk koneksi perangkat saat ini.

Panggil aiot_bootstrap_send_request untuk mengirim permintaan distribusi perangkat HTTPS ke server berdasarkan parameter yang dikonfigurasi pada langkah sebelumnya.

Untuk informasi selengkapnya mengenai permintaan HTTPS, lihat Format data permintaan untuk distribusi perangkat.

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

Langkah 4: Menerima konfirmasi

  1. Setelah pesan dikirim, Platform IoT mengembalikan tanggapan. Perangkat memanggil aiot_bootstrap_recv untuk menerima data respons dan memprosesnya melalui callback pesan.

        res = aiot_bootstrap_recv(bootstrap_handle);
        if (res < STATE_SUCCESS) {
            printf("aiot_bootstrap_recv failed, res: -0x%04X\n", -res);
            return -1;
        }
  2. Tulis logika untuk fungsi callback.

    Tulis logika untuk fungsi callback berdasarkan informasi berikut:

    Jenis pesan

    Deskripsi

    AIOT_BOOTSTRAPRECV_STATUS_CODE

    Kode status HTTP yang dikembalikan oleh server. Untuk informasi selengkapnya, lihat Kode status HTTP.

    Kode contoh tidak memproses kode status yang diterima. Tambahkan logika pemrosesan Anda sendiri sesuai kebutuhan.

    AIOT_BOOTSTRAPRECV_CONNECTION_INFO

    Pesan acknowledgement yang dikembalikan Platform IoT setelah distribusi perangkat dimulai.

    Pesan yang diterima bertipe aiot_bootstrap_recv_t. Simpan nilai host dan port, yaitu nama domain dan nomor port untuk koneksi perangkat, ke perangkat lokal Anda.

    Kode contoh hanya mencetak pesan distribusi perangkat yang diterima.

    AIOT_BOOTSTRAPRECV_NOTIFY

    Pesan notifikasi distribusi perangkat yang didorong oleh Platform IoT.

    Setelah Anda melakukan operasi distribusi perangkat di Platform IoT, pesan distribusi perangkat akan didorong ke perangkat. Untuk informasi selengkapnya, lihat Distribusi perangkat di Platform IoT.

    Kode contoh hanya mencetak pesan tersebut. Tambahkan logika untuk memutus koneksi perangkat, mengirim permintaan distribusi perangkat baru, lalu membentuk kembali koneksi.

    void demo_bootstrap_recv_handler(void *handle, const aiot_bootstrap_recv_t *packet, void *userdata)
    {
        demo_info_t *demo_info = (demo_info_t *)userdata;
    
        switch (packet->type) {
            case AIOT_BOOTSTRAPRECV_STATUS_CODE: {
                demo_info->code = packet->data.status_code.code;
            }
            break;
            case AIOT_BOOTSTRAPRECV_CONNECTION_INFO: {
                demo_info->host = malloc(strlen(packet->data.connection_info.host) + 1);
                if (demo_info->host != NULL) {
                    memset(demo_info->host, 0, strlen(packet->data.connection_info.host) + 1);
                    /* TODO: Di dalam callback, simpan konten pesan distribusi perangkat ke lokasi tertentu. Ruang ini kemudian akan dilepas oleh SDK. */
                    memcpy(demo_info->host, packet->data.connection_info.host, strlen(packet->data.connection_info.host));
                    demo_info->port = packet->data.connection_info.port;
                }
            }
            break;
            case AIOT_BOOTSTRAPRECV_NOTIFY: {
                printf("AIOT_BOOTSTRAPRECV_NOTIFY, cmd: %d\n", packet->data.notify.cmd);
    
            }
            default: {
    
            }
            break;
        }
    }

(Opsional) Langkah 5: Bentuk koneksi MQTT

Setelah memperoleh nama domain dan port yang diperlukan untuk perangkat, bentuk koneksi MQTT antara perangkat dan Platform IoT. Untuk informasi selengkapnya mengenai koneksi MQTT, lihat Koneksi MQTT.

Setelah koneksi MQTT terbentuk, lakukan langkah-langkah berikut untuk memulai kembali distribusi perangkat.

  1. Panggil aiot_bootstrap_setopt untuk mengaitkan handle koneksi MQTT.

    •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle);
    • Item konfigurasi

      Contoh

      Deskripsi

      AIOT_BOOTSTRAPOPT_MQTT_HANDLE

      mqtt_handle

      Fungsi callback ini dipicu ketika perangkat menerima pesan distribusi perangkat yang didorong oleh Platform IoT.

  2. Masuk ke Konsol Platform IoT dan lakukan operasi distribusi perangkat.

    Untuk informasi selengkapnya, lihat Distribusi perangkat di Platform IoT.

  3. Ketika perangkat menerima pesan distribusi perangkat yang didorong, perangkat tersebut offline. Kemudian, ulangi Langkah 1 hingga Langkah 4 untuk memperoleh nama domain koneksi perangkat baru dan menyambungkan kembali perangkat ke Platform IoT.

Langkah 6: Keluar dari program

Panggil aiot_bootstrap_deinit untuk menghapus instance client bootstrap dan melepas sumber daya.

    res = aiot_bootstrap_deinit(&bootstrap_handle);
    if (res < 0) {
        printf("demo_start_stop failed\n");
        return -1;
    }

Langkah selanjutnya

  • Setelah mengonfigurasi file kode contoh, kompilasi file tersebut untuk menghasilkan file yang dapat dieksekusi. Dalam contoh ini, file yang dapat dieksekusi ./demos/bootstrap-posix-demo dihasilkan.

    Untuk informasi selengkapnya, lihat Kompilasi dan jalankan.

  • Untuk informasi selengkapnya mengenai hasil eksekusi, lihat Log runtime.