All Products
Search
Document Center

IoT Platform:Contoh

Last Updated:Jul 02, 2025

Mendistribusikan perangkat. File kode contoh ./demos/bootstrap_posix_demo.c digunakan.

Informasi latar belakang

  • Untuk informasi lebih lanjut tentang distribusi perangkat, lihat Ikhtisar.

  • Setelah memperoleh informasi koneksi perangkat menggunakan fitur distribusi perangkat, Anda dapat menghubungkan perangkat ke IoT Platform. Untuk informasi lebih lanjut tentang koneksi MQTT, lihat Ikhtisar.

Langkah 1: Inisialisasi klien

  1. Tambahkan file header.
    ...
    ...
    
    #include "aiot_bootstrap_api.h"
  2. Tambahkan dependensi dasar dan konfigurasikan fitur output log.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Panggil operasi aiot_bootstrap_init untuk membuat bootstrap.
        bootstrap_handle =  aiot_bootstrap_init();
        if (bootstrap_handle == NULL) {
            printf("aiot_bootstrap_init gagal\n");
            return -1;
        }

Langkah 2: Konfigurasikan fitur

Panggil operasi aiot_bootstrap_setopt untuk mengonfigurasi item berikut:

  1. Penting Anda harus menetapkan tipe koneksi TLS ke 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 nilai parameter berikut dengan ProductKey, DeviceName, dan DeviceSecret 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;  /* Verifikasi broker MQTT menggunakan sertifikat RSA. */
          cred.max_tls_fragment = 16384; /* Fragmen dapat memiliki panjang hingga 16 KB. Nilai opsional lainnya termasuk 4 KB, 2 KB, 1 KB, dan 0,5 KB. */
          cred.sni_enabled = 1;                               /* Indikator nama server yang didukung saat Anda membuat koneksi TLS. */
          cred.x509_server_cert = ali_ca_cert;                 /* Sertifikat root RSA yang digunakan untuk memverifikasi broker MQTT. */
          cred.x509_server_cert_len = strlen(ali_ca_crt);     /* Panjang sertifikat root RSA yang digunakan untuk memverifikasi broker 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);
      
          ...
          ...
    • ParameterContohDeskripsi
      product_keya18wP******

      Parameter device_secret diperlukan saat Anda membuat koneksi MQTT menggunakan endpoint dan nomor port yang diperoleh.

      device_nameLightSwitch
      device_secretuwMTmVAMnGGHaAkqmeDY6cHxxB******
  2. Konfigurasikan 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);
    • ParameterContohDeskripsi
      AIOT_BOOTSTRAPOPT_RECV_HANDLERdemo_bootstrap_recv_handlerSaat pesan distribusi perangkat diterima, callback ini dipanggil.
      AIOT_BOOTSTRAPOPT_USERDATAdemo_infoMengatur konteks. Saat callback demo_bootstrap_recv_handler dipanggil, parameter userdata dikembalikan. Anda harus mengonversi tipe data sebelum menggunakan parameter ini.

    1. 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;
          }
      }

      •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_EVENT_HANDLER, (void *)demo_bootstrap_event_handler);
      • ParameterContohDeskripsi
        AIOT_BOOTSTRAPOPT_EVENT_HANDLERdemo_bootstrap_event_handler

        Jika status koneksi perangkat berubah, callback dipanggil untuk melakukan operasi yang diperlukan.

Langkah 3: Kirim permintaan

Penting Sebelum mengirim permintaan distribusi perangkat, pastikan bahwa perangkat telah didistribusikan di IoT Platform. Jika tidak, endpoint dan nomor port saat ini dari perangkat akan dikembalikan.

Panggil operasi aiot_bootstrap_send_request untuk mengirim Permintaan HTTPS ke server. Untuk informasi lebih lanjut tentang parameter dalam permintaan, lihat langkah sebelumnya.

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

Langkah 4: Terima respons

  1.     res = aiot_bootstrap_recv(bootstrap_handle);
        if (res < STATE_SUCCESS) {
            printf("aiot_bootstrap_recv gagal, res: -0x%04X\n", -res);
            return -1;
        }
  2. Tentukan logika pemrosesan callback.
    Saat menentukan logika pemrosesan callback, perhatikan item berikut:
    Tipe pesanDeskripsi
    AIOT_BOOTSTRAPRECV_STATUS_CODEKode status HTTP yang dikembalikan oleh IoT Platform. Untuk informasi lebih lanjut, lihat Kode status HTTP.

    Dalam contoh ini, logika untuk memproses kode status yang diterima tidak ditentukan. Anda dapat menentukan logika berdasarkan kebutuhan bisnis Anda.

    AIOT_BOOTSTRAPRECV_CONNECTION_INFOPesan respons yang dikembalikan oleh IoT Platform.

    aiot_bootstrap_recv_t menunjukkan tipe pesan. Anda harus menyimpan parameter host dan port di tempat tertentu.

    Dalam contoh ini, pesan respons dicetak.

    AIOT_BOOTSTRAPRECV_NOTIFYPesan distribusi perangkat yang dikirim oleh IoT Platform.

    Setelah perangkat didistribusikan di IoT Platform, IoT Platform mengirim pesan ke perangkat.

    Dalam contoh ini, pesan dicetak. Anda harus menentukan logika untuk memutuskan perangkat dan mengajukan ulang permintaan distribusi perangkat.

    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: Simpan pesan distribusi perangkat ke lokasi tertentu dan lepaskan ruang memori. */
                    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: Buat koneksi MQTT

Setelah memperoleh endpoint dan nomor port yang diperlukan, hubungkan perangkat dengan IoT Platform melalui MQTT. Untuk informasi lebih lanjut tentang koneksi MQTT, lihat Ikhtisar.

Setelah koneksi MQTT dibuat, lakukan langkah-langkah berikut untuk mendistribusikan perangkat.

  1. aiot_bootstrap_setopt.
    •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle);
    • ParameterContohDeskripsi
      AIOT_BOOTSTRAPOPT_MQTT_HANDLEmqtt_handleSaat perangkat menerima pesan distribusi yang dikirim oleh IoT Platform, callback ini dipanggil.
  2. Masuk ke konsol IoT Platform dan distribusikan perangkat.
  3. Setelah perangkat menerima pesan, perangkat offline. Ulangi Langkah 1 hingga Langkah 4 untuk mendapatkan endpoint dan menghubungkan ulang perangkat ke IoT Platform.

Langkah 6:

Panggil operasi aiot_bootstrap_deinit untuk menghapus bootstrap

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

Apa yang harus dilakukan selanjutnya

  • Dalam contoh ini, file eksekusi ./demos/bootstrap-posix-demo telah dihasilkan.

    Untuk informasi lebih lanjut, lihat Siapkan Lingkungan.

  • Lihat log.