

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Client du SDK Hub
<a name="hub-sdk-client"></a>

La bibliothèque client du SDK Hub sert d'interface entre le SDK Hub pour les intégrations gérées et votre propre pile de protocoles exécutée sur le même hub. Il expose un ensemble d'API publiques pour faciliter l'interaction de votre pile de protocoles avec les composants du SDK Device Hub. Les cas d'utilisation incluent le contrôle personnalisé des plugins, le provisionneur de plugins personnalisé et le contrôleur local.

**Topics**
+ [Obtenez votre SDK Hub d'intégrations gérées](#custom-protocol-plugin-getting-started)
+ [À propos de la boîte à outils du SDK Hub](#custom-protocol-plugin-toolkit)
+ [Créez votre application personnalisée avec le client Hub SDK](#custom-protocol-plugin-create-app)
+ [Exécution de votre application personnalisée](#custom-protocol-plugin-running-application)
+ [Référence de l'API du client Hub SDK](hub-sdk-client-api-reference.md)
+ [Types de données](#custom-protocol-plugin-data-types)

## Obtenez votre SDK Hub d'intégrations gérées
<a name="custom-protocol-plugin-getting-started"></a>

Le client Hub SDK est fourni avec le SDK d'intégrations gérées. Contactez-nous depuis la [console des intégrations gérées](https://console.aws.amazon.com/iot/home#/managed-integrations/intro) pour accéder au SDK du hub.

## À propos de la boîte à outils du SDK Hub
<a name="custom-protocol-plugin-toolkit"></a>

Après le téléchargement, vous verrez un `IotMI-DeviceSDK-Toolkit` dossier contenant tous les fichiers d'en-tête publics et `.so` les fichiers que vous pouvez utiliser dans votre application. L'équipe des intégrations gérées fournit également un exemple `main.cpp` à des fins de démonstration, ainsi que le binaire de l'application de démonstration `bin/` que vous pouvez exécuter directement sous cette rubrique. Vous pouvez éventuellement l'utiliser comme point de départ pour votre application. 

## Créez votre application personnalisée avec le client Hub SDK
<a name="custom-protocol-plugin-create-app"></a>

Suivez les étapes ci-dessous pour créer votre application personnalisée.

1. Incluez les fichiers d'en-tête (.h) et les fichiers d'objets partagés (.so) dans votre application.

   Vous devez inclure les fichiers d'en-tête publics (.h) et les fichiers d'objets partagés (.so) dans votre application. Pour les fichiers .so, vous pouvez les placer dans un dossier lib. La mise en page finale sera similaire à celle-ci :

   ```
   ├── include
   │   ├── iotmi_device_sdk_client
   │   │   └── iotmi_device_sdk_client_common_types.h
   │   ├── iotmi_device_sdk_client.h
   │   └── iotshd_status.h
   ├── lib
   │   ├── libiotmi_devicesdk_client_module.so
   │   └── libiotmi_log_c.so
   ```

1. Créez un client Hub SDK dans votre application principale.

   1. Dans votre application principale, vous devez d'abord initialiser le client du SDK Hub avant de pouvoir l'utiliser pour traiter les demandes. Vous pouvez simplement créer le client avec un`clientId`.

   1. Une fois que vous avez le client, vous pouvez le connecter au SDK Device pour les intégrations gérées.

      Voici un exemple de création du client du SDK Hub et de la procédure de connexion.

      ```
      #include <cstdlib>
      #include <string>
      #include "iotshd_status.h"
      #include "iotmi_device_sdk_client.h"
      
      auto client = std::make_unique<DeviceSDKClient>({{your_own_clientId}});
      iotmi_statusCode_t status = client->connect();
      ```
**Note**  
{{your\_own\_clientId}}doit être identique à celui que vous spécifiez dans [start-device-discovery](https://docs.aws.amazon.com/cli/latest/reference/iot-managed-integrations/start-device-discovery.html) dans la configuration guidée par l'utilisateur, ou dans celui que vous spécifiez dans [create-managed-thing](https://docs.aws.amazon.com/cli/latest/reference/iot-managed-integrations/create-managed-thing.html) dans le flux de provisionnement de configuration simple.

1. Publiez et abonnez-vous en suivant les étapes ci-dessous.

   1. Une fois la connexion établie, vous pouvez désormais vous abonner aux tâches entrantes à partir du SDK du hub d'intégrations gérées. Les tâches entrantes peuvent être des tâches de contrôle ou des tâches de provisionnement. Vous devez également définir votre propre fonction de rappel lors de la réception des tâches et votre propre contexte personnalisé à des fins de suivi.

      ```
            // subscribe to provisioning tasks
            iotmi_statusCode_t status = client->iotmi_provision_subscribe_to_tasks(
            example_subscriber_callback, custom_context);
            
            // subscribe to control tasks
            iotmi_statusCode_t status = client->iotmi_control_subscribe_to_tasks(
            example_subscriber_callback, custom_context);
      ```

   1. Une fois la connexion établie, vous pouvez désormais publier les demandes de votre application vers le SDK du Hub d'intégrations gérées. Vous pouvez définir votre propre type de message de tâche, avec différentes charges utiles pour différents objectifs commerciaux. Les demandes peuvent inclure à la fois des demandes de contrôle et des demandes de fourniture, comme dans le cas du flux d'abonnement. Enfin, vous pouvez attribuer une adresse pour `rspPayload` obtenir la réponse du SDK du Hub d'intégrations gérées de manière synchronisée. 

      ```
      // publish control request
        iotmi_client_request_t api_payload = {
                  .messageType = C2MIMessageType::C2MI_CONTROL_EVENT,
                  .reqPayload = (uint8_t *)"{{define_your_req_payload}}",
                  .rspPayload = (uint8_t *)calloc(1000, sizeof(uint8_t))
        };
      
        status = client->iotmi_control_publish_request(&api_payload); 
        
        // publish provision request 
        iotmi_client_request_t api_payload = {
                  .messageType = C2MIMessageType::C2MI_DEVICE_ONBOARDED,
                  .reqPayload = (uint8_t *)"{{define_your_req_payload}}",
                  .rspPayload = (uint8_t *)calloc(1000, sizeof(uint8_t))
        };
        status = client->iotmi_provision_publish_request(&api_payload);
      ```

1. Créez le vôtre `CMakeLists.txt` et créez votre application à partir de là. La sortie finale peut être un fichier binaire exécutable tel que `MyFirstApplication`

## Exécution de votre application personnalisée
<a name="custom-protocol-plugin-running-application"></a>

Avant d'exécuter votre application personnalisée, suivez les étapes suivantes pour configurer votre hub et démarrer le SDK du hub d'intégrations gérées :
+ Suivez les instructions d'intégration à [Intégrez vos hubs aux intégrations gérées](managedintegrations-sdk-v2-cookbook-usinghub.md) l'adresse.
+ Terminez le processus d'installation décrit dans[Installez et validez le SDK du hub d'intégrations gérées](managedintegrations-sdk-v2-cookbook-deployment.md).

Une fois les conditions requises remplies, vous pouvez exécuter votre application personnalisée. Par exemple :

```
./MyFirstApplication
```

**Important**  
Vous devez mettre à jour manuellement le script de démarrage indiqué dans la liste [Déployez le SDK du Hub à l'aide d'un script](managedintegrations-sdk-v2-cookbook-deployment-nogg.md) avec un script pour démarrer votre propre application. L'ordre est important, ne le modifiez pas.  
Mettez à jour les éléments suivants. Modifier  

```
./IotMI-DeviceSDK-Toolkit/bin/DeviceSDKClientDemo >> $LOGS_DIR/logDeviceSDKClientDemo_logs.txt &
```
to  

```
./MyFirstApplication >> $LOGS_DIR/MyFirstApplication_logs.txtt &
```

## Types de données
<a name="custom-protocol-plugin-data-types"></a>

Cette section définit les types de données utilisés pour le plug-in de protocole personnalisé.

**iotmi\_client\_request\_t**  
Représente une demande à publier dans les composants des intégrations gérées.    
**MessageType**  
Type du message (CommonTypes: :C2MIMessageType). La liste suivante indique les valeurs valides.  
+ `C2MI_DEVICE_ONBOARDED`: indique un message d'intégration de l'appareil avec la charge utile associée.
+ `C2MI_DE_PROVISIONING_PRE_ASSOCIATED_COMPLETE`: indique une notification de fin de tâche de déprovisionnement pour un appareil pré-associé.
+ `C2MI_DE_PROVISIONING_ACTIVATED_COMPLETE`: indique une notification de fin de tâche de déprovisionnement pour un appareil activé.
+ `C2MI_DE_PROVISIONING_COMPLETE_RESPONSE`: indique une réponse complète à une tâche de déprovisionnement.
+ `C2MI_CONTROL_EVENT`: indique un événement de contrôle susceptible de modifier l'état de l'appareil.
+ `C2MI_CONTROL_SEND_COMMAND`: indique une commande de contrôle provenant d'un contrôleur local.
+ `C2MI_CONTROL_SEND_DEVICE_STATE_QUERY`: indique une demande d'état du dispositif de contrôle provenant d'un contrôleur local.  
**Charge utile Req**  
La charge utile de la demande, généralement une JSON-formatted chaîne de caractères.  
**Charge utile RSP**  
La charge utile de réponse, alimentée par les composants des intégrations gérées.

**iotmi\_client\_event\_t**  
Représente un événement reçu des composants d'intégrations gérées.    
**identifiant\_événement**  
Identifiant unique de l'événement.  
**longueur**  
Longueur des données de l'événement.  
**data**  
Un pointeur vers les données de l'événement, y compris le`messageType`. La liste suivante indique les valeurs possibles.  
+ `C2MI_PROVISION_UGS_TASK`: indique une tâche de provisionnement pour le flux UGS.
+ `C2MI_PROVISION_SS_TASK`: indique une tâche de provisionnement pour le SimpleSetup flux.
+ `C2MI_DE_PROVISION_PRE_ASSOCIATED_TASK`: indique une tâche de déprovisionnement pour un appareil pré-associé.
+ `C2MI_DE_PROVISION_ACTIVATED_TASK`: indique une tâche de déprovisionnement pour un appareil activé.
+ `C2MI_DEVICE_ONBOARDED_RESPONSE`: indique une réponse d'intégration de l'appareil.
+ `C2MI_CONTROL_TASK`: indique une tâche de contrôle.
+ `C2MI_CONTROL_EVENT_NOTIFICATION`: indique une notification d'événement de contrôle pour un contrôleur local.  
**ctx**  
Contexte personnalisé associé à l'événement.