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
TSL modeli hakkında daha fazla bilgi için bkz. Kullanım talimatları.
TSL modeli MQTT bağlantılarını kullanır. İlgili kod örnekleri için bkz. MQTT connection.
Adım 1: Başlatma
-
Üstbilgi dosyasını dahil edin.
…… …… #include "aiot_dm_api.h" -
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); -
Bir
data-modelistemci ö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.
-
Bir MQTT bağlantı tutamacı ilişkilendirin.
ÖnemliTSL ö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.
-
-
TSL mesajlarını işlemek için bir geri arama işlevi uygulayın.
-
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; } } -
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.
-
-
-
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
1olarak 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_replyyapı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_datayapı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)
-
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_blockgibi ö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.
-
-
Ö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.
NotYalnı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_replykonusuna 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.LightSwitchcihazın DeviceName değeridir.
-
-
-
Ö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
-
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.
-
İ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); }
TSL modellerini iletişim için kullanırken veri trafiğinin eşiği aşmadığından emin olun.
İletişim sınırları hakkında daha fazla bilgi için bkz. Connection and communication.
İletişim hacmi eşiği aşarsa birikmiş mesajları görüntülemek için IoT Platform konsolunda oturum açın. Daha fazla bilgi için bkz. View and monitor consumer groups.
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 formatrecv->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ığı:
Cihaz özelliklerini güncelleyin.
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,
TODOaçı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.
-
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.
-
-
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.
NotYalnı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" }
-
-
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_invokerecv->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 formatrecv->data.raw_datarecv->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_idvemsg_idEş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ığı:
Hizmet komutunu yürütün.
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,
TODOaçı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
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.