All Products
Search
Document Center

IoT Platform:Contoh

Last Updated:Jul 06, 2025

Konfigurasi perangkat dari jarak jauh dilakukan menggunakan file kode contoh ./demos/cota_basic_demo.c.

Informasi latar belakang

  • Untuk informasi lebih lanjut tentang konfigurasi jarak jauh, lihat Ikhtisar.
  • Ikhtisar.

Langkah 1: Inisialisasi klien

  1. Tambahkan file header.

    ...
    ……
    #include "aiot_ota_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_ota_init untuk membuat OTA.

        ota_handle = aiot_ota_init();
        if (NULL == ota_handle) {
            printf("aiot_ota_init gagal\r\n");
            aiot_mqtt_deinit(&mqtt_handle);
            return -2;
        }

Langkah 2: Konfigurasikan fitur yang diperlukan

Panggil operasi aiot_ota_setopt untuk mengonfigurasi item berikut.


  1. Penting Pastikan informasi autentikasi perangkat telah ditentukan. Untuk informasi lebih lanjut, lihat Contoh.Sebelum menyetel parameter spesifik konfigurasi jarak jauh, pastikan informasi autentikasi perangkat telah ditentukan. Untuk informasi lebih lanjut, lihat .
    •     aiot_ota_setopt(ota_handle, AIOT_OTAOPT_MQTT_HANDLE, mqtt_handle);
    • ParameterContohDeskripsi
      AIOT_OTAOPT_MQTT_HANDLEmqtt_handleAnda harus membangun koneksi MQTT. Parameter ini digunakan untuk menghubungkan dengan handle koneksi MQTT.
  2. Tentukan callback untuk memproses perintah konfigurasi jarak jauh.
    •     aiot_ota_setopt(ota_handle, AIOT_OTAOPT_RECV_HANDLER, demo_ota_recv_handler);
    • ParameterContohDeskripsi
      AIOT_OTAOPT_MQTT_HANDLEdemo_ota_recv_handlerCallback ini dipanggil ketika perangkat menerima perintah konfigurasi jarak jauh dari IoT Platform.

Langkah 3: Meminta informasi konfigurasi

Jika perangkat offline ketika perintah konfigurasi jarak jauh dikirim dari IoT Platform, Anda dapat meminta perintah konfigurasi jarak jauh setelah perangkat online.

Catatan Jika tidak ada pekerjaan perangkat yang dibuat di IoT Platform, respons berikut akan dikembalikan setelah Anda memanggil operasi: revice task get detail reply, task_id:[$next],status:[9].
  1. Panggil operasi aiot_mqtt_pub untuk mendapatkan informasi konfigurasi jarak jauh dari IoT Platform.
    •     {
              char *topic_string = "/sys/a18wP******/LightSwitch/thing/config/get";
              char *payload_string = "{\"id\":\"123\",\"params\":{\"configScope\":\"product\",\"getType\":\"file\"}}";
      
              res = aiot_mqtt_pub(mqtt_handle, topic_string, (uint8_t *)payload_string, strlen(payload_string), 0);
              if (res < STATE_SUCCESS) {
                  printf("aiot_mqtt_pub gagal: -0x%04X\r\n", -res);
                  /* Lepaskan sumber daya instance MQTT jika koneksi MQTT gagal dibuat. */
                  goto exit;
              }
          }
    • ParameterContohDeskripsi
      topic_string/sys/a18wP******5/LightSwitch/thing/config/getTopik yang digunakan untuk mendapatkan informasi konfigurasi jarak jauh.

      Untuk informasi lebih lanjut, lihat Topik.

      • a1oGs****** adalah ProductKey perangkat.

      • LightSwitch adalah DeviceName perangkat.

      Untuk informasi lebih lanjut, lihat Dapatkan informasi verifikasi perangkat.

      payload_string{\"id\":\"123\",\"params\":{\"configScope\":\"product\",\"getType\":\"file\"}}Konten pesan permintaan.

      Konten pesan dalam format JSON. Konten tersebut adalah nilai parameter params dalam data Alink. Untuk informasi lebih lanjut, lihat Perangkat meminta informasi konfigurasi dari IoT Platform.

  2. Setelah IoT Platform menerima permintaan, IoT Platform mengembalikan informasi konfigurasi ke perangkat.
    Catatan Ukuran maksimum informasi konfigurasi jarak jauh adalah 64 KB.
    Di konsol IoT Platform, aktifkan fitur konfigurasi jarak jauh dan edit informasi konfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasi Jarak Jauh.
  3. Panggil operasi aiot_mqtt_recv untuk menerima informasi konfigurasi jarak jauh.
    • Jika pointer g_dl_handle bernilai null, klien mengirimkan permintaan untuk mendapatkan pesan MQTT secara berkala.
    • Jika pointer g_dl_handle tidak bernilai null, fungsi aiot_download_recv dipanggil.
    while (1) {
            aiot_mqtt_process(mqtt_handle);
            res = aiot_mqtt_recv(mqtt_handle);
    
            if (res == STATE_SYS_DEPEND_NWK_CLOSED) {
                sleep(1);
            }
            if (NULL != g_dl_handle) {
                /* Sebelum informasi konfigurasi jarak jauh diterima, atur periode timeout penerimaan pesan MQTT menjadi 100 ms untuk mengurangi interval antara dua unduhan konfigurasi jarak jauh. */
                int32_t ret = aiot_download_recv(g_dl_handle);
                timeout_ms = 100;
    
                if (STATE_DOWNLOAD_FINISHED == ret) {
                    aiot_download_deinit(&g_dl_handle);
                    /* Setelah informasi konfigurasi jarak jauh diterima, atur periode timeout penerimaan pesan MQTT menjadi 5.000 ms, yang merupakan nilai default. */
                    timeout_ms = 5000;
                }
                aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_RECV_TIMEOUT_MS, (void *)&timeout_ms);
            }
        }
  4. demo_ota_recv_handler dipanggil.
    Saat menentukan logika pemrosesan callback, perhatikan hal-hal berikut:
    • IoT Platform mengirimkan informasi konfigurasi menggunakan topik /sys/${ProductKey}/${DeviceName}/thing/config/push.
    • aiot_ota_recv_t menunjukkan format data. Link SDK secara otomatis mem-parsing informasi yang diterima.
    • AIOT_OTARECV_COTA menunjukkan tipe pesan.
    • Callback digunakan untuk memulai Permintaan HTTPS dan mengunduh file konfigurasi jarak jauh. Untuk informasi lebih lanjut tentang cara menulis callback, lihat Langkah 5: Unduh File Konfigurasi Jarak Jauh.

Langkah 4: Terima informasi konfigurasi jarak jauh

Jika perangkat online, perangkat dapat menerima informasi konfigurasi jarak jauh yang dikirim dari IoT Platform. Kemudian, callback demo_ota_recv_handler dipanggil.

Untuk informasi lebih lanjut, lihat Tentukan Logika Callback.

Langkah 5: Unduh file konfigurasi jarak jauh

Penting Setelah perangkat menerima informasi konfigurasi jarak jauh, perangkat tidak secara otomatis mengunduh file konfigurasi. Anda harus memanggil operasi API yang disediakan oleh Link SDK untuk mengunduh file.
  1. Panggil operasi aiot_download_init untuk membuat download.
                uint32_t res = 0;
                uint16_t port = 443;
                uint32_t max_buffer_len = 2048;
                aiot_sysdep_network_cred_t cred;
                void *dl_handle = aiot_download_init();
    
                if (NULL == dl_handle || NULL == ota_msg->task_desc) {
                    return;
                }
    
                printf("configId: %s, configSize: %u Bytes\r\n", ota_msg->task_desc->version,
                       ota_msg->task_desc->size_total);
    
                memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t));
                cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA;
                cred.max_tls_fragment = 16384;
                cred.x509_server_cert = ali_ca_cert;
                cred.x509_server_cert_len = strlen(ali_ca_cert);
  2. Panggil operasi aiot_download_setopt untuk menyetel parameter yang terkait dengan tugas unduhan.
                /* Atur protokol TLS untuk pengunduhan. */
                if ((STATE_SUCCESS != aiot_download_setopt(dl_handle, AIOT_DLOPT_NETWORK_CRED, (void *)(&cred))) ||
                    /* Atur nomor port server yang akan diakses. */
                    (STATE_SUCCESS != aiot_download_setopt(dl_handle, AIOT_DLOPT_NETWORK_PORT, (void *)(&port))) ||
                    /* Atur informasi tugas. Anda bisa mendapatkan informasi dari field task_desc di parameter input ota_msg. Informasi tersebut mencakup URL unduhan, serta ukuran dan versi file konfigurasi jarak jauh. */
                    (STATE_SUCCESS != aiot_download_setopt(dl_handle, AIOT_DLOPT_TASK_DESC, (void *)(ota_msg->task_desc))) ||
                    /* Atur callback yang dipanggil saat konten yang diunduh diterima. */
                    (STATE_SUCCESS != aiot_download_setopt(dl_handle, AIOT_DLOPT_RECV_HANDLER, (void *)(demo_download_recv_handler))) ||
                    /* Atur panjang buffer maksimum untuk satu unduhan. Pengguna akan diberitahu jika batas tercapai. */
                    (STATE_SUCCESS != aiot_download_setopt(dl_handle, AIOT_DLOPT_BODY_BUFFER_MAX_LEN, (void *)(&max_buffer_len))) ||
                    /* Kirim permintaan HTTP GET ke server HTTP. */
                    (STATE_SUCCESS != aiot_download_send_request(dl_handle))) {
                    if (res != STATE_SUCCESS) {
                        aiot_download_deinit(&dl_handle);
                        break;
                    }
                }
  3. Setelah Anda memulai permintaan unduhan, IoT Platform mengembalikan pesan respons. Kemudian, callback demo_download_recv_handler dipanggil untuk mengunduh file konfigurasi jarak jauh.
    Saat menentukan logika pemrosesan callback, perhatikan hal-hal berikut:
    • aiot_download_recv_t adalah parameter input callback. Parameter ini menunjukkan format data.
    • AIOT_DLRECV_HTTPBODY menunjukkan tipe pesan (packet->type).
    • Dalam contoh ini, informasi dicetak. Anda dapat mengunduh file konfigurasi ke lokasi tertentu sesuai dengan kebutuhan bisnis Anda.
    void demo_download_recv_handler(void *handle, const aiot_download_recv_t *packet, void *userdata)
    {
        /* Anda hanya dapat menyetel packet->type ke AIOT_DLRECV_HTTPBODY. */
        if (!packet || AIOT_DLRECV_HTTPBODY != packet->type) {
            return;
        }
        int32_t percent = packet->data.percent;
        uint8_t *src_buffer = packet->data.buffer;
        uint32_t src_buffer_len = packet->data.len;
    
        /* Nilai persentase negatif menunjukkan bahwa terjadi pengecualian selama penerimaan data atau otentikasi digest gagal. */
        if (percent < 0) {
            /* Terjadi pengecualian selama penerimaan data atau otentikasi digest gagal. */
            printf("pengecualian terjadi, persentase adalah %d\r\n", percent);
            return;
        }
    ……
    ...
    }
  4. Panggil operasi aiot_download_report_progress untuk mengirimkan kemajuan unduhan.
    void demo_download_recv_handler(void *handle, const aiot_download_recv_t *packet, void *userdata)
    {
        /* Anda hanya dapat menyetel packet->type ke AIOT_DLRECV_HTTPBODY. */
        if (!packet || AIOT_DLRECV_HTTPBODY != packet->type) {
            return;
    ...
    ...
        aiot_download_report_progress(handle, percent);
        printf("panjang konfigurasi adalah %d, isi konfigurasi adalah %.*s\r\n", src_buffer_len, src_buffer_len, (char *)src_buffer);
    }
  5. Setelah Anda mengunduh file, panggil operasi aiot_download_deinit untuk membersihkan handle (g_dl_handle).
    while (1) {
            aiot_mqtt_process(mqtt_handle);
            res = aiot_mqtt_recv(mqtt_handle);
    
            if (res == STATE_SYS_DEPEND_NWK_CLOSED) {
                sleep(1);
            }
            if (NULL != g_dl_handle) {
                /* Sebelum informasi konfigurasi jarak jauh diterima, atur periode timeout penerimaan pesan MQTT menjadi 100 ms untuk mengurangi interval antara dua unduhan konfigurasi jarak jauh. */
                int32_t ret = aiot_download_recv(g_dl_handle);
                timeout_ms = 100;
    
                if (STATE_DOWNLOAD_FINISHED == ret) {
                    aiot_download_deinit(&g_dl_handle);
                    /* Setelah informasi konfigurasi jarak jauh diterima, atur periode timeout penerimaan pesan MQTT menjadi 5.000 ms, yang merupakan nilai default. */
                    timeout_ms = 5000;
                }
                aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_RECV_TIMEOUT_MS, (void *)&timeout_ms);
            }
        }

Langkah 6: Keluar dari program

Panggil operasi aiot_ota_deinit untuk menghapus OTA

    aiot_ota_deinit(&ota_handle);

Apa yang harus dilakukan selanjutnya