All Products
Search
Document Center

IoT Platform:Contoh penggunaan

Last Updated:Jun 21, 2026

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

  1. Sertakan file header.

    ……
    ……
    #include "aiot_dm_api.h"
  2. Konfigurasikan dependensi dasar dan output log.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. 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.

  1. Mengaitkan handle koneksi MQTT.

    Penting

    Sebelum 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.

  2. Implementasikan fungsi callback untuk memproses pesan TSL.

    1. 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;
          }
      }
    2. 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.

  3. 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_reply dan 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)

  1. 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.

  2. 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.

        Catatan

        Anda 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.

        • LightSwitch adalah DeviceName perangkat.

  3. 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

  1. Unggah skrip parsing data model TSL ke IoT Platform.

    Untuk informasi selengkapnya, lihat Pesan dalam format data kustom.

  2. 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);
        }
Catatan

Saat menggunakan model TSL untuk komunikasi, pastikan trafik data tidak melebihi ambang batas.

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.params

      Sesuai dengan nilai bidang params dalam format data Alink. Untuk informasi selengkapnya, lihat Pesan properti.

      passthrough/custom format

      recv->data.raw_data

      Perangkat harus mengurai data tersebut. Untuk informasi selengkapnya, lihat Pesan dalam format passthrough/kustom.

  • Logika pemrosesan yang direkomendasikan:

    1. Perbarui properti perangkat.

    2. 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 TODO dengan 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.

  1. 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.

  2. 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.

      Catatan

      Anda 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"
      }
  3. 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_invoke

      recv->data.async_service_invoke

      Data 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_data

      recv->data.raw_service_invoke

      Anda 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_id dan msg_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:

    1. Eksekusi perintah layanan.

    2. 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 TODO dengan 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

Catatan

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.