Utilice Link SDK for C para enviar o eliminar etiquetas de dispositivo en IoT Platform. Este ejemplo utiliza el archivo de muestra ./demos/devinfo_posix_demo.c.
Contexto
Paso 1: Inicialización
-
Agregue los archivos de encabezado.
…… …… #include "aiot_devinfo_api.h" -
Configure las dependencias subyacentes y la salida de registros.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb); -
Llame a la operación aiot_devinfo_init para crear una instancia de cliente
Devinfoe inicializar los parámetros predeterminados.devinfo_handle = aiot_devinfo_init(); if (devinfo_handle == NULL) { demo_mqtt_stop(&mqtt_handle); printf("aiot_devinfo_init failed\n"); return -1; }
Paso 2: Configurar funciones
Llame a la operación aiot_devinfo_setopt para configurar los siguientes ajustes:
-
Asocie un identificador de conexión MQTT.
ImportanteAntes de configurar los parámetros específicos de las etiquetas de dispositivo, asegúrese de que se haya especificado la información de verificación del dispositivo. Para obtener más información, consulte Usage example.
-
Código de ejemplo:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, mqtt_handle); -
Parámetros:
Parámetro
Ejemplo
Descripción
AIOT_DEVINFOOPT_MQTT_HANDLE
mqtt_handle
El identificador de conexión MQTT para las etiquetas de dispositivo.
-
-
Configure una función de callback de mensajes.
-
Código de ejemplo:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_RECV_HANDLER, (void *)demo_devinfo_recv_handler); -
Parámetros:
Parámetro
Ejemplo
Descripción
AIOT_DEVINFOOPT_RECV_HANDLER
demo_devinfo_recv_handler
La función de callback que se invoca cuando se recibe un mensaje de etiqueta de dispositivo.
-
-
Configure el monitoreo de estado.
-
Defina una función de callback para monitorear el estado.
Al definir la función de callback, tenga en cuenta los siguientes puntos:
-
Si falla el envío de la etiqueta, se devuelve uno de los siguientes tipos de evento:
Tipo de evento
Descripción
AIOT_DEVINFOEVT_INVALID_DEVINFO
La información del dispositivo en la respuesta no es válida. No se pueden obtener los valores de ProductKey y DeviceName.
AIOT_DEVINFOEVT_INVALID_RESPONSE
Un campo en la respuesta no es válido.
AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT
Un campo en la respuesta tiene un formato no válido.
En este ejemplo, se imprime la respuesta. Puede personalizar la lógica de procesamiento según sus requisitos empresariales.
void demo_devinfo_event_handler(void *handle, const aiot_devinfo_event_t *event, void *userdata) { switch (event->type) { case AIOT_DEVINFOEVT_INVALID_DEVINFO: { printf("AIOT_DEVINFOEVT_INVALID_DEVINFO\n"); } break; case AIOT_DEVINFOEVT_INVALID_RESPONSE: { printf("AIOT_DEVINFOEVT_INVALID_RESPONSE\n"); } break; case AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT: { printf("AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT\n"); } break; default: { } } } -
-
Especifique la función de callback para monitorear el estado.
-
Código de ejemplo:
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_EVENT_HANDLER, (void *)demo_devinfo_event_handler); -
Parámetros:
Parámetro
Ejemplo
Descripción
AIOT_DEVINFOOPT_EVENT_HANDLER
demo_devinfo_event_handler
Cuando cambia el estado de conexión del dispositivo, se ejecuta la lógica de procesamiento correspondiente definida en esta función de callback.
-
-
Paso 3: Actualizar etiquetas
-
Llame a la función aiot_devinfo_send para enviar una solicitud a IoT Platform. Para obtener más información sobre los parámetros de la solicitud, consulte previous step.
Al enviar la solicitud, tenga en cuenta los siguientes puntos:
aiot_devinfo_msg_t es un parámetro de entrada de la función
aiot_devinfo_send()que especifica el formato de datos.AIOT_DEVINFO_MSG_UPDATE especifica el tipo de mensaje.
-
Mensaje de ejemplo:
Mensaje de solicitud
Formato Alink
Descripción
[ { "attrKey": "testKey", "attrValue": "testValue" } ]{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey", "attrValue": "testValue" } ], "method": "thing.deviceinfo.update" }El cuerpo del mensaje está en formato JSON. El contenido corresponde al valor del parámetro params en los datos Alink. Para obtener más información, consulte Report tag information.
En este ejemplo, la etiqueta especificada es
testKey: testValue.
{ aiot_devinfo_msg_t devinfo_update; char *update = "[{\"attrKey\":\"testKey\",\"attrValue\":\"testValue\"}]"; memset(&devinfo_update, 0, sizeof(aiot_devinfo_msg_t)); devinfo_update.product_key = product_key; devinfo_update.device_name = device_name; devinfo_update.type = AIOT_DEVINFO_MSG_UPDATE; devinfo_update.data.update.params = update; res = aiot_devinfo_send(devinfo_handle, &devinfo_update); if (res < STATE_SUCCESS) { aiot_devinfo_deinit(&devinfo_handle); demo_mqtt_stop(&mqtt_handle); return -1; } printf("aiot_devinfo_send update msg id: %d\n", res); } Después de que IoT Platform recibe la solicitud, actualiza la etiqueta del dispositivo y devuelve una respuesta.
-
Una vez que el dispositivo recibe la respuesta, se llama a la función de callback
demo_devinfo_recv_handler.Al definir la función de callback, tenga en cuenta los siguientes puntos:
aiot_devinfo_recv_t es un parámetro de entrada de la función de callback que especifica el formato de datos.
AIOT_DEVINFORECV_GENERIC_REPLY especifica el tipo de mensaje.
En este ejemplo, se imprime el mensaje. Puede personalizar la lógica de procesamiento según sus requisitos empresariales.
void demo_devinfo_recv_handler(void *handle, const aiot_devinfo_recv_t *packet, void *userdata) { switch (packet->type) { /* The response message from IoT Platform. */ case AIOT_DEVINFORECV_GENERIC_REPLY: { printf("pk: %s, dn: %s, code: %d, msg id: %d, data: %.*s, message: %.*s\n", packet->product_key, packet->device_name, packet->data.generic_reply.code, packet->data.generic_reply.msg_id, packet->data.generic_reply.data_len, packet->data.generic_reply.data, packet->data.generic_reply.message_len, packet->data.generic_reply.message); } break; default: { } } }
(Opcional) Paso 4: Eliminar etiquetas
-
Después de enviar las etiquetas de dispositivo a IoT Platform, puede llamar a la operación aiot_devinfo_send para eliminar etiquetas.
Al enviar la solicitud, tenga en cuenta los siguientes puntos:
aiot_devinfo_msg_t es un parámetro de entrada de la función aiot_devinfo_send() que especifica el formato de datos.
AIOT_DEVINFO_MSG_DELETE especifica el tipo de mensaje.
-
Mensaje de ejemplo:
Mensaje de solicitud
Formato Alink
Descripción
{ "attrKey": "testKey" }{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey", } ], "method": "thing.deviceinfo.update" }El cuerpo del mensaje está en formato JSON. El contenido corresponde al valor del parámetro params en los datos Alink. Para obtener más información, consulte Delete tag information.
En este ejemplo, la etiqueta especificada es
testKey.{ aiot_devinfo_msg_t devinfo_delete; char *delete = "[{\"attrKey\":\"testKey\"}]"; memset(&devinfo_delete, 0, sizeof(aiot_devinfo_msg_t)); devinfo_delete.product_key = product_key; devinfo_delete.device_name = device_name; devinfo_delete.type = AIOT_DEVINFO_MSG_DELETE; devinfo_delete.data.delete.params = delete; res = aiot_devinfo_send(devinfo_handle, &devinfo_delete); if (res < STATE_SUCCESS) { aiot_devinfo_deinit(&devinfo_handle); demo_mqtt_stop(&mqtt_handle); return -1; } printf("aiot_devinfo_send delete msg id: %d\n", res); }
Después de que IoT Platform recibe la solicitud, elimina la etiqueta y devuelve una respuesta.
-
Una vez que el dispositivo recibe la respuesta, se llama a la función de callback demo_devinfo_recv_handler.
Para obtener más información, consulte Process response messages.
Paso 5: Salir del programa
Llame a la función aiot_devinfo_deinit para eliminar la instancia de cliente Devinfo y liberar recursos.
res = aiot_devinfo_deinit(&devinfo_handle);
if (res < STATE_SUCCESS) {
demo_mqtt_stop(&mqtt_handle);
printf("aiot_devinfo_deinit failed: -0x%04X\n", -res);
return -1;
}
Siguientes pasos
-
Después de configurar el archivo de código de ejemplo, compílelo para generar un archivo ejecutable. En este ejemplo, se genera el archivo ejecutable ./demos/devinfo-posix-demo.
Para obtener más información, consulte Compile and run.
Para obtener más información sobre los resultados de ejecución, consulte Operational logs.