Artikel ini menjelaskan cara memanggil operasi API dari Link SDK for C untuk menghubungkan perangkat berbasis HTTPS dengan IoT Platform dan menerima pesan. Dalam contoh ini, file kode sampel ./demos/http_basic_demo digunakan.
Informasi latar belakang
Untuk informasi lebih lanjut tentang koneksi HTTPS, lihat Ikhtisar.
Langkah 1: Inisialisasi klien
Tambahkan dependensi dasar dan konfigurasikan fitur output log. Gunakan operasi aiot_http_init untuk membuat instance klien dan menginisialisasi parameter default.
/* Tambahkan dependensi dasar ke SDK. */
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
/* Konfigurasikan fitur output log untuk SDK. */
aiot_state_set_logcb(demo_state_logcb);
...
...
/* Buat instance klien HTTPS dan atur parameter default. */
http_handle = aiot_http_init();Langkah 2: Konfigurasikan fitur yang diperlukan
Panggil operasi aiot_http_setopt untuk mengonfigurasi item berikut:
Untuk informasi lebih lanjut tentang parameter operasi, lihat aiot_http_option_t.
Atur parameter koneksi.
Kode Sampel
char *http_host = "iot-as-http.cn-shanghai.aliyuncs.com"; ... aiot_sysdep_network_cred_t cred; char *product_key = "a18wP******"; char *device_name = "LightSwitch"; char *device_secret = "uwMTmVAMnGGHaAkqmeDY6cHxxB******"; ... ... /* Atur nama domain server HTTPS. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_HOST, (void *)host); /* Atur port server. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_PORT, (void *)&port); /* Atur kredensial keamanan perangkat. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_NETWORK_CRED, &cred); /* Atur ProductKey perangkat. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_PRODUCT_KEY, product_key); /* Atur DeviceName perangkat. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_DEVICE_NAME, device_name); /* Atur DeviceSecret perangkat. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_DEVICE_SECRET, device_secret);Parameter:
Parameter
Contoh
Deskripsi
http_host
iot-06z00ax1o******.http.iothub.aliyuncs.com
Titik akhir.
Jika Anda menggunakan instansi Enterprise Edition, atau instansi publik yang diaktifkan pada 30 Juli 2021 atau setelahnya, lihat titik akhir di halaman Detail Instansi. Klik Lihat Konfigurasi Pengembangan di pojok kanan atas. Di panel Konfigurasi Pengembangan, titik akhir ditampilkan.
Jika Anda menggunakan instansi publik yang diaktifkan sebelum 30 Juli 2021, titik akhir adalah
https://iot-as-http.${YourRegionId}.aliyuncs.com.
product_key
a18wP******
Informasi autentikasi perangkat. Untuk informasi lebih lanjut, lihat Dapatkan informasi verifikasi perangkat.
Dalam contoh ini, metode autentikasi sertifikat-unik-per-perangkat digunakan.
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
Konfigurasikan pemantauan status.
Tentukan callback untuk memantau status.
Kode Sampel
int main(int argc, char *argv[]) { ... ... /* Tentukan callback yang dipanggil saat data tiba. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_RECV_HANDLER, demo_http_recv_handler); /* Tentukan callback yang dipanggil saat status internal berubah. */ aiot_http_setopt(http_handle, AIOT_HTTPOPT_EVENT_HANDLER, demo_http_event_handler); }Parameter:
Parameter
Contoh
Deskripsi
AIOT_HTTPOPT_RECV_HANDLER
demo_http_recv_handler
Saat perangkat menerima pesan respons, callback dipanggil untuk melakukan operasi yang diperlukan.
AIOT_HTTPOPT_EVENT_HANDLER
demo_http_event_handler
Saat token berubah, callback dipanggil untuk memastikan validitas token.
Definisikan callback untuk memantau status.
Saat token berubah, callback dipanggil untuk melakukan operasi yang diperlukan.
void demo_http_event_handler(void *handle, const aiot_http_event_t *event, void *user_data) { int32_t res; /* Tangani token yang kedaluwarsa. */ if (event->type == AIOT_HTTPEVT_TOKEN_INVALID) { printf("token tidak valid, panggil iot_http_auth untuk mendapatkan token baru\n"); res = aiot_http_auth(handle); printf("aiot_http_auth dalam callback, res = -0x%04x\r\n", -res); } }Saat pesan jaringan dibaca, callback dipanggil untuk melakukan operasi yang diperlukan. Dalam contoh ini, pesan dicetak. Saat menentukan logika pemrosesan, perhatikan item berikut:
Untuk informasi lebih lanjut tentang parameter pesan respons, lihat Membuat koneksi melalui HTTPS.
Pesan yang diterima berisi bagian-bagian berikut: AIOT_HTTPRECV_STATUS_CODE, AIOT_HTTPRECV_HEADER, dan AIOT_HTTPRECV_BODY. Bagian-bagian ini menunjukkan kode status, tipe pesan, dan badan pesan, masing-masing.
Proses kode status berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang kode status, lihat Daftar Kode Status HTTP.
void demo_http_recv_handler(void *handle, const aiot_http_recv_t *packet, void *userdata) { switch (packet->type) { case AIOT_HTTPRECV_STATUS_CODE: { /* TODO: Jika kode berikut tidak dihapus komentarnya, SDK menerima pesan dan mencetak kode status HTTPS menggunakan callback ini, seperti 404, 200, dan 302. */ /* printf("status code: %d\n", packet->data.status_code.code); */ } break; case AIOT_HTTPRECV_HEADER: { /* TODO: Jika kode berikut tidak dihapus komentarnya, SDK menerima pesan dan mencetak header HTTPS menggunakan callback ini, seperti Content-Length. */ /* printf("key: %s, value: %s\n", packet->data.header.key, packet->data.header.value); */ } break; /* TODO: Jika Anda perlu memproses pesan respons HTTPS dari IoT Platform, tentukan logika. Dalam contoh ini, pesan respons dicetak. */ case AIOT_HTTPRECV_BODY: { printf("%.*s\r\n", packet->data.body.len, packet->data.body.buffer); } break; default: { } break; } }
Langkah 3: Buat koneksi
Panggil operasi aiot_http_auth untuk mengirim permintaan autentikasi ke IoT Platform dan mendapatkan token. Untuk informasi tentang cara menentukan parameter, lihat Atur Parameter Koneksi.
/* Kirim permintaan autentikasi dan dapatkan token. */
res = aiot_http_auth(http_handle);
if (res == 0) {
printf("aiot_http_auth berhasil\r\n");
} else {
/* Jika autentikasi gagal, lepaskan sumber daya instance dan keluar dari program. */
printf("aiot_http_auth gagal, res = -0x%04x\r\n", -res);
aiot_http_deinit(&http_handle);
return -1;
}Langkah 4: Kirim pesan
Panggil operasi aiot_http_send dalam fungsi demo_http_post_lightswitch untuk mengirim pesan ke topik tertentu.
Dalam contoh ini, pesan yang dikirim dicetak. Anda dapat menyesuaikan fungsi
demo_http_post_lightswitchberdasarkan kebutuhan bisnis Anda.Anda harus menghapus simbol anotasi di kedua sisi kode sampel untuk mengirim pesan ke IoT Platform.
Kode Sampel
int32_t demo_http_post_lightswitch(void *handle) { char data[] = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"; int32_t res; res = aiot_http_send(handle, "/a1wAf******/LightSwitch/user/update", (uint8_t *)data, strlen(data)); if (res < 0) { printf("aiot_http_send res = -0x%04X\r\n", -res); return res; } ... ... }Parameter:
Parameter
Contoh
Deskripsi
data[]
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
Pesan yang dikirim ke IoT Platform.
Dalam contoh ini, topik kustom digunakan. Oleh karena itu, Anda dapat menyesuaikan format pesan.
Untuk informasi lebih lanjut tentang format pesan, lihat Format data.
topic
/a1wAf******/LightSwitch/user/update
Topik yang memiliki izin Publikasi.
a18wP******menunjukkan ProductKey perangkat.LightSwitchmenunjukkan DeviceName perangkat.
Perangkat dapat mengirim pesan ke IoT Platform menggunakan topik ini.
Untuk informasi lebih lanjut tentang topik, lihat Topik.
Langkah 5: Terima respons
Setelah pesan dikirim, IoT Platform mengembalikan pesan respons. Perangkat memanggil operasi aiot_http_recv untuk menerima data respons HTTPS dan memproses data menggunakan callback acara.
res = aiot_http_recv(handle);
if (res >= 0) {
/* Jika respons dari server diterima dan kode respons adalah 0, data perangkat dikirimkan. */
return 0;
} else {
printf("aiot_http_recv res = -0x%04X\r\n", -res);
return -1;
}Langkah 6: Keluar dari program
Panggil operasi aiot_http_deinit untuk menghapus instance klien HTTPS dan melepaskan sumber daya.
aiot_http_deinit(&http_handle);
printf("program keluar secara normal\r\n");
printf("\r\n");
return 0;Apa yang harus dilakukan selanjutnya
Setelah Anda mengonfigurasi file kode sampel, kompilasi file untuk menghasilkan file yang dapat dieksekusi. Dalam contoh ini, file yang dapat dieksekusi
./output/http-basic-demodihasilkan.Untuk informasi lebih lanjut, lihat Kompilasi dan Pelaksanaan.
Untuk informasi lebih lanjut tentang hasil pelaksanaan, lihat Lihat Log.