Utilisez le Link SDK pour C afin d'envoyer ou de supprimer des balises d'appareil sur IoT Platform. Cet exemple utilise le fichier d'exemple ./demos/devinfo_posix_demo.c.
Informations générales
Pour plus d'informations sur les balises d'appareil, consultez la rubrique Présentation.
Les balises d'appareil nécessitent une connexion MQTT à IoT Platform. Pour plus d'informations sur le code de connexion MQTT, consultez la rubrique Présentation.
Étape 1 : Initialisation
-
Ajoutez les fichiers d'en-tête.
…… …… #include "aiot_devinfo_api.h" -
Configurez les dépendances sous-jacentes et la sortie des journaux.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb); -
Appelez l'opération aiot_devinfo_init pour créer une instance de client
Devinfoet initialiser les paramètres par défaut.devinfo_handle = aiot_devinfo_init(); if (devinfo_handle == NULL) { demo_mqtt_stop(&mqtt_handle); printf("aiot_devinfo_init failed\n"); return -1; }
Étape 2 : Configuration des fonctionnalités
Appelez l'opération aiot_devinfo_setopt pour configurer les paramètres suivants :
-
Associez un handle de connexion MQTT.
ImportantAvant de configurer les paramètres spécifiques aux balises d'appareil, assurez-vous que les informations de vérification de l'appareil sont spécifiées. Pour plus d'informations, consultez la rubrique Exemple d'utilisation.
-
Exemple de code :
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, mqtt_handle); -
Paramètres :
Paramètre
Exemple
Description
AIOT_DEVINFOOPT_MQTT_HANDLE
mqtt_handle
Le handle de connexion MQTT pour les balises d'appareil.
-
-
Configurez une fonction de rappel de message.
-
Exemple de code :
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_RECV_HANDLER, (void *)demo_devinfo_recv_handler); -
Paramètres :
Paramètre
Exemple
Description
AIOT_DEVINFOOPT_RECV_HANDLER
demo_devinfo_recv_handler
La fonction de rappel appelée lors de la réception d'un message de balise d'appareil.
-
-
Configurez la surveillance de l'état.
-
Définissez une fonction de rappel pour surveiller l'état.
Lorsque vous définissez la fonction de rappel, tenez compte des éléments suivants :
-
Si l'envoi de la balise échoue, l'un des types d'événements suivants est renvoyé :
Type d'événement
Description
AIOT_DEVINFOEVT_INVALID_DEVINFO
Les informations de l'appareil dans la réponse ne sont pas valides. Les valeurs ProductKey et DeviceName ne peuvent pas être obtenues.
AIOT_DEVINFOEVT_INVALID_RESPONSE
Un champ de la réponse n'est pas valide.
AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT
Un champ de la réponse présente un format non valide.
Dans cet exemple, la réponse est affichée. Vous pouvez personnaliser la logique de traitement en fonction de vos besoins métier.
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: { } } } -
-
Spécifiez la fonction de rappel pour surveiller l'état.
-
Exemple de code :
aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_EVENT_HANDLER, (void *)demo_devinfo_event_handler); -
Paramètres :
Paramètre
Exemple
Description
AIOT_DEVINFOOPT_EVENT_HANDLER
demo_devinfo_event_handler
Lorsque l'état de la connexion de l'appareil change, la logique de traitement correspondante définie dans cette fonction de rappel est exécutée.
-
-
Étape 3 : Mise à jour des balises
-
Appelez la fonction aiot_devinfo_send pour envoyer une requête à IoT Platform. Pour plus d'informations sur les paramètres de la requête, consultez l'étape précédente.
Lors de l'envoi de la requête, tenez compte des éléments suivants :
aiot_devinfo_msg_t est un paramètre d'entrée de la fonction
aiot_devinfo_send()qui spécifie le format des données.AIOT_DEVINFO_MSG_UPDATE spécifie le type de message.
-
Exemple de message :
Message de requête
Format Alink
Description
[ { "attrKey": "testKey", "attrValue": "testValue" } ]{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey", "attrValue": "testValue" } ], "method": "thing.deviceinfo.update" }Le corps du message est au format JSON. Le contenu correspond à la valeur du paramètre params dans les données Alink. Pour plus d'informations, consultez la rubrique Signaler les informations de balise.
Dans cet exemple, la balise spécifiée est
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); } Après réception de la requête, IoT Platform met à jour la balise de l'appareil et renvoie une réponse.
-
Une fois que l'appareil reçoit la réponse, la fonction de rappel
demo_devinfo_recv_handlerest appelée.Lorsque vous définissez la fonction de rappel, tenez compte des éléments suivants :
aiot_devinfo_recv_t est un paramètre d'entrée de la fonction de rappel qui spécifie le format des données.
AIOT_DEVINFORECV_GENERIC_REPLY spécifie le type de message.
Dans cet exemple, le message est affiché. Vous pouvez personnaliser la logique de traitement en fonction de vos besoins métier.
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: { } } }
(Facultatif) Étape 4 : Suppression des balises
-
Une fois les balises d'appareil envoyées à IoT Platform, vous pouvez appeler l'opération aiot_devinfo_send pour les supprimer.
Lors de l'envoi de la requête, tenez compte des éléments suivants :
aiot_devinfo_msg_t est un paramètre d'entrée de la fonction aiot_devinfo_send() qui spécifie le format des données.
AIOT_DEVINFO_MSG_DELETE spécifie le type de message.
-
Exemple de message :
Message de requête
Format Alink
Description
{ "attrKey": "testKey" }{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": [ { "attrKey": "testKey", } ], "method": "thing.deviceinfo.update" }Le corps du message est au format JSON. Le contenu correspond à la valeur du paramètre params dans les données Alink. Pour plus d'informations, consultez la rubrique Supprimer les informations de balise.
Dans cet exemple, la balise spécifiée est
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); }
Après réception de la requête, IoT Platform supprime la balise et renvoie une réponse.
-
Une fois que l'appareil reçoit la réponse, la fonction de rappel demo_devinfo_recv_handler est appelée.
Pour plus d'informations, consultez la section Traiter les messages de réponse.
Étape 5 : Quitter le programme
Appelez la fonction aiot_devinfo_deinit pour supprimer l'instance de client Devinfo et libérer les ressources.
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;
}
Étapes suivantes
-
Après avoir configuré le fichier de code d'exemple, compilez-le pour générer un fichier exécutable. Dans cet exemple, le fichier exécutable ./demos/devinfo-posix-demo est généré.
Pour plus d'informations, consultez la rubrique Compiler et exécuter.
Pour plus d'informations sur les résultats d'exécution, consultez la rubrique Journaux d'opération.