Topik ini menggunakan file ./demos/data_model_basic_demo.c dari Link SDK for C untuk menunjukkan cara mengimplementasikan Thing Specification Language (TSL) pada perangkat dengan menggunakan API Link SDK.
Latar belakang
-
Untuk informasi lebih lanjut tentang model TSL, lihat Petunjuk penggunaan.
-
Model TSL menggunakan koneksi MQTT. Untuk contoh kode terkait, lihat Koneksi MQTT.
Langkah 1: Inisialisasi
-
Sertakan file header.
…… …… #include "aiot_dm_api.h" Konfigurasikan dependensi dasar dan output log.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);-
Panggil aiot_dm_init untuk membuat dan menginisialisasi instans client
data-model.dm_handle = aiot_dm_init(); if (dm_handle == NULL) { printf("aiot_dm_init failed"); return -1;}
Langkah 2: Konfigurasi fitur
Panggil aiot_dm_setopt untuk mengonfigurasi fitur-fitur berikut.
-
Mengaitkan handle koneksi MQTT.
PentingSebelum mengonfigurasi parameter fitur TSL, pastikan Anda telah mengonfigurasi parameter yang diperlukan, seperti informasi otentikasi perangkat. Untuk informasi selengkapnya, lihat Konfigurasi parameter koneksi MQTT.
-
Kode contoh:
aiot_dm_setopt(dm_handle, AIOT_DMOPT_MQTT_HANDLE, mqtt_handle); -
Parameter terkait:
Parameter
Nilai contoh
Deskripsi
AIOT_DMOPT_MQTT_HANDLE
mqtt_handle
Mengaitkan handle koneksi MQTT. Permintaan TSL menggunakan koneksi ini.
-
-
Implementasikan fungsi callback untuk memproses pesan TSL.
-
Definisikan fungsi callback untuk pesan TSL.
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) { /* Respons terhadap perintah pelaporan properti, pelaporan event, mendapatkan nilai properti yang diinginkan, atau menghapus nilai properti yang diinginkan */ case AIOT_DMRECV_GENERIC_REPLY: { demo_dm_recv_generic_reply(dm_handle, recv, userdata); } break; /* Mengatur properti */ case AIOT_DMRECV_PROPERTY_SET: { demo_dm_recv_property_set(dm_handle, recv, userdata); } break; /* Memanggil layanan secara asinkron */ case AIOT_DMRECV_ASYNC_SERVICE_INVOKE: { demo_dm_recv_async_service_invoke(dm_handle, recv, userdata); } break; /* Memanggil layanan secara sinkron */ case AIOT_DMRECV_SYNC_SERVICE_INVOKE: { demo_dm_recv_sync_service_invoke(dm_handle, recv, userdata); } break; /* Data biner downstream */ case AIOT_DMRECV_RAW_DATA: { demo_dm_recv_raw_data(dm_handle, recv, userdata); } break; /* Memanggil layanan secara sinkron dalam format biner. Pesan ini berisi rrpc_id selain data biner. */ case AIOT_DMRECV_RAW_SYNC_SERVICE_INVOKE: { demo_dm_recv_raw_sync_service_invoke(dm_handle, recv, userdata); } break; /* Respons dari IoT Platform terhadap data biner upstream */ case AIOT_DMRECV_RAW_DATA_REPLY: { demo_dm_recv_raw_data_reply(dm_handle, recv, userdata); } break; default: break; } } -
Daftarkan fungsi callback untuk pesan TSL.
-
Kode contoh:
aiot_dm_setopt(dm_handle, AIOT_DMOPT_RECV_HANDLER, (void *)demo_dm_recv_handler); -
Parameter terkait:
Parameter
Nilai contoh
Deskripsi
AIOT_DMOPT_RECV_HANDLER
demo_dm_recv_handler
SDK memanggil fungsi callback ini saat menerima pesan TSL.
-
-
-
Konfigurasikan apakah IoT Platform mengirim pesan respons.
Pengaturan ini menentukan apakah IoT Platform mengirim pesan respons setelah menerima pesan dari perangkat.
-
Kode contoh:
uint8_t post_reply = 1; …… …… aiot_dm_setopt(dm_handle, AIOT_DMOPT_POST_REPLY, (void *)&post_reply); -
Parameter terkait:
Parameter
Contoh
Deskripsi
AIOT_DMOPT_POST_REPLY
1
Nilai yang valid:
-
1: Kirim pesan respons.
-
0: Jangan kirim pesan respons.
-
-
Jika Anda mengatur parameter AIOT_DMOPT_POST_REPLY ke
1, Anda harus mengimplementasikan logika untuk menangani pesan respons.Anda dapat mengimplementasikan logika tersebut sesuai kebutuhan bisnis Anda. Kode contoh hanya mencetak log.
-
ICA Standard Data Format (Alink JSON): Saat membuat produk, atur parameter Data Format ke ICA Standard Data Format (Alink JSON).
Pesan respons dikembalikan dalam struktur
recv->data.generic_replydan menggunakan format data Alink. Untuk informasi selengkapnya, lihat Properti, event, dan layanan perangkat.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); } -
Passthrough/Custom format: Pada halaman pengaturan produk di Konsol IoT Platform, atur parameter Data Format ke Passthrough/Custom.
Pesan respons dikembalikan dalam struktur
recv->data.raw_data. Sebelum mengirim atau menerima pesan, Anda harus mengunggah skrip parsing ke IoT Platform. Untuk informasi selengkapnya, lihat Parsing 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: Laporkan properti
Setelah perangkat menjalin koneksi MQTT, panggil aiot_dm_send untuk mengirim pesan properti ke IoT Platform. Simpan pesan properti dalam struktur aiot_dm_msg_t dan teruskan ke aiot_dm_send.
Tulis kode untuk melaporkan pesan properti berdasarkan salah satu format data perangkat berikut.
ICA standard data format (Alink JSON)
-
Tambahkan model TSL.
-
Sebelum melaporkan properti, login ke Konsol IoT Platform. Pada halaman Product details, buka tab Feature definition, lalu tambahkan properti ke model TSL untuk modul default atau modul kustom, seperti
demo_extra_block. Untuk informasi selengkapnya, lihat Menambahkan model TSL secara manual.Tabel berikut mencantumkan properti model TSL yang sesuai dengan kode contoh.
Nama modul TSL
Nama fitur
Identifier
Tipe
Definisi data
Tipe baca/tulis
modul default
Sakelar lampu malam 1
LightSwitch
bool
-
0: nyala
-
1: mati
Baca/Tulis
Daya
Power
text
Panjang data: 10.240
Baca/Tulis
Arus operasi
WF
int32
-
Rentang nilai: 0–10
-
Ukuran langkah: 1
-
Unit: A
Baca/Tulis
demo_extra_block
Sakelar lampu malam 2
NightLightSwitch
bool
-
0: nyala
-
1: mati
Baca/Tulis
-
-
Anda juga dapat mengimpor file TSL untuk contoh ini. Untuk petunjuknya, lihat Menambahkan model TSL secara batch.
-
-
Atur konten pesan properti.
-
Kode contoh:
-
Modul default:
/* Konten untuk melaporkan satu properti */ demo_send_property_post(dm_handle, "{\"LightSwitch\": 0}"); /* Konten untuk melaporkan properti secara batch */ 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}");
-
-
Deskripsi pesan contoh:
-
Pesan model TSL yang dilaporkan berformat JSON. Tabel berikut menunjukkan pesan contoh dan format data Alink-nya. Untuk informasi selengkapnya, lihat Laporkan properti perangkat.
CatatanAnda hanya perlu menyediakan data perangkat, yaitu nilai parameter params dalam format data Alink. Link SDK menangani enkapsulasi pesan yang dilaporkan.
Tipe pesan
Pesan contoh
Alink Format
Properti tunggal
{\"LightSwitch\": 0}{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": { "LightSwitch": 0 }, "method": "thing.event.property.post" }Properti batch
{\"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 properti dilaporkan secara batch, IoT Platform mengirim pesan respons. Untuk memverifikasi bahwa IoT Platform menerima pesan tersebut, 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);Di mana:
a18wP******adalah ProductKey perangkat.LightSwitchadalah DeviceName perangkat.
-
-
-
Definisikan fungsi untuk melaporkan properti.
/* Laporkan satu 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); } /* Laporkan properti secara batch */ 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 parsing data model TSL ke IoT Platform.
Untuk informasi selengkapnya, lihat Pesan dalam format data kustom.
-
Tulis kode perangkat untuk melaporkan pesan biner.
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 trafik data tidak melebihi ambang batas.
-
Untuk informasi selengkapnya tentang batasan komunikasi, lihat Koneksi dan komunikasi.
Jika volume komunikasi melebihi ambang batas, login ke Konsol IoT Platform untuk melihat pesan yang tertunda. Untuk informasi selengkapnya, lihat Lihat dan pantau kelompok konsumen.
Langkah 4: Atur properti
Panggil API cloud IoT Platform SetDeviceProperty atau SetDevicesProperty untuk mengirim perintah pengaturan properti ke perangkat. Perangkat memanggil aiot_mqtt_recv untuk menerima perintah tersebut dan memprosesnya dengan fungsi callback demo_dm_recv_handler.
Gunakan informasi berikut untuk menulis logika pemrosesan fungsi callback:
-
Catatan:
-
Pesan yang diterima diteruskan sebagai parameter input bertipe aiot_dm_recv_handler_t dan disimpan di lokasi yang Anda tentukan menggunakan struktur aiot_dm_recv_t.
-
Bidang dalam pesan yang diterima yang berisi konten perintah pengaturan properti bergantung pada format data perangkat, seperti ditunjukkan pada tabel berikut.
Format data perangkat
Bidang pesan
Deskripsi
ICA standard data format (Alink JSON)
recv->data.property_set.paramsSesuai dengan nilai bidang params dalam format data Alink. Untuk informasi selengkapnya, lihat Pesan properti.
passthrough/custom format
recv->data.raw_dataPerangkat harus mengurai data tersebut. Untuk informasi selengkapnya, lihat Pesan dalam format passthrough/kustom.
-
-
Logika pemrosesan yang direkomendasikan:
-
Perbarui properti perangkat.
-
Laporkan properti yang telah diperbarui.
-
-
Logika pemrosesan dalam kode contoh:
Kode contoh hanya mencetak pesan yang diterima. Untuk melihat demonstrasi pelaporan properti yang diatur, hapus komentar blok kode di bawah komentar
TODOdengan menghapus simbol/*dan*/.-
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 berikut menunjukkan cara merespons perintah pengaturan properti dari IoT Platform. Hapus komentar untuk melihat cara kerjanya. */ /* { 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 failed\r\n"); } } */ } -
passthrough/custom 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 berikut menunjukkan cara mengirim data dalam format biner. Untuk menggunakan fitur ini, Anda harus men-deploy skrip passthrough yang sesuai di 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: Laporkan event
Setelah perangkat menjalin koneksi MQTT, panggil aiot_dm_send untuk mengirim pesan event ke IoT Platform. Pesan tersebut disimpan dalam struktur aiot_dm_msg_t dan diteruskan sebagai parameter ke aiot_dm_send.
Tulis kode untuk melaporkan event berdasarkan salah satu format data perangkat berikut.
-
Jika perangkat Anda menggunakan custom format, antarmuka untuk melaporkan event sama dengan yang digunakan untuk properti. Untuk informasi selengkapnya, lihat prosedur pelaporan pesan dalam format kustom pada Langkah 3.
-
Jika perangkat Anda menggunakan ICA standard data format (Alink JSON), ikuti prosedur di bawah ini untuk menulis kode sisi perangkat.
-
Tambahkan model TSL.
-
Sebelum melaporkan event, login ke Konsol IoT Platform. Pada halaman Product details, buka tab Feature definition, lalu tambahkan event untuk produk tersebut. Untuk informasi selengkapnya, lihat Menambahkan model TSL secara manual.
Tabel berikut menjelaskan event model TSL yang digunakan dalam kode contoh.
Nama fitur
Identifier
Tipe
Parameter keluaran
Error
Error
Fault
-
Nama parameter: Kode error
-
Identifier parameter: ErrorCode
-
Tipe data: enum
-
Item enum:
-
0: Kegagalan perangkat keras perangkat
-
1: Kegagalan perangkat lunak perangkat
-
2: Error tidak diketahui
-
-
-
Anda juga dapat mengimpor file TSL untuk contoh ini. Untuk petunjuknya, lihat Menambahkan model TSL secara batch.
-
-
Atur konten pesan event.
-
Kode contoh:
demo_send_event_post(dm_handle, "Error", "{\"ErrorCode\": 0}"); -
Deskripsi pesan contoh:
Perangkat melaporkan pesan model TSL dalam format JSON. Tabel berikut menunjukkan pesan contoh dan format data Alink-nya. Untuk informasi selengkapnya, lihat Laporkan event perangkat.
CatatanAnda hanya perlu menyediakan data perangkat, yaitu nilai parameter params dalam format data Alink. Link SDK menangani enkapsulasi pesan yang dilaporkan.
Muatan contoh
Format Alink
{\"ErrorCode\": 0}{ "id": "123", "version": "1.0", "params": { "ErrorCode": 0 }, "method": "thing.event.alarm.post" }
-
-
Definisikan fungsi untuk melaporkan pesan event.
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: Pemanggilan layanan
Anda dapat memanggil API cloud IoT Platform, InvokeThingService atau InvokeThingsService, untuk mengirim perintah pemanggilan layanan ke perangkat. Perangkat memanggil aiot_mqtt_recv untuk menerima perintah tersebut dan melakukan tindakan yang sesuai berdasarkan pengaturan fungsi callback demo_dm_recv_handler.
Gunakan informasi berikut untuk menulis logika pemrosesan fungsi callback:
-
Catatan penggunaan:
-
Pesan yang diterima diteruskan sebagai parameter input bertipe aiot_dm_recv_handler_t dan disimpan di lokasi yang Anda tentukan menggunakan struktur aiot_dm_recv_t.
-
Konten perintah pemanggilan layanan bervariasi berdasarkan format data perangkat. Tabel berikut mencantumkan bidang tempat konten perintah disimpan.
Format data perangkat
Bidang sinkron
Bidang asinkron
Deskripsi
ICA standard data format (Alink JSON)
recv->data.sync_service_invokerecv->data.async_service_invokeData dalam bidang ini memiliki format yang sama dengan nilai parameter params dalam data Alink. Untuk informasi selengkapnya, lihat Pesan layanan.
passthrough/custom format
recv->data.raw_datarecv->data.raw_service_invokeAnda harus mengunggah skrip parsing untuk mengurai konten perintah. Untuk informasi selengkapnya, lihat Pesan dalam format passthrough/kustom.
-
Jika Anda menggunakan fungsi terpisah untuk menangani respons alih-alih mengirimnya dari fungsi callback, pastikan nilai parameter berikut dalam pesan respons sesuai dengan yang ada dalam permintaan dari IoT Platform.
-
Panggilan sinkron:
rrpc_iddanmsg_id -
Panggilan asinkron:
msg_id
-
-
Saat mengirim respons layanan ke IoT Platform, perhatikan periode timeout:
-
Panggilan sinkron: Setelah menerima pesan layanan sinkron, Anda harus mengirim respons dalam waktu 8 detik. Jika tidak, IoT Platform akan menganggap panggilan tersebut gagal, meskipun perangkat telah menerima pesannya.
-
Panggilan asinkron: Anda dapat menentukan logika timeout khusus untuk panggilan asinkron sesuai kebutuhan bisnis Anda. IoT Platform tidak memberlakukan batasan apa pun.
-
-
-
Logika pemrosesan yang direkomendasikan:
-
Eksekusi perintah layanan.
-
Kirim respons layanan ke IoT Platform.
-
-
Logika pemrosesan dalam kode contoh:
Kode contoh hanya mencetak pesan yang diterima. Untuk melihat demonstrasi pelaporan properti yang diatur, hapus komentar blok kode di bawah komentar
TODOdengan menghapus simbol/*dan*/.-
ICA standard data format (Alink JSON)
-
Panggilan 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 berikut menunjukkan cara merespons pemanggilan layanan sinkron dari IoT Platform. */ { 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 failed\r\n"); } } } -
Panggilan 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 berikut menunjukkan cara merespons pemanggilan layanan asinkron dari IoT Platform. Anda dapat menghapus komentar untuk melihat efeknya. */ /* { 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 failed\r\n"); } } */ }
-
-
passthrough/custom format
-
Logika pemrosesan untuk pemanggilan layanan biner asinkron sama dengan pengaturan properti biner. Untuk informasi selengkapnya, lihat Parsing pesan topik kustom.
-
Kode contoh berikut menunjukkan logika pemrosesan untuk pemanggilan layanan biner sinkron:
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: Kode berikut menunjukkan cara merespons pemanggilan layanan sinkron dari IoT Platform. Anda dapat menghapus komentar untuk melihat efeknya. */ /* { 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: Putuskan koneksi
MQTT biasanya digunakan untuk perangkat yang memerlukan koneksi persisten. Oleh karena itu, program biasanya tidak mencapai titik ini.
Dalam program contoh, thread utama bertanggung jawab untuk mengonfigurasi parameter dan menjalin koneksi. Setelah koneksi terjalin, thread utama dapat masuk ke mode hibernasi.
Anda dapat memanggil aiot_mqtt_disconnect untuk mengirim pesan pemutusan koneksi ke IoT Platform dan memutuskan koneksi jaringan.
res = aiot_mqtt_disconnect(mqtt_handle);
if (res < STATE_SUCCESS) {
aiot_mqtt_deinit(&mqtt_handle);
printf("aiot_mqtt_disconnect failed: -0x%04X\n", -res);
return -1;
}
Langkah 8: Keluar dari program
Panggil aiot_dm_deinit untuk menghapus instans client data-model dan melepaskan sumber dayanya.
res = aiot_dm_deinit(&dm_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dm_deinit failed: -0x%04X\n", -res);
return -1;
}
Langkah selanjutnya
-
Kompilasi kode untuk menghasilkan file yang dapat dieksekusi ./output/data-model-basic-demo.
Untuk informasi selengkapnya, lihat Kompilasi dan jalankan.
-
Lihat Log runtime untuk detail hasil eksekusi.