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
-
Tambahkan file header.
…… …… #include "aiot_bootstrap_api.h" Konfigurasikan dependensi tingkat dasar dan output log.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);-
Panggil aiot_bootstrap_init untuk membuat instance
Bootstrapbootstrap_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.
-
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******
-
-
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_handlerdipicu,userdatadikembalikan. Lakukan casting data yang dikembalikan ke tipe yang sesuai sebelum digunakan.
-
-
Konfigurasi pemantauan status.
-
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; } } -
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
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
-
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; } -
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.
-
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.
-
-
Masuk ke Konsol Platform IoT dan lakukan operasi distribusi perangkat.
Untuk informasi selengkapnya, lihat Distribusi perangkat di Platform IoT.
-
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.