Este tema utiliza el./demos/dynreg_basic_demo.c archivo de demostración del SDK de Link en C como ejemplo para mostrarle cómo llamar a las API de Link SDK y enviar una solicitud HTTPS a IoT Platform, registrar un dispositivo de forma dinámica y obtener la información de autenticación necesaria para activar el dispositivo.
Contexto
Para obtener más información sobre el registro dinámico por HTTPS, consulte Overview of HTTPS dynamic registration.
Paso 1: Inicialización
-
Agregue los archivos de encabezado.
#include "aiot_state_api.h" #include "aiot_sysdep_api.h" #include "aiot_dynreg_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 aiot_dynreg_init para crear una
dynreginstancia de cliente e inicializar los parámetros predeterminados.dynreg_handle = aiot_dynreg_init(); if (dynreg_handle == NULL) { printf("aiot_dynreg_init failed\n"); return -1; }
Paso 2: Configurar funciones
Llame a aiot_dynreg_init para configurar las siguientes funciones.
Para obtener más información sobre los elementos de configuración, consulte HTTPS Dynamic Registration Configuration Items.
-
Configure los parámetros de conexión.
-
Código de ejemplo:
char *url = "iot-auth.cn-shanghai.aliyuncs.com"; …… char *product_key = "a18wP******"; char *product_secret = "CpIlPVCXI7******"; char *device_name = "LightSwitch"; …… …… /* Configure the server address. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_HOST, (void *)host); /* Configure the server port. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PORT, (void *)&port); /* Configure the ProductKey of the device. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_KEY, (void *)product_key); /* Configure the ProductSecret of the device. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_SECRET, (void *)product_secret); /* Configure the DeviceName of the device. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_DEVICE_NAME, (void *)device_name); /* Configure the security credentials for the network connection. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_NETWORK_CRED, (void *)&cred); …… …… -
Parámetros relacionados:
Parámetro
Ejemplo
Descripción
url
iot-auth.cn-shanghai.aliyuncs.com
El nombre de dominio del servidor para el registro dinámico por HTTPS.
Cambie
cn-shanghaidel ejemplo por el identificador de la región donde se despliega su servicio. Así obtendrá el endpoint correspondiente a su dispositivo.En la esquina superior izquierda de la consola de IoT Platform, consulte la región donde está desplegado su servicio. Para obtener más información sobre los identificadores de región, consulte Supported regions.
Este ejemplo utiliza una instancia pública en la región China (Shanghai).
NotaLas regiones China (Beijing) y China (Shenzhen) no son compatibles.
product_key
a18wP
La ProductKey y la ProductSecret que se obtienen al crear un producto en la consola de IoT Platform. Para obtener más información, consulte Create a product.
product_secret
CpIlPVCXI7
device_name
LightSwitch
El nombre del dispositivo. El valor de este parámetro debe coincidir con el DeviceName que especificó al agregar el dispositivo al producto en IoT Platform.
IoT Platform verifica el DeviceName durante la activación del dispositivo. Se recomienda usar un identificador que pueda leerse directamente desde el dispositivo, como la dirección MAC, el número de identidad internacional de equipo móvil (IMEI) o el número de serie (SN), como DeviceName.
ImportanteEl nombre debe ser igual al que especificó cuando creó el dispositivo en IoT Platform.
-
-
Configure la devolución de llamada de mensajes.
-
Configure la función de devolución de llamada de mensajes.
-
Código de ejemplo:
int main(int argc, char *argv[]) { …… …… aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_RECV_HANDLER, (void *)demo_dynreg_recv_handler); aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_USERDATA, (void *)&demo_info); …… …… } -
Parámetros relacionados:
Elemento de configuración
Valor de ejemplo
Descripción
AIOT_DYNREGOPT_RECV_HANDLER
demo_dynreg_recv_handler
Establece la devolución de llamada de mensajes. Cuando se recibe un mensaje, se ejecuta el procesamiento correspondiente según la configuración de esta función de devolución de llamada.
AIOT_DYNREGOPT_USERDATA
&demo_info
Establezca el contexto que se devuelve cuando se llama a
demo_dynregmq_recv_handler.
-
-
Defina la función de devolución de llamada de mensajes.
void demo_dynreg_recv_handler(void *handle, const aiot_dynreg_recv_t *packet, void *userdata) { demo_info_t *demo_info = (demo_info_t *)userdata; switch (packet->type) { case AIOT_DYNREGRECV_STATUS_CODE: { demo_info->code = packet->data.status_code.code; } break; /* TODO: In the callback, you must save the content of the space pointed to by the packet. After the callback returns, this space is released. */ case AIOT_DYNREGRECV_DEVICE_INFO: { demo_info->device_secret = malloc(strlen(packet->data.device_info.device_secret) + 1); if (demo_info->device_secret != NULL) { memset(demo_info->device_secret, 0, strlen(packet->data.device_info.device_secret) + 1); memcpy(demo_info->device_secret, packet->data.device_info.device_secret, strlen(packet->data.device_info.device_secret)); } } break; default: { } break; } }
-
Paso 3: Enviar una solicitud
Llame a aiot_dynreg_send_request, que usa los parámetros de Configure connection para enviar una solicitud de registro dinámico al servidor.
/* Send a dynamic registration request. */
res = aiot_dynreg_send_request(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_send_request failed: -0x%04X\n", -res);
return -1;
}
Paso 4: Recibir una confirmación
Después de enviar el mensaje de solicitud de registro , IoT Platform devuelve una confirmación. A continuación, el dispositivo llama a aiot_dynreg_recv para recibir la confirmación y ejecutar la acción correspondiente según la función de devolución de llamada de mensajes.
res = aiot_dynreg_recv(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_recv failed: -0x%04X\n", -res);
return -1;
}
El programa de ejemplo solo imprime el resultado. Sin embargo, en un entorno de producción también debe guardar la información de autenticación de identidad del dispositivo devuelta en un archivo local. Esta información se utiliza para conectarse a IoT Platform cada vez que el dispositivo inicia sesión.
if (demo_info.device_secret != NULL) {
printf("device secret: %s\n", demo_info.device_secret);
free(demo_info.device_secret);
}
Paso 5: Salir del programa
Llame a aiot_dynreg_deinit para destruir la dynreg instancia de cliente y liberar los recursos.
res = aiot_dynregmq_deinit(&dynregmq_handle);
Pasos siguientes
-
Una vez configurado el archivo de ejemplo, compílelo para generar el archivo ejecutable
./output/dynreg-basic-demo.Para obtener más información, consulte Compile and run.
Para consultar una descripción detallada de los resultados de la operación, revise operational log.