Tüm Ürünler
Search
Belge Merkezi

IoT Platform:Kullanım örneği

Son Güncelleme:Oct 03, 2026

Bu konu, C dili için Link SDK'daki ./demos/data_model_basic_demo.c dosyasını kullanarak, Link SDK API'si aracılığıyla bir cihazda Thing Specification Language (TSL) uygulamasının nasıl yapılacağını gösterir.

Arka plan

Adım 1: Başlatma

  1. Üstbilgi dosyasını dahil edin.

    ……
    ……
    #include "aiot_dm_api.h"
  2. Alt bağımlılıkları ve günlük çıktısını yapılandırın.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Bir data-model istemci örneği oluşturmak ve başlatmak için aiot_dm_init öğesini çağırın.

        dm_handle = aiot_dm_init();
        if (dm_handle == NULL) {
            printf("aiot_dm_init failed");
            return -1;}

Adım 2: Özellikleri yapılandırma

Aşağıdaki özellikleri yapılandırmak için aiot_dm_setopt işlevini çağırın.

  1. Bir MQTT bağlantı tutamacı ilişkilendirin.

    Önemli

    TSL özelliği parametrelerini yapılandırmadan önce, cihaz kimlik doğrulama bilgileri gibi gerekli parametreleri yapılandırdığınızdan emin olun. Daha fazla bilgi için bkz. MQTT connection parameters yapılandırma.

    • Örnek kod:

          aiot_dm_setopt(dm_handle, AIOT_DMOPT_MQTT_HANDLE, mqtt_handle);
    • İlgili parametreler:


      Parameter


      Example value


      Description


      AIOT_DMOPT_MQTT_HANDLE


      mqtt_handle


      MQTT bağlantı tutamacını ilişkilendirir. TSL istekleri bu bağlantıyı kullanır.

  2. TSL mesajlarını işlemek için bir geri arama işlevi uygulayın.

    1. TSL mesajları için geri arama işlevini tanımlayın.

      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) {
              /* Response to commands for property reporting, event reporting, getting desired property values, or deleting desired property values */
              case AIOT_DMRECV_GENERIC_REPLY: {
                  demo_dm_recv_generic_reply(dm_handle, recv, userdata);
              }
              break;
              /* Set properties */
              case AIOT_DMRECV_PROPERTY_SET: {
                  demo_dm_recv_property_set(dm_handle, recv, userdata);
              }
              break;
              /* Asynchronously invoke a service */
              case AIOT_DMRECV_ASYNC_SERVICE_INVOKE: {
                  demo_dm_recv_async_service_invoke(dm_handle, recv, userdata);
              }
              break;
              /* Synchronously invoke a service */
              case AIOT_DMRECV_SYNC_SERVICE_INVOKE: {
                  demo_dm_recv_sync_service_invoke(dm_handle, recv, userdata);
              }
              break;
              /* Downstream binary data */
              case AIOT_DMRECV_RAW_DATA: {
                  demo_dm_recv_raw_data(dm_handle, recv, userdata);
              }
              break;
              /* Synchronously invoke a service in binary format. This message contains an rrpc_id in addition to the binary data. */
              case AIOT_DMRECV_RAW_SYNC_SERVICE_INVOKE: {
                  demo_dm_recv_raw_sync_service_invoke(dm_handle, recv, userdata);
              }
              break;
              /* Response from IoT Platform to upstream binary data */
              case AIOT_DMRECV_RAW_DATA_REPLY: {
                  demo_dm_recv_raw_data_reply(dm_handle, recv, userdata);
              }
              break;
              default:
                  break;
          }
      }
    2. TSL mesajları için geri arama işlevini kaydedin.

      • Örnek kod:

            aiot_dm_setopt(dm_handle, AIOT_DMOPT_RECV_HANDLER, (void *)demo_dm_recv_handler);                   
      • İlgili parametreler:


        Parameter


        Example value


        Description


        AIOT_DMOPT_RECV_HANDLER


        demo_dm_recv_handler


        SDK, bir TSL mesajı aldığında bu geri arama işlevini çağırır.

  3. IoT Platform'un yanıt mesajları gönderip göndermeyeceğini yapılandırın.

    Bu ayar, IoT Platform'un bir cihaz mesajı aldıktan sonra yanıt mesajı gönderip göndermeyeceğini belirtir.

    • Örnek kod:

          uint8_t post_reply = 1;
          ……
          ……
         aiot_dm_setopt(dm_handle, AIOT_DMOPT_POST_REPLY, (void *)&post_reply);
    • İlgili parametreler:

      Parameter

      Example

      Description

      AIOT_DMOPT_POST_REPLY

      1

      Geçerli değerler:

      • 1: Bir yanıt mesajı gönderin.

      • 0: Yanıt mesajı göndermeyin.

    • AIOT_DMOPT_POST_REPLY parametresini 1 olarak ayarlarsanız, yanıt mesajlarını işlemek için mantık uygulamanız gerekir.

      Mantığı iş gereksinimlerinize göre uygulayabilirsiniz. Örnek kod yalnızca günlükleri yazdırır.

      • ICA Standard Data Format (Alink JSON): Bir ürün oluştururken Data Format parametresini ICA Standard Data Format (Alink JSON) olarak ayarlayın.

        Yanıt mesajı, recv->data.generic_reply yapısında döndürülür ve Alink veri biçimini kullanır. Daha fazla bilgi için bkz. Device properties, events, and services.

        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: IoT Platform konsolundaki ürün ayarları sayfasında Data Format parametresini Passthrough/Custom olarak ayarlayın.

        Yanıt mesajı, recv->data.raw_data yapısında döndürülür. Mesaj göndermeden veya almadan önce IoT Platform'a bir ayrıştırma betiği yüklemeniz gerekir. Daha fazla bilgi için bkz. Message parsing.

        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);
        }

Adım 3: Özellikleri raporlama

Cihaz bir MQTT bağlantısı kurduktan sonra, IoT Platform'a özellik mesajları göndermek için aiot_dm_send işlevini çağırın. Özellik mesajını aiot_dm_msg_t yapısında saklayın ve aiot_dm_send işlevine iletin.

Aşağıdaki cihaz veri biçimlerinden birine göre özellik mesajlarını raporlamak için kod yazın.

ICA standard data format (Alink JSON)

  1. Bir TSL modeli ekleyin.

    • Özellikleri raporlamadan önce, IoT Platform console içinde oturum açın. Product Details sayfasında Feature Definition sekmesine gidin ve varsayılan modül veya demo_extra_block gibi özel bir modül için TSL modeline özellikler ekleyin. Daha fazla bilgi için bkz. Add a TSL model manually.

      Aşağıdaki tabloda örnek kodla eşleşen TSL modeli özellikleri listelenmektedir.

      TSL module name

      Feature name

      Identifier

      Type

      Data definition

      Read/write type

      default module

      Night light switch 1

      LightSwitch

      bool

      • 0: on

      • 1: off

      Read/Write

      Power

      Power

      text

      Data length: 10.240

      Read/Write

      Operating current

      WF

      int32

      • Value range: 0–10

      • Step size: 1

      • Unit: A

      Read/Write

      demo_extra_block

      Night light switch 2

      NightLightSwitch

      bool

      • 0: on

      • 1: off

      Read/Write

    • Bu örnek için TSL file dosyasını da içe aktarabilirsiniz. Talimatlar için bkz. Add TSL models in batches.

  2. Özellik mesajının içeriğini ayarlayın.

    • Örnek kod:

      • Varsayılan modül:

        /* Content for reporting a single property */
                demo_send_property_post(dm_handle, "{\"LightSwitch\": 0}");
        /* Content for reporting properties in a batch */
                demo_send_property_batch_post(dm_handle, "{\"properties\":{\"Power\": [ {\"value\":\"on\",\"time\":1612684518000}],\"WF\": [{\"value\": 3,\"time\":1612684518000}]}}");
      • Özel modül:

                demo_send_property_post(dm_handle, "{\"demo_extra_block:NightLightSwitch\": 1}");
    • Örnek mesaj açıklaması:

      • Raporlanan TSL modeli mesajları JSON biçimindedir. Aşağıdaki tabloda örnek mesajlar ve bunlara karşılık gelen Alink veri biçimleri gösterilmektedir. Daha fazla bilgi için bkz. Report device properties.

        Not

        Yalnızca Alink veri biçimindeki params parametresinin değeri olan cihaz verilerini sağlamanız gerekir. Raporlanan mesajların kapsüllenmesini Link SDK halleder.

        Message type

        Sample message

        Alink format

        Single property

        {\"LightSwitch\": 0}
        {
          "id": "123",
          "version": "1.0",
          "sys":{
              "ack":0
          },
          "params": {
                 "LightSwitch": 0
            },
          "method": "thing.event.property.post"
        }

        Batch properties

        {\"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
                        },
                  ]
              }, 
        }
      • Özellikler toplu olarak raporlandıktan sonra IoT Platform bir yanıt mesajı gönderir. IoT Platform'un mesajı aldığını doğrulamak için /sys/a18wP******/LightSwitch/thing/event/property/batch/post_reply konusuna abone olun.

        Örnek kod:

            aiot_mqtt_sub(mqtt_handle, "/sys/a18wP******/LightSwitch/thing/event/property/batch/post_reply", NULL, 1,
                          NULL);

        Şurada:

        • a18wP****** cihazın ProductKey değeridir.

        • LightSwitch cihazın DeviceName değeridir.

  3. Özellikleri raporlamak için işlevleri tanımlayın.

    /* Report a single property */
    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);
    }
    /* Report properties in a 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. Bir TSL modeli veri ayrıştırma betiğini IoT Platform'a yükleyin.

    Daha fazla bilgi için bkz. Messages in a custom data format.

  2. İkili mesajları raporlamak için cihaz kodunu yazın.

    Örnek kod:

        {
            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);
        }
Not

TSL modellerini iletişim için kullanırken veri trafiğinin eşiği aşmadığından emin olun.

Adım 4: Özellikleri ayarlama

IoT Platform cloud API'sini SetDeviceProperty veya SetDevicesProperty çağırarak bir cihaza özellik ayarlama komutu gönderin. Cihaz, komutu almak için aiot_mqtt_recv işlevini çağırır ve demo_dm_recv_handler geri arama işlevi ile işler.

Geri callback işlevi için işleme mantığını yazmak üzere aşağıdaki bilgileri kullanın:

  • Notlar:

    • Alınan mesaj, aiot_dm_recv_handler_t türünde bir giriş parametresi olarak iletilir ve aiot_dm_recv_t yapısını kullanarak belirttiğiniz bir konumda depolanır.

    • Alınan mesajdaki özellik ayarlama komutu içeriğini içeren alan, aşağıdaki tabloda gösterildiği gibi cihaz veri biçimine bağlıdır.


      Device data format


      Message field


      Description


      ICA standard data format (Alink JSON)


      recv->data.property_set.params


      Alink veri biçimindeki params alanının değeriyle eşleşir. Daha fazla bilgi için bkz. Property messages.


      passthrough/custom format


      recv->data.raw_data


      Cihazın verileri ayrıştırması gerekir. Daha fazla bilgi için bkz. Messages in passthrough/custom format.

  • Önerilen işleme mantığı:

    1. Cihaz özelliklerini güncelleyin.

    2. Güncellenen özellikleri raporlayın.

  • Örnek koddaki işleme mantığı:

    Örnek kod yalnızca alınan mesajı yazdırır. Ayarlanan özelliklerin raporlanmasına ilişkin bir gösterim görmek için, TODO açıklamasının altındaki kod bloğunun yorumunu kaldırın ve /* ile */ sembollerini silin.

    • 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: The following code demonstrates how to respond to a property-setting command from IoT Platform. Uncomment it to see how it works. */
          /*
          {
              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: The following code demonstrates how to send data in binary format. To use this feature, you must deploy the corresponding passthrough script in 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);
          }
          */
      }

Adım 5: Olayları raporlama

Cihaz bir MQTT bağlantısı kurduktan sonra, IoT Platform'a olay mesajları göndermek için aiot_dm_send işlevini çağırın. Mesaj, bir aiot_dm_msg_t yapısında saklanır ve aiot_dm_send işlevine parametre olarak iletilir.

Aşağıdaki cihaz veri biçimlerinden birine göre olayları raporlamak için kod yazın.

  • Cihazınız custom format kullanıyorsa olay raporlama arabirimi özellikler için kullanılanla aynıdır. Daha fazla bilgi için bkz. Adım 3'te özel biçimde mesaj raporlama yordamı.

  • Cihazınız ICA standard data format (Alink JSON) kullanıyorsa cihaz tarafı kodunu yazmak için aşağıdaki yordamı izleyin.

  1. Bir TSL modeli ekleyin.

    • Bir olayı raporlamadan önce, IoT Platform console içinde oturum açın. Product details sayfasında Feature definition sekmesine gidin ve ürün için bir olay ekleyin. Daha fazla bilgi için bkz. Add a TSL model manually.

      Aşağıdaki tabloda örnek kodda kullanılan TSL modeli olayı açıklanmaktadır.

      Feature name

      Identifier

      Type

      Output parameter

      Error

      Error

      Fault

      • Parameter name: Error code

      • Parameter identifier: ErrorCode

      • Data type: enum

      • Enum items:

        • 0: Device hardware failure

        • 1: Device software failure

        • 2: Unknown error

    • Bu örnek için TSL file dosyasını da içe aktarabilirsiniz. Talimatlar için bkz. Add TSL models in batches.

  2. Olay mesajının içeriğini ayarlayın.

    • Örnek kod:

              demo_send_event_post(dm_handle, "Error", "{\"ErrorCode\": 0}");
    • Örnek mesaj açıklaması:

      Cihazlar TSL modeli mesajlarını JSON biçiminde raporlar. Aşağıdaki tabloda bir örnek mesaj ve buna karşılık gelen Alink veri biçimi gösterilmektedir. Daha fazla bilgi için bkz. Report device events.

      Not

      Yalnızca Alink veri biçimindeki params parametresinin değeri olan cihaz verilerini sağlamanız gerekir. Raporlanan mesajların kapsüllenmesini Link SDK halleder.

      Sample payload

      Alink format

      {\"ErrorCode\": 0}
      {
        "id": "123",
        "version": "1.0",
        "params": {
              "ErrorCode": 0
        },
        "method": "thing.event.alarm.post"
      }
  3. Olay mesajlarını raporlamak için bir işlev tanımlayın.

    
    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);
    }

Adım 6: Hizmet çağrısı

IoT Platform'un cloud API'lerini, InvokeThingService veya InvokeThingsService çağırarak bir cihaza hizmet çağrısı komutu gönderebilirsiniz. Cihaz, komutu almak için aiot_mqtt_recv işlevini çağırır ve demo_dm_recv_handler geri callback işlevinin ayarlarına göre ilgili eylemi gerçekleştirir.

Geri callback işlevi için işleme mantığını yazmak üzere aşağıdaki bilgileri kullanın:

  • Kullanım notları:

    • Alınan mesaj, aiot_dm_recv_handler_t türünde bir giriş parametresi olarak iletilir ve aiot_dm_recv_t yapısını kullanarak belirttiğiniz bir konumda depolanır.

    • Hizmet çağrısı komutunun içeriği cihaz veri biçimine göre değişir. Aşağıdaki tabloda komut içeriğinin depolandığı alanlar listelenmektedir.


      Device data format


      Synchronous field


      Asynchronous field


      Description


      ICA standard data format (Alink JSON)


      recv->data.sync_service_invoke


      recv->data.async_service_invoke


      Bu alandaki veriler, Alink verisindeki params parametresinin değeriyle aynı biçime sahiptir. Daha fazla bilgi için bkz. Service messages.


      passthrough/custom format


      recv->data.raw_data


      recv->data.raw_service_invoke


      Komut içeriğini ayrıştırmak için bir ayrıştırma betiği yüklemeniz gerekir. Daha fazla bilgi için bkz. Messages in passthrough/custom format.

    • Yanıtlamayı geri callback işlevinden göndermek yerine ayrı bir işlevle ele alıyorsanız, yanıt mesajındaki aşağıdaki parametrelerin değerlerinin IoT Platform'dan gelen istekteki değerlerle eşleştiğinden emin olun.

      • Eşzamanlı çağrı: rrpc_id ve msg_id

      • Eşzamansız çağrı: msg_id

    • IoT Platform'a bir hizmet yanıtı gönderirken zaman aşımı süresine dikkat edin:

      • Eşzamanlı çağrı: Eşzamanlı bir hizmet mesajı aldıktan sonra 8 saniye içinde yanıt göndermeniz gerekir. Aksi takdirde, cihaz mesajı almış olsa bile IoT Platform çağrıyı başarısız olarak değerlendirir.

      • Eşzamansız çağrı: İş gereksinimlerinize göre eşzamansız çağrılar için özel zaman aşımı mantığı tanımlayabilirsiniz. IoT Platform herhangi bir sınır koymaz.

  • Önerilen işleme mantığı:

    1. Hizmet komutunu yürütün.

    2. IoT Platform'a bir hizmet yanıtı döndürün.

  • Örnek koddaki işleme mantığı:

    Örnek kod yalnızca alınan mesajı yazdırır. Ayarlanan özelliklerin raporlanmasına ilişkin bir gösterim görmek için, TODO açıklamasının altındaki kod bloğunun yorumunu kaldırın ve /* ile */ sembollerini silin.

    • ICA standard data format (Alink JSON)

      • Eşzamanlı çağrı:

        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: The following code shows how to respond to a synchronous service invocation from 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");
                }
            }
        }
      • Eşzamansız çağrı:

        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: The following code shows how to respond to an asynchronous service invocation from IoT Platform. You can uncomment it to see the effect.
                */
            /*
            {
                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

      • Eşzamansız ikili hizmet çağrısı için işleme mantığı, ikili özellik ayarlama ile aynıdır. Daha fazla bilgi için bkz. Custom topic message parsing.

      • Aşağıdaki örnek kod, eşzamanlı ikili hizmet çağrısı için işleme mantığını göstermektedir:

        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: The following code shows how to respond to a synchronous service invocation from IoT Platform. You can uncomment it to see the effect. */
            /*
            {
                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);
            }
            */
        }

Adım 7: Bağlantıyı kesme

Not

MQTT genellikle kalıcı bağlantı gerektiren cihazlar için kullanılır. Bu nedenle program genellikle bu noktaya ulaşmaz.

Örnek programda ana iş parçacığı parametreleri yapılandırmak ve bağlantı kurmakla sorumludur. Bağlantı kurulduktan sonra ana iş parçacığı uyku moduna geçebilir.

IoT Platform'a bir bağlantı kesme mesajı göndermek ve ağ bağlantısını kesmek için aiot_mqtt_disconnect işlevini çağırabilirsiniz.

    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;
    }

Adım 8: Programdan çıkma

Veri modeli istemci örneğini yok etmek ve kaynaklarını serbest bırakmak için aiot_dm_deinit işlevini çağırın.

    res = aiot_dm_deinit(&dm_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_dm_deinit failed: -0x%04X\n", -res);
        return -1;
    }

Sonraki adımlar

  • Çalıştırılabilir dosyayı ./output/data-model-basic-demo oluşturmak için kodu derleyin.

    Daha fazla bilgi için bkz. Compile and run.

  • Çalıştırma sonucuyla ilgili ayrıntılar için bkz. Runtime logs.