Topik ini menjelaskan cara memanggil operasi API dari Link SDK for C untuk mengirimkan atau menghapus tag perangkat ke/dari IoT Platform. Contoh ini menggunakan file kode sampel bernama ./demos/devinfo_posix_demo.c.
Informasi latar belakang
Untuk informasi lebih lanjut tentang tag perangkat, lihat Ikhtisar.
Fitur tag perangkat hanya tersedia untuk perangkat yang terhubung ke IoT Platform melalui Message Queuing Telemetry Transport (MQTT). Untuk informasi lebih lanjut tentang kode terkait koneksi MQTT untuk mengonfigurasi fitur tersebut, lihat Ikhtisar.
Langkah 1: Inisialisasi klien
Tambahkan file header.
…… …… #include "aiot_devinfo_api.h"Tambahkan dependensi dasar dan konfigurasikan fitur keluaran log.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);Panggil operasi aiot_devinfo_init untuk membuat instance klien bernama
Devinfodan inisialisasi parameter default.devinfo_handle = aiot_devinfo_init(); if (devinfo_handle == NULL) { demo_mqtt_stop(&mqtt_handle); printf("aiot_devinfo_init gagal\n"); return -1; }
Langkah 2: Konfigurasi fitur
Panggil operasi aiot_devinfo_setopt untuk mengonfigurasi fitur berikut:
Hubungkan dengan penanganan koneksi MQTT.
PentingSebelum mengonfigurasi parameter spesifik tag perangkat, pastikan bahwa informasi verifikasi perangkat telah ditentukan. Untuk informasi lebih lanjut, lihat Contoh.
Kode sampel:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, mqtt_handle);Parameter:
Parameter
Contoh
Deskripsi
AIOT_DEVINFOOPT_MQTT_HANDLE
mqtt_handle
Tag perangkat.
Konfigurasikan fungsi callback pesan.
Kode sampel:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_RECV_HANDLER, (void *)demo_devinfo_recv_handler);Parameter:
Parameter
Contoh
Deskripsi
AIOT_DEVINFOOPT_RECV_HANDLER
demo_devinfo_recv_handler
Saat pesan spesifik tag perangkat diterima, fungsi callback dipanggil.
Konfigurasikan pemantauan status.
Tentukan fungsi callback untuk memantau status.
Saat menentukan logika pemrosesan fungsi callback, perhatikan hal-hal berikut:
Jika pengiriman tag gagal, jenis event berikut dikembalikan:
Jenis event
Deskripsi
AIOT_DEVINFOEVT_INVALID_DEVINFO
Informasi perangkat dalam respons tidak valid. ProductKey dan DeviceName tidak dapat diperoleh.
AIOT_DEVINFOEVT_INVALID_RESPONSE
Bidang dalam respons tidak valid.
AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT
Format bidang dalam respons tidak valid.
Dalam contoh ini, respons dicetak. Anda dapat menentukan logika pemrosesan berdasarkan kebutuhan bisnis Anda.
void demo_devinfo_event_handler(void *handle, const aiot_devinfo_event_t *event, void *userdata) { switch (event->type) { case AIOT_DEVINFOEVT_INVALID_DEVINFO: { printf("AIOT_DEVINFOEVT_INVALID_DEVINFO\n"); } break; case AIOT_DEVINFOEVT_INVALID_RESPONSE: { printf("AIOT_DEVINFOEVT_INVALID_RESPONSE\n"); } break; case AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT: { printf("AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT\n"); } break; default: { } } }Tentukan fungsi callback untuk memantau status.
Kode sampel:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_EVENT_HANDLER, (void *)demo_devinfo_event_handler);Parameter:
Parameter
Contoh
Deskripsi
AIOT_DEVINFOOPT_EVENT_HANDLER
demo_devinfo_event_handler
Jika status koneksi perangkat berubah, callback dipanggil untuk melakukan operasi yang diperlukan.
Langkah 3: Perbarui tag
Panggil fungsi aiot_devinfo_send untuk mengirim permintaan ke IoT Platform. Untuk informasi lebih lanjut tentang parameter dalam permintaan, lihat langkah sebelumnya.
Saat mengirim permintaan, perhatikan hal-hal berikut:
aiot_devinfo_msg_t adalah parameter input dari fungsi
aiot_devinfo_send(). Parameter ini menentukan format data.AIOT_DEVINFO_MSG_UPDATE menentukan jenis pesan.
Pesan sampel:
Pesan permintaan
Format Alink
Deskripsi
[ { "attrKey": "testKey", "attrValue": "testValue" } ]{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey", "attrValue": "testValue" } ], "method": "thing.deviceinfo.update" }Konten pesan dalam format JSON. Kontennya adalah nilai parameter params dalam data Alink. Untuk informasi lebih lanjut, lihat Kirim tag.
Dalam contoh ini, tag yang ditentukan adalah
testKey: testValue.
{ aiot_devinfo_msg_t devinfo_update; char *update = "[{\"attrKey\":\"testKey\",\"attrValue\":\"testValue\"}]"; memset(&devinfo_update, 0, sizeof(aiot_devinfo_msg_t)); devinfo_update.product_key = product_key; devinfo_update.device_name = device_name; devinfo_update.type = AIOT_DEVINFO_MSG_UPDATE; devinfo_update.data.update.params = update; res = aiot_devinfo_send(devinfo_handle, &devinfo_update); if (res < STATE_SUCCESS) { aiot_devinfo_deinit(&devinfo_handle); demo_mqtt_stop(&mqtt_handle); return -1; } printf("aiot_devinfo_send update msg id: %d\n", res); }Setelah IoT Platform menerima pesan permintaan, IoT Platform memperbarui tag perangkat dan mengembalikan pesan respons.
Setelah perangkat menerima pesan respons, fungsi callback
demo_devinfo_recv_handlerdipanggil untuk melakukan operasi yang diperlukan.Saat menentukan logika pemrosesan fungsi callback, perhatikan hal-hal berikut:
aiot_devinfo_recv_t adalah parameter input dari fungsi callback. Parameter ini menentukan format data.
AIOT_DEVINFORECV_GENERIC_REPLY menentukan jenis pesan.
Dalam contoh ini, pesan dicetak.
void demo_devinfo_recv_handler(void *handle, const aiot_devinfo_recv_t *packet, void *userdata) { switch (packet->type) { /* Pesan respons dari IoT Platform. */ case AIOT_DEVINFORECV_GENERIC_REPLY: { printf("pk: %s, dn: %s, code: %d, msg id: %d, data: %.*s, message: %.*s\n", packet->product_key, packet->device_name, packet->data.generic_reply.code, packet->data.generic_reply.msg_id, packet->data.generic_reply.data_len, packet->data.generic_reply.data, packet->data.generic_reply.message_len, packet->data.generic_reply.message); } break; default: { } } }
(Opsional) Langkah 4: Hapus tag
Setelah tag perangkat dikirimkan ke IoT Platform, Anda dapat memanggil operasi aiot_devinfo_send untuk menghapus tag tersebut.
Saat mengirim permintaan, perhatikan hal-hal berikut:
aiot_devinfo_msg_t adalah parameter input dari fungsi
aiot_devinfo_send(). Parameter ini menentukan format data.AIOT_DEVINFO_MSG_DELETE menentukan jenis pesan.
Pesan sampel:
Pesan permintaan
Format Alink
Deskripsi
{ "attrKey": "testKey" }{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey", } ], "method": "thing.deviceinfo.update" }Konten pesan dalam format JSON. Kontennya adalah nilai parameter params dalam data Alink. Untuk informasi lebih lanjut, lihat Hapus tag.
Dalam contoh ini, tag yang ditentukan adalah
testKey.{ aiot_devinfo_msg_t devinfo_delete; char *delete = "[{\"attrKey\":\"testKey\"}]"; memset(&devinfo_delete, 0, sizeof(aiot_devinfo_msg_t)); devinfo_delete.product_key = product_key; devinfo_delete.device_name = device_name; devinfo_delete.type = AIOT_DEVINFO_MSG_DELETE; devinfo_delete.data.delete.params = delete; res = aiot_devinfo_send(devinfo_handle, &devinfo_delete); if (res < STATE_SUCCESS) { aiot_devinfo_deinit(&devinfo_handle); demo_mqtt_stop(&mqtt_handle); return -1; } printf("aiot_devinfo_send delete msg id: %d\n", res); }
Setelah IoT Platform menerima pesan permintaan, IoT Platform menghapus tag dan mengembalikan pesan respons.
Setelah perangkat menerima pesan respons, fungsi callback demo_devinfo_recv_handler dipanggil untuk melakukan operasi yang diperlukan.
Untuk informasi lebih lanjut, lihat Proses pesan respons.
Langkah 5: Keluar dari program
Panggil fungsi aiot_devinfo_deinit untuk menghapus instance klien Devinfo dan melepaskan sumber daya yang sesuai.
res = aiot_devinfo_deinit(&devinfo_handle);
if (res < STATE_SUCCESS) {
demo_mqtt_stop(&mqtt_handle);
printf("aiot_devinfo_deinit gagal: -0x%04X\n", -res);
return -1;
}Apa yang harus dilakukan selanjutnya
Setelah mengonfigurasi file kode sampel, kompilasi file tersebut untuk menghasilkan file yang dapat dieksekusi. Dalam contoh ini, file yang dapat dieksekusi ./demos/devinfo-posix-demo dihasilkan.
Untuk informasi lebih lanjut, lihat Siapkan Lingkungan.
Untuk informasi lebih lanjut tentang hasil eksekusi, lihat Lihat Log.