Topik ini menjelaskan cara memanggil operasi API dari Link SDK for C untuk mengimplementasikan fitur model Thing Specification Language (TSL) pada perangkat. Dalam contoh ini, file kode contoh bernama ./demos/data_model_basic_demo.c digunakan.
Informasi latar belakang
Untuk informasi lebih lanjut tentang fitur model TSL, lihat Contoh.
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 saat mengonfigurasi fitur tersebut, lihat Ikhtisar.
Langkah 1: Inisialisasi SDK
Tambahkan file header.
…… …… #include "aiot_dm_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_dm_init untuk membuat instance klien bernama
data-modeldan inisialisasi parameter default.dm_handle = aiot_dm_init(); if (dm_handle == NULL) { printf("aiot_dm_init gagal"); return -1;}
Langkah 2: Konfigurasikan fitur yang diperlukan
Panggil operasi aiot_dm_setopt untuk mengonfigurasi item berikut:
Asosiasikan dengan penanganan koneksi MQTT.
PentingSebelum mengonfigurasi parameter spesifik tag perangkat, pastikan bahwa informasi verifikasi perangkat telah ditentukan. Untuk informasi lebih lanjut, lihat Contoh.
Kode contoh:
aiot_dm_setopt(dm_handle, AIOT_DMOPT_MQTT_HANDLE, mqtt_handle);Parameter:
Parameter
Contoh
Deskripsi
AIOT_DMOPT_MQTT_HANDLE
mqtt_handle
Anda harus membuat koneksi MQTT. Parameter ini digunakan untuk mengasosiasikan dengan penanganan koneksi MQTT.
Konfigurasikan fungsi callback untuk memproses pesan TSL.
Definisikan fungsi callback.
static void demo_dm_recv_handler(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_handler, type = %d\r\n", recv->type); switch (recv->type) { /* Kirim respons dari IoT Platform setelah perangkat mengirimkan properti, mengirimkan acara, meminta properti yang diinginkan, atau menghapus properti yang diinginkan. */ case AIOT_DMRECV_GENERIC_REPLY: { demo_dm_recv_generic_reply(dm_handle, recv, userdata); } break; /* Konfigurasikan properti. */ case AIOT_DMRECV_PROPERTY_SET: { demo_dm_recv_property_set(dm_handle, recv, userdata); } break; /* Panggil layanan secara asinkron */ case AIOT_DMRECV_ASYNC_SERVICE_INVOKE: { demo_dm_recv_async_service_invoke(dm_handle, recv, userdata); } break; /* Panggil layanan secara sinkron */ case AIOT_DMRECV_SYNC_SERVICE_INVOKE: { demo_dm_recv_sync_service_invoke(dm_handle, recv, userdata); } break; /* Kirim data biner downstream */ case AIOT_DMRECV_RAW_DATA: { demo_dm_recv_raw_data(dm_handle, recv, userdata); } break; /* Saat Anda memanggil layanan secara sinkron untuk mengirim data biner, parameter rrpc_id ditambahkan ke data biner. */ case AIOT_DMRECV_RAW_SYNC_SERVICE_INVOKE: { demo_dm_recv_raw_sync_service_invoke(dm_handle, recv, userdata); } break; /* Kirim respons dari IoT Platform setelah perangkat mengirimkan data biner. */ case AIOT_DMRECV_RAW_DATA_REPLY: { demo_dm_recv_raw_data_reply(dm_handle, recv, userdata); } break; default: break; } }Konfigurasikan fungsi callback untuk memproses pesan TSL.
Kode contoh:
aiot_dm_setopt(dm_handle, AIOT_DMOPT_RECV_HANDLER, (void *)demo_dm_recv_handler);Parameter:
Parameter
Contoh
Deskripsi
AIOT_DMOPT_RECV_HANDLER
demo_dm_recv_handler
Fungsi ini dipanggil ketika pesan TSL diterima.
Tentukan apakah IoT Platform mengembalikan respons.
Anda dapat menggunakan kode berikut untuk menentukan apakah IoT Platform mengembalikan respons setelah menerima pesan perangkat:
Kode contoh:
uint8_t post_reply = 1; …… …… aiot_dm_setopt(dm_handle, AIOT_DMOPT_POST_REPLY, (void *)&post_reply);Parameter:
Parameter
Contoh
Deskripsi
AIOT_DMOPT_POST_REPLY
1
Nilai valid:
1: mengembalikan respons
0: tidak mengembalikan respons
Jika nilai parameter AIOT_DMOPT_POST_REPLY adalah 1, Anda harus menentukan logika untuk memproses pesan respons.
Anda dapat menentukan logika pemrosesan berdasarkan kebutuhan bisnis Anda. Dalam contoh ini, pesan respons dicetak.
ICA Standard Data Format (Alink JSON)

Pesan respons terdapat dalam struktur
recv->data.generic_reply. Pesan-pesan tersebut menggunakan format data Alink. Untuk informasi lebih lanjut, lihat Properti perangkat, acara, dan layanan.static void demo_dm_recv_generic_reply(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata){ printf("demo_dm_recv_generic_reply msg_id = %d, code = %d, data = %.*s, message = %.*s\r\n", recv->data.generic_reply.msg_id, recv->data.generic_reply.code, recv->data.generic_reply.data_len, recv->data.generic_reply.data, recv->data.generic_reply.message_len, recv->data.generic_reply.message); }Custom data format

Pesan respons terdapat dalam struktur
recv->data.raw_data. Sebelum pesan dikirim, Anda harus mengunggah skrip penguraian ke IoT Platform. Untuk informasi lebih lanjut, lihat Penguraian pesan.static void demo_dm_recv_raw_data_reply(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_async_service_invoke receive reply for up_raw msg, data len = %d\r\n", recv->data.raw_data.data_len); }
Langkah 3: Kirim properti perangkat
Setelah menghubungkan perangkat ke IoT Platform melalui MQTT, panggil operasi aiot_dm_send untuk mengirimkan properti perangkat. Properti yang akan dikirimkan disimpan di lokasi tertentu menggunakan struktur aiot_dm_msg_t. Struktur ini merupakan parameter input dari operasi aiot_dm_send.
Tulis kode untuk mengirimkan properti perangkat berdasarkan format data perangkat berikut:
ICA standard data format (Alink JSON)
Tambahkan fitur TSL.
Masuk ke Konsol IoT Platform. Pada tab Feature Definition halaman Product Details, tambahkan properti ke modul TSL default atau modul kustom. Misalnya, Anda dapat membuat modul kustom bernama
demo_extra_block. Untuk informasi lebih lanjut, lihat Tambahkan fitur TSL.Tabel berikut menjelaskan properti TSL yang ditambahkan dalam contoh ini.
Modul TSL
Fitur
Pengenal
Tipe data
Definisi data
Tipe baca/tulis
Modul default
Saklar lampu malam 1
LightSwitch
bool
0: on
1: off
Baca dan tulis
Daya
Power
teks
Panjang data: 10.240 karakter
Baca dan tulis
Arus operasi
WF
int32
Nilai valid: 0 hingga 10.
Ukuran langkah: 1
Satuan: A
Baca dan tulis
demo_extra_block
Saklar lampu malam 2
NightLightSwitch
bool
0: on
1: off
Baca dan tulis
Dalam contoh ini, Anda juga dapat menambahkan fitur dengan mengimpor File TSL. Untuk informasi lebih lanjut, lihat Tambahkan fitur TSL secara batch.
Tentukan isi pesan properti.
Kode contoh:
Modul default:
/* Kirim properti. */ demo_send_property_post(dm_handle, "{\"LightSwitch\": 0}"); /* Kirim beberapa properti sekaligus. */ demo_send_property_batch_post(dm_handle, "{\"properties\":{\"Power\": [ {\"value\":\"on\",\"time\":1612684518000}],\"WF\": [{\"value\": 3,\"time\":1612684518000}]}}");Modul kustom:
demo_send_property_post(dm_handle, "{\"demo_extra_block:NightLightSwitch\": 1}");
Contoh pesan:
Pesan TSL yang dikirimkan berada dalam format JSON. Tabel berikut menjelaskan pesan contoh dan format Alink dari pesan tersebut. Untuk informasi lebih lanjut, lihat Properti perangkat, acara, dan layanan.
CatatanAnda hanya perlu fokus pada konten pesan, yang ditunjukkan oleh parameter params dalam data Alink. Link SDK mengenkapsulasi dan memproses pesan tersebut.
Tipe pesan
Contoh
Format Alink
Satu properti
{\"LightSwitch\": 0}{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": { "LightSwitch": 0 }, "method": "thing.event.property.post" }Beberapa properti
{\"properties\":{\"Power\": [ {\"value\":\"on\",\"time\":1612684518000}],\"WF\": [{\"value\": 3,\"time\":1612684518000}]}}{ "id": 123, "version": "1.0", "sys":{ "ack":0 }, "method": "thing.event.property.batch.post", "params": { "properties": { "Power": [{ "value": "on", "time": 1612684518000 }, ], "WF": [{ "value": 3, "time": 1612684518000 }, ] }, }Setelah beberapa properti dikirimkan, IoT Platform mengirimkan respons untuk mengonfirmasi bahwa pesan telah diterima. Untuk menerima respons tersebut, Anda harus berlangganan topik
/sys/a18wP******/LightSwitch/thing/event/property/batch/post_reply.Kode contoh:
aiot_mqtt_sub(mqtt_handle, "/sys/a18wP******/LightSwitch/thing/event/property/batch/post_reply", NULL, 1, NULL);Deskripsi:
a1oGs******adalah ProductKey dari perangkat.LightSwitchadalah DeviceName dari perangkat.
Definisikan fungsi untuk mengirimkan properti.
/* Kirim properti. */ int32_t demo_send_property_post(void *dm_handle, char *params) { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_PROPERTY_POST; msg.data.property_post.params = params; return aiot_dm_send(dm_handle, &msg); } /* Kirim beberapa properti sekaligus. */ int32_t demo_send_property_batch_post(void *dm_handle, char *params) { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_PROPERTY_BATCH_POST; msg.data.property_post.params = params; return aiot_dm_send(dm_handle, &msg); }
Custom data format
Unggah skrip penguraian data ke IoT Platform.
Untuk informasi lebih lanjut, lihat Apa itu penguraian data?
Tulis kode untuk mengirimkan data biner perangkat.
Kode contoh:
{ aiot_dm_msg_t msg; uint8_t raw_data[] = {0x01, 0x02}; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_RAW_DATA; msg.data.raw_data.data = raw_data; msg.data.raw_data.data_len = sizeof(raw_data); aiot_dm_send(dm_handle, &msg); }
Saat menggunakan model TSL untuk komunikasi, pastikan jumlah pesan tidak melebihi ambang batas.
Untuk informasi lebih lanjut tentang batasan komunikasi, lihat Batasan.
Jika jumlah pesan melebihi ambang batas, masuk ke konsol IoT Platform untuk melihat pesan yang terakumulasi. Untuk informasi lebih lanjut, lihat Lihat dan pantau grup konsumen.
Langkah 4: Konfigurasikan properti perangkat
Anda dapat memanggil operasi SetDeviceProperty atau SetDevicesProperty untuk mengirimkan perintah konfigurasi properti ke perangkat. Perangkat memanggil operasi aiot_mqtt_recv untuk menerima perintah dan memanggil fungsi callback demo_dm_recv_handler untuk memproses perintah tersebut.
Saat menentukan logika pemrosesan fungsi callback, perhatikan hal-hal berikut:
Catatan penggunaan:
Pesan yang diterima digunakan sebagai parameter input fungsi callback aiot_dm_recv_handler_t. Pesan tersebut disimpan di lokasi tertentu menggunakan struktur aiot_dm_recv_t.
Konten perintah dalam pesan yang diterima bervariasi berdasarkan format data perangkat. Tabel berikut menjelaskan bidang perintah.
Format data perangkat
Bidang dalam pesan yang diterima
Deskripsi
ICA standard data format (Alink JSON)
recv->data.property_set.paramsBidang ini sama dengan parameter params dalam data Alink. Untuk informasi lebih lanjut, lihat Properti perangkat, acara, dan layanan.
Custom data format
recv->data.raw_dataAnda harus menguraikan data pada perangkat. Untuk informasi lebih lanjut, lihat Apa itu penguraian data?
Logika pemrosesan yang direkomendasikan:
Perbarui properti perangkat.
Kirimkan properti yang telah diperbarui.
Logika pemrosesan kode contoh:
Dalam contoh ini, pesan yang diterima dicetak. Untuk mengirimkan properti yang telah diperbarui, Anda dapat menghapus simbol komentar (
/*dan*/) di bawah TODO.ICA standard data format (Alink JSON)
static void demo_dm_recv_property_set(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_property_set msg_id = %ld, params = %.*s\r\n", (unsigned long)recv->data.property_set.msg_id, recv->data.property_set.params_len, recv->data.property_set.params); /* TODO: Kode contoh berikut menunjukkan cara mengembalikan respons setelah IoT Platform mengirimkan perintah untuk mengonfigurasi properti. Untuk menjalankan kode contoh, hapus komentar dari kode contoh. */ /* { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_PROPERTY_SET_REPLY; msg.data.property_set_reply.msg_id = recv->data.property_set.msg_id; msg.data.property_set_reply.code = 200; msg.data.property_set_reply.data = "{}"; int32_t res = aiot_dm_send(dm_handle, &msg); if (res < 0) { printf("aiot_dm_send gagal\r\n"); } } */ }Custom data format
static void demo_dm_recv_raw_data(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_raw_data raw data len = %d\r\n", recv->data.raw_data.data_len); /* TODO: Kode contoh berikut menunjukkan cara mengirimkan data biner. Jika Anda ingin mengirimkan data biner, Anda harus mengonfigurasi skrip penguraian data di konsol IoT Platform. */ /* { aiot_dm_msg_t msg; uint8_t raw_data[] = {0x01, 0x02}; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_RAW_DATA; msg.data.raw_data.data = raw_data; msg.data.raw_data.data_len = sizeof(raw_data); aiot_dm_send(dm_handle, &msg); } */ }
Langkah 5: Kirimkan acara perangkat
Setelah menghubungkan perangkat ke IoT Platform melalui MQTT, panggil operasi aiot_dm_send untuk mengirimkan acara perangkat. Acara yang akan dikirimkan disimpan di lokasi tertentu menggunakan struktur aiot_dm_msg_t. Struktur ini merupakan parameter input dari operasi aiot_dm_send.
Tulis kode untuk mengirimkan acara perangkat berdasarkan format data perangkat berikut:
Jika data perangkat Anda dalam custom format, Anda dapat menggunakan operasi API yang sama untuk mengirimkan acara dan properti. Untuk informasi lebih lanjut, lihat Langkah 3.
Jika data perangkat Anda dalam ICA standard data format (Alink JSON), lakukan langkah-langkah berikut:
Tambahkan model TSL.
Masuk ke Konsol IoT Platform. Pada tab Feature Definition halaman Product Details, tambahkan acara ke produk. Untuk informasi lebih lanjut, lihat Tambahkan fitur TSL.
Tabel berikut menjelaskan acara TSL yang ditambahkan dalam contoh ini.
Fitur
Pengenal
Tipe acara
Parameter keluaran
Kesalahan
Error
Kesalahan
Nama parameter: Kode kesalahan
Pengenal parameter: ErrorCode
Tipe data: enum
Item enumerasi:
0: Terjadi kesalahan pada perangkat keras perangkat.
1: Terjadi kesalahan pada perangkat lunak perangkat.
2: Terjadi kesalahan yang tidak diketahui.
Dalam contoh ini, Anda juga dapat menambahkan fitur dengan mengimpor File TSL. Untuk informasi lebih lanjut, lihat Tambahkan fitur TSL secara batch.
Tentukan isi pesan acara.
Kode contoh:
demo_send_event_post(dm_handle, "Error", "{\"ErrorCode\": 0}");Contoh pesan:
Pesan TSL yang dikirimkan berada dalam format JSON. Tabel berikut menjelaskan pesan contoh dan format Alink dari pesan tersebut. Untuk informasi lebih lanjut, lihat Properti perangkat, acara, dan layanan.
CatatanAnda hanya perlu fokus pada konten pesan, yang ditunjukkan oleh parameter params dalam data Alink. Link SDK mengenkapsulasi dan memproses pesan tersebut.
Contoh
Format Alink
{\"ErrorCode\": 0}{ "id": "123", "version": "1.0", "params": { "ErrorCode": 0 }, "method": "thing.event.alarm.post" }
Definisikan fungsi untuk mengirimkan acara.
int32_t demo_send_event_post(void *dm_handle, char *event_id, char *params) { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_EVENT_POST; msg.data.event_post.event_id = event_id; msg.data.event_post.params = params; return aiot_dm_send(dm_handle, &msg); }
Langkah 6: Panggil layanan perangkat
Anda dapat memanggil operasi InvokeThingService atau InvokeThingsService untuk mengirimkan perintah pemanggilan layanan ke perangkat. Perangkat memanggil operasi aiot_mqtt_recv untuk menerima perintah dan memanggil fungsi callback demo_dm_recv_handler untuk memproses perintah.
Saat menentukan logika pemrosesan fungsi callback, perhatikan hal-hal berikut:
Catatan penggunaan:
Pesan yang diterima digunakan sebagai parameter input fungsi callback aiot_dm_recv_handler_t. Pesan tersebut disimpan di lokasi tertentu menggunakan struktur aiot_dm_recv_t.
Konten perintah dalam pesan yang diterima bervariasi berdasarkan format data perangkat. Tabel berikut menjelaskan bidang perintah.
Format data perangkat
Bidang dalam pesan sinkron
Bidang dalam pesan asinkron
Deskripsi
ICA standard data format (Alink JSON)
recv->data.sync_service_invokerecv->data.async_service_invokeBidang ini sama dengan parameter params dalam data Alink. Untuk informasi lebih lanjut, lihat Properti perangkat, acara, dan layanan.
Custom data format
recv->data.raw_datarecv->data.raw_service_invokeAnda harus mengunggah skrip untuk menguraikan konten perintah. Untuk informasi lebih lanjut, lihat Apa itu penguraian data?
Jika fungsi callback yang didefinisikan tidak memiliki logika untuk menanggapi pemanggilan layanan, Anda harus mengonfigurasi fungsi untuk menentukan logika tersebut. Saat mengonfigurasi fungsi untuk mengirimkan respons, pastikan nilai parameter berikut dalam respons sama dengan yang ada di permintaan.
Pemanggilan sinkron:
rrpc_iddanmsg_id.Pemanggilan asinkron:
msg_id.
Saat mengirimkan respons ke IoT Platform, perhatikan periode timeout.
Pemanggilan sinkron: Setelah perangkat menerima permintaan, kirimkan respons dalam waktu 8 detik. Jika tidak, IoT Platform akan menentukan bahwa pemanggilan gagal terlepas dari apakah perangkat menerima permintaan tersebut.
Pemanggilan asinkron: Anda dapat menentukan periode timeout berdasarkan kebutuhan bisnis Anda. Tidak ada batasan yang diterapkan.
Logika pemrosesan yang direkomendasikan:
Proses perintah.
Kembalikan respons ke IoT Platform.
Logika pemrosesan kode contoh:
Dalam contoh ini, pesan yang diterima dicetak. Untuk mengirimkan properti yang telah diperbarui, Anda dapat menghapus simbol komentar (
/*dan*/) di bawah TODO.ICA standard data format (Alink JSON)
Pemanggilan sinkron:
static void demo_dm_recv_sync_service_invoke(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_sync_service_invoke msg_id = %ld, rrpc_id = %s, service_id = %s, params = %.*s\r\n", (unsigned long)recv->data.sync_service_invoke.msg_id, recv->data.sync_service_invoke.rrpc_id, recv->data.sync_service_invoke.service_id, recv->data.sync_service_invoke.params_len, recv->data.sync_service_invoke.params); /* TODO: Kode contoh berikut menunjukkan cara mengembalikan respons setelah IoT Platform memanggil layanan perangkat secara sinkron. */ { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_SYNC_SERVICE_REPLY; msg.data.sync_service_reply.rrpc_id = recv->data.sync_service_invoke.rrpc_id; msg.data.sync_service_reply.msg_id = recv->data.sync_service_invoke.msg_id; msg.data.sync_service_reply.code = 200; msg.data.sync_service_reply.service_id = "SetLightSwitchTimer"; msg.data.sync_service_reply.data = "{}"; int32_t res = aiot_dm_send(dm_handle, &msg); if (res < 0) { printf("aiot_dm_send gagal\r\n"); } } }Pemanggilan asinkron:
static void demo_dm_recv_async_service_invoke(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_async_service_invoke msg_id = %ld, service_id = %s, params = %.*s\r\n", (unsigned long)recv->data.async_service_invoke.msg_id, recv->data.async_service_invoke.service_id, recv->data.async_service_invoke.params_len, recv->data.async_service_invoke.params); /* TODO: Kode contoh berikut menunjukkan cara mengembalikan respons setelah IoT Platform memanggil layanan perangkat secara asinkron. Untuk menjalankan kode contoh, hapus komentar dari kode contoh. */ /* { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_ASYNC_SERVICE_REPLY; msg.data.async_service_reply.msg_id = recv->data.async_service_invoke.msg_id; msg.data.async_service_reply.code = 200; msg.data.async_service_reply.service_id = "ToggleLightSwitch"; msg.data.async_service_reply.data = "{\"dataA\": 20}"; int32_t res = aiot_dm_send(dm_handle, &msg); if (res < 0) { printf("aiot_dm_send gagal\r\n"); } } */ }
Custom data format
Operasi untuk memanggil layanan secara asinkron berdasarkan format data biner bekerja dengan cara yang sama seperti operasi untuk mengonfigurasi properti berdasarkan format data biner. Untuk informasi lebih lanjut, lihat Uraikan pesan yang dikirim ke topik kustom.
Kode contoh berikut menunjukkan cara memanggil layanan secara sinkron berdasarkan format data biner:
static void demo_dm_recv_raw_sync_service_invoke(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_raw_sync_service_invoke raw sync service rrpc_id = %s, data_len = %d\r\n", recv->data.raw_service_invoke.rrpc_id, recv->data.raw_service_invoke.data_len); /* TODO: Contoh berikut menunjukkan cara mengembalikan respons setelah IoT Platform mengirimkan perintah untuk memanggil layanan secara sinkron. Untuk menjalankan kode contoh, hapus komentar dari kode contoh.*/ /* { aiot_dm_msg_t msg; uint8_t raw_data[] = {0x01, 0x02}; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_RAW_SERVICE_REPLY; msg.data.raw_service_reply.rrpc_id = recv->data.raw_service_invoke.rrpc_id; msg.data.raw_data.data = raw_data; msg.data.raw_data.data_len = sizeof(raw_data); aiot_dm_send(dm_handle, &msg); } */ }
Langkah 7: Tutup koneksi
Koneksi MQTT diterapkan pada perangkat yang tetap terhubung secara persisten. Anda dapat memutuskan koneksi perangkat dari IoT Platform secara manual.
Dalam contoh ini, thread utama digunakan untuk mengonfigurasi parameter dan membangun koneksi. Setelah koneksi dibuat, Anda dapat menangguhkan thread utama.
Panggil operasi aiot_mqtt_disconnect untuk memutuskan koneksi perangkat dari IoT Platform.
res = aiot_mqtt_disconnect(mqtt_handle);
if (res < STATE_SUCCESS) {
aiot_mqtt_deinit(&mqtt_handle);
printf("aiot_mqtt_disconnect gagal: -0x%04X\n", -res);
return -1;
}Langkah 8: Keluar dari program
Panggil operasi aiot_dm_deinit untuk menghapus instance klien data-model dan melepaskan sumber daya yang sesuai.
res = aiot_dm_deinit(&dm_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dm_deinit gagal: -0x%04X\n", -res);
return -1;
}Apa yang harus dilakukan selanjutnya
Setelah mengonfigurasi file kode contoh, kompilasi file tersebut untuk menghasilkan file yang dapat dieksekusi. Dalam contoh ini, file yang dapat dieksekusi ./output/data-model-basic-demo dihasilkan.
Untuk informasi lebih lanjut, lihat Siapkan lingkungan.
Untuk informasi lebih lanjut tentang hasil eksekusi, lihat Lihat log.