Mendistribusikan perangkat. File kode contoh ./demos/bootstrap_posix_demo.c digunakan.
Informasi latar belakang
Langkah 1: Inisialisasi klien
- Tambahkan file header.
... ... #include "aiot_bootstrap_api.h" Tambahkan dependensi dasar dan konfigurasikan fitur output log.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);- 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:
- 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); ... ...Parameter Contoh Deskripsi product_key a18wP****** Parameter device_secret diperlukan saat Anda membuat koneksi MQTT menggunakan endpoint dan nomor port yang diperoleh.
device_name LightSwitch device_secret uwMTmVAMnGGHaAkqmeDY6cHxxB******
- 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);Parameter Contoh Deskripsi AIOT_BOOTSTRAPOPT_RECV_HANDLER demo_bootstrap_recv_handler Saat pesan distribusi perangkat diterima, callback ini dipanggil. AIOT_BOOTSTRAPOPT_USERDATA demo_info Mengatur konteks. Saat callback demo_bootstrap_recv_handlerdipanggil, parameteruserdatadikembalikan. Anda harus mengonversi tipe data sebelum menggunakan parameter ini.
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);Parameter Contoh Deskripsi AIOT_BOOTSTRAPOPT_EVENT_HANDLER demo_bootstrap_event_handler Jika status koneksi perangkat berubah, callback dipanggil untuk melakukan operasi yang diperlukan.
Langkah 3: Kirim permintaan
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
res = aiot_bootstrap_recv(bootstrap_handle); if (res < STATE_SUCCESS) { printf("aiot_bootstrap_recv gagal, res: -0x%04X\n", -res); return -1; }- Tentukan logika pemrosesan callback.Saat menentukan logika pemrosesan callback, perhatikan item berikut:
Tipe pesan Deskripsi AIOT_BOOTSTRAPRECV_STATUS_CODE Kode 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_INFO Pesan 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_NOTIFY Pesan 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.
- aiot_bootstrap_setopt.
aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle);Parameter Contoh Deskripsi AIOT_BOOTSTRAPOPT_MQTT_HANDLE mqtt_handle Saat perangkat menerima pesan distribusi yang dikirim oleh IoT Platform, callback ini dipanggil.
- Masuk ke konsol IoT Platform dan distribusikan perangkat.
- 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.