

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.

# Tutoriel : Republication d'un message MQTT
<a name="iot-repub-rule"></a>

Ce didacticiel explique comment créer une AWS IoT règle qui publie un message MQTT lorsqu'un message MQTT spécifié est reçu. La charge utile des messages entrants peut être modifiée par la règle avant sa publication. Cela permet de créer des messages adaptés à des applications spécifiques sans qu'il soit nécessaire de modifier votre appareil ou son microprogramme. Vous pouvez également utiliser l'aspect filtrage d'une règle pour publier des messages uniquement lorsqu'une condition spécifique est remplie.

Les messages republiés par une règle agissent comme des messages envoyés par n'importe quel autre AWS IoT appareil ou client. Les appareils peuvent s'abonner aux messages republiés de la même manière qu'ils peuvent s'abonner à n'importe quel autre objet de message MQTT.

**Ce que vous allez apprendre dans ce didacticiel :**
+ Comment utiliser des requêtes et des fonctions SQL simples dans une déclararionde requête de règle
+ Comment utiliser le client MQTT pour tester une règle AWS IoT 

Ce didacticiel vous prendra environ 30 minutes.

**Topics**
+ [Passez en revue les sujets et AWS IoT les règles du MQTT](#iot-repub-rule-mqtt)
+ [Étape 1 : créer une AWS IoT règle pour republier un message MQTT](#iot-repub-rule-define)
+ [Étape 2 : Test de votre règle](#iot-repub-rule-test)
+ [Étape 3 : examen des résultats et des étapes suivantes](#iot-repub-rule-review)

**Avant de commencer ce didacticiel, assurez-vous de disposer des éléments suivants :**
+ 

**[Configurez Compte AWS](setting-up.md)**  
Vous aurez besoin de votre AWS IoT console Compte AWS et de votre console pour terminer ce didacticiel.
+ 

**Révisé [Afficher les messages MQTT avec le client AWS IoT MQTT](view-mqtt-messages.md)**  
Assurez-vous de pouvoir utiliser le client MQTT pour vous abonner à un objet et le publier. Vous allez utiliser le client MQTT pour tester votre nouvelle règle dans le cadre de cette procédure.

## Passez en revue les sujets et AWS IoT les règles du MQTT
<a name="iot-repub-rule-mqtt"></a>

Avant de parler de AWS IoT règles, il est utile de comprendre le protocole MQTT. Dans les solutions IoT, le protocole MQTT offre certains avantages par rapport aux autres protocoles de communication réseau, tels que le HTTP, ce qui en fait un choix populaire pour les appareils IoT. Cette section passe en revue les principaux aspects du MQTT tels qu'ils s'appliquent à ce didacticiel. Pour plus d'informations sur la comparaison entre MQTT et HTTP, consultez [Choix d'un protocole d'application pour la communication de votre appareil](protocols.md#protocol-selection).

**Protocole MQTT**  
Le protocole MQTT utilise un modèle publish/subscribe de communication avec son hôte. Pour envoyer des données, les appareils publient des messages identifiés par des sujets sur le courtier de AWS IoT messages. Pour recevoir des messages du courtier de messages, les appareils s'abonnent aux objets qu'ils recevront en envoyant des filtres de objets dans les demandes d'abonnement adressées au courtier de messages. Le moteur de AWS IoT règles reçoit les messages MQTT du courtier de messages.

**AWS IoT règles**  
AWS IoT les règles consistent en une instruction de requête de règle et une ou plusieurs actions de règles. Lorsque le moteur de AWS IoT règles reçoit un message MQTT, ces éléments agissent sur le message comme suit.
+ 

**Déclaration de requête de règle**  
L'déclararionde requête de la règle décrit les objets MQTT à utiliser, interprète les données issues de la charge utile du message et met en forme les données comme décrit par une déclararionSQL similaire aux instructions utilisées par les bases de données SQL courantes. Le résultat de l'déclararionde requête correspond aux données envoyées aux actions de la règle.
+ 

**Action de règle**  
Chaque action de règle d'une règle agit sur les données qui résultent de l'instruction de requête de la règle. AWS IoT prend en charge [de nombreuses actions de règles](iot-rule-actions.md). Dans ce didacticiel, vous allez toutefois vous concentrer sur l'action de la [Republier](republish-rule-action.md) règle, qui publie le résultat de l'déclararionde requête sous forme de message MQTT avec un objet spécifique.

## Étape 1 : créer une AWS IoT règle pour republier un message MQTT
<a name="iot-repub-rule-define"></a>

La AWS IoT règle que vous allez créer dans ce didacticiel s'abonne aux rubriques `device/device_id/data` MQTT où *device\$1id* figure l'identifiant de l'appareil qui a envoyé le message. Ces rubriques sont décrites par un [filtre de rubrique](topics.md#topicfilters) en tan que `device/+/data`, où le `+` est un caractère générique correspondant à n'importe quelle chaîne située entre les deux barres obliques.

Lorsque la règle reçoit un message d'un objet correspondant, elle republie les valeurs `device_id` et `temperature` sous la forme d'un nouveau message MQTT avec l’ `device/data/temp` objet. 

Par exemple, la charge utile d'un message MQTT avec l’ `device/22/data` objet se présente comme suit :

```
{
  "temperature": 28,
  "humidity": 80,
  "barometer": 1013,
  "wind": {
    "velocity": 22,
    "bearing": 255
  }
}
```

La règle prend la `temperature` valeur de la charge utile du message et celle `device_id` de l'objet, et les republie sous forme de message MQTT avec le `device/data/temp` objet et une charge utile du message qui ressemblent à ceci :

```
{
  "device_id": "22",
  "temperature": 28
}
```

Avec cette règle, les appareils qui n'ont besoin que de l'identifiant de l'appareil et des données de température s'abonnent à la `device/data/temp` rubrique pour ne recevoir que ces informations.

**Pour créer une règle qui republie un message MQTT**

1. Ouvrez [le hub de **règles** de la AWS IoT console](https://console.aws.amazon.com//iot/home#/rulehub).

1. Dans **Règles**, choisissez **Créer** et commencez à créer votre nouvelle règle.

1. Dans la partie supérieure de **Créer une règle** :

   1. Dans **Nom**, entrez le nom de la règle. Pour ce didacticiel, nommez le **republish\$1temp**.

      N'oubliez pas qu'un nom de règle doit être unique au sein de votre compte et de votre région, et qu'il ne doit pas comporter d'espaces. Nous avons utilisé un trait de soulignement dans ce nom pour séparer les deux mots du nom de la règle.

   1.  Dans **Description**, décrivez la règle. 

      Une description significative vous permet de vous souvenir du rôle de cette règle et de la raison pour laquelle vous l'avez créée. La description peut être aussi longue que nécessaire, donc soyez aussi détaillée que possible. 

1. Dans l'**déclararionde requête règle** de **Create a rule** :

   1.  Dans **Utiliser la version SQL**, sélectionnez **2016-03-23**. 

   1. Dans la zone d'édition de la **instruction de requête de règle**, entrez l'instruction : 

      ```
      SELECT topic(2) as device_id, temperature FROM 'device/+/data'
      ```

      Cette instruction :
      + Écoute les messages MQTT dont le objet correspond au filtre de `device/+/data` objet.
      + Sélectionne le deuxième élément dans la chaîne de l'objet et l'affecte au `device_id` champ.
      + Sélectionne le `temperature` champ de valeur dans la charge utile du message et l'affecte au `temperature` champ.

1. Dans **Définir une ou plusieurs actions** :

   1. Pour ouvrir la liste des actions de règle pour cette règle, choisissez **Ajouter une action**.

   1. Dans **Sélectionner une action**, choisissez **Republier un message dans un AWS IoT sujet**.

   1. Au bas de la liste d'actions, choisissez **Configurer l'action** pour ouvrir la page de configuration de l'action sélectionnée.

1. Sous **Configurer les actions** :

   1.  Dans **Sujet**, entrez **device/data/temp**. Il s'agit de l'objet MQTT du message que cette règle publiera. 

   1.  Dans **Qualité de service**, choisissez **0 - Le message est délivré zéro fois ou plus**. 

   1.  Dans **Choisir ou créer un rôle pour accorder AWS IoT l'accès pour effectuer cette action** :

      1.  Choisissez **Create Role** (Créer un rôle). La boîte de dialogue **Créer un rôle** s'ouvre. 

      1. Saisissez un nom qui décrit le nouveau rôle. Dans le cadre de ce tutoriel, utilisez **republish\$1role**. 

         Lorsque vous créez un nouveau rôle, les politiques appropriées pour exécuter l'action de la règle sont créées et associées au nouveau rôle. Si vous modifiez le objet de cette action de règle ou si vous utilisez ce rôle dans une autre action de règle, vous devez mettre à jour la politique de ce rôle afin d'autoriser le nouveau objet ou la nouvelle action. Pour mettre à jour un rôle existant, choisissez **Mettre à jour le rôle** dans cette section.

      1. Choisissez **Create Role** pour créer le rôle et fermer la boîte de dialogue. 

   1. Choisissez **Ajouter une action** pour ajouter l'action à la règle et revenez à la page **Créer une règle**. 

1. L'action **Republier un message dans un AWS IoT sujet** est désormais répertoriée dans **Définir une ou plusieurs actions**.

   Dans la vignette de la nouvelle action, sous **Republier un message dans un AWS IoT objet**, vous pouvez voir le objet dans lequel votre action de republication sera publiée.

   Il s'agit de la seule action de règle que vous ajouterez à cette règle.

1. Dans **Créer une règle**, faites défiler l'écran vers le bas et choisissez **Créer une règle** pour créer la règle et terminer cette étape.

## Étape 2 : Test de votre règle
<a name="iot-repub-rule-test"></a>

Pour tester votre nouvelle règle, vous allez utiliser le client MQTT pour publier et vous abonner aux messages MQTT utilisés par cette règle.

Ouvrez le [client MQTT dans la AWS IoT console](https://console.aws.amazon.com//iot/home#/test) dans une nouvelle fenêtre. Cela vous permettra de modifier la règle sans perdre la configuration de votre client MQTT. Le client MQTT ne conserve aucun abonnement ou journal de messages si vous le quittez pour accéder à une autre page de la console.

**Vous pouvez utiliser le client MQTT pour tester votre règle.**

1. Dans le [client MQTT de la AWS IoT console](https://console.aws.amazon.com//iot/home#/test), abonnez-vous aux rubriques d'entrée, dans ce cas, `device/+/data`.

   1. Dans le client MQTT, sous Souscriptions, choisissez Publish to topic.

   1. Dans **Sujet d'abonnement**, entrez le objet du filtre de objet d'entrée,**device/\$1/data**.

   1. Conservez les valeurs par défaut des autres paramètres.

   1. Choisissez **Subscribe to topic (S'abonner à la rubrique)**.

      Dans la colonne **Abonnements**, la section **Publier dans un objet** **device/\$1/data** apparaît. 

1. Abonnez-vous à l’objet que votre règle publiera :`device/data/temp`.

   1. Sous **Abonnements**, choisissez **S’abonner à un objet** nouveau, puis dans **Sujet d'abonnement**, entrez l’objet du message republié,**device/data/temp**.

   1. Conservez les paramètres par défaut du reste des champs

   1. Choisissez **Subscribe to topic (S'abonner à la rubrique)**.

      Dans la colonne **Abonnements**, la section **appareil/\$1/data**, **device/data/temp** apparaît. 

1. Publiez un message sur le objet d'entrée avec un identifiant d'appareil spécifique, **device/22/data**. Vous ne pouvez pas publier au format MQTT des objets contenant des caractères génériques.

   1. Dans le client MQTT, sous **Souscriptions**, choisissez **Publier dans la rubrique**.

   1. Dans le champ **Publier**, entrez le nom de l'objet d'entrée, **device/22/data**.

   1. Copiez les exemples de données présentés ici et, dans la zone d'édition située sous le nom de l'objet, collez les exemples de données.

      ```
      {
        "temperature": 28,
        "humidity": 80,
        "barometer": 1013,
        "wind": {
          "velocity": 22,
          "bearing": 255
        }
      }
      ```

   1. Pour envoyer votre message MQTT, choisissez **Publier dans le objet**.

1. Passez en revue les messages qui ont été envoyés.

   1. Dans le client MQTT, sous **Abonnements**, il y a un point vert à côté des deux objets auxquels vous vous êtes abonné précédemment.

      Les points verts indiquent qu'un ou plusieurs nouveaux messages ont été reçus depuis la dernière fois que vous les avez consultés.

   1. Sous **Abonnements**, choisissez **device/\$1/data** pour vérifier que la charge utile du message correspond à ce que vous venez de publier et ressemble à ceci :

      ```
      {
        "temperature": 28,
        "humidity": 80,
        "barometer": 1013,
        "wind": {
          "velocity": 22,
          "bearing": 255
        }
      }
      ```

   1. Sous **Abonnements**, choisissez **device/data/temp**de vérifier que la charge utile de vos messages republiés ressemble à ceci :

      ```
      {
        "device_id": "22",  
        "temperature": 28
      }
      ```

      Notez que la `device_id` valeur est une chaîne entre guillemets et que la `temperature` valeur est numérique. Cela est dû au fait que la [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic) fonction a extrait la chaîne du nom de l'objet du message d'entrée tandis que la `temperature` valeur utilise la valeur numérique de la charge utile du message d'entrée.

      Si vous souhaitez transformer la `device_id` valeur en valeur numérique, remplacez-la `topic(2)` dans l'déclararionde requête de règle par :

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Notez que la conversion de la `topic(2)` valeur en valeur numérique ne fonctionnera que si cette partie de la rubrique contient uniquement des caractères numériques.

1. Si vous constatez que le message correct a été publié dans le **device/data/temp**sujet, cela signifie que votre règle a fonctionné. Découvrez les informations supplémentaires que vous pouvez obtenir sur l'action Republier la règle dans la section suivante.

   Si vous ne voyez pas que le message correct a été publié sur l'**appareil/\$1/data** ou **device/data/temp**sur les rubriques, consultez les conseils de dépannage.

### Résolution des problèmes liés à la règle de republication des messages
<a name="iot-repub-rule-trouble"></a>

Voici quelques points à vérifier au cas où vous n'obtiendriez pas les résultats escomptés.
+ 

**Vous avez reçu une bannière d'erreur**  
Si une erreur est apparue lorsque vous avez publié le message d'entrée, corrigez-la d'abord. Les étapes suivantes peuvent vous aider à corriger cette erreur.
+ 

**Vous ne voyez pas le message d'entrée dans le client MQTT**  
Chaque fois que vous publiez votre message d'entrée dans le `device/22/data` objet, ce message doit apparaître dans le client MQTT si vous vous êtes abonné au filtre de `device/+/data` objet comme décrit dans la procédure.

**À savoir**
  + 

**Vérifiez le filtre de objets auquel vous vous êtes abonné**  
Si vous vous êtes abonné au objet du message d'entrée comme décrit dans la procédure, vous devriez voir une copie du message d'entrée chaque fois que vous le publiez.

    Si le message ne s'affiche pas, vérifiez le nom de l'objet auquel vous vous êtes abonné et comparez-le au objet dans lequel vous avez publié. Les noms des objets distinguent les majuscules et minuscules et le objet auquel vous vous êtes abonné doit être identique au objet dans lequel vous avez publié la charge utile du message.
  + 

**Vérifiez la fonction de publication des messages**  
Dans le client MQTT, sous **Abonnements**, choisissez **device/\$1/data**, vérifiez l’objet du message de publication, puis choisissez **Publier dans le objet.** La charge utile du message figurant dans la zone d'édition située sous le objet devrait apparaître dans la liste des messages. 
+ 

**Vous ne voyez pas votre message republié dans le client MQTT**  
Pour que votre règle fonctionne, elle doit disposer de la politique appropriée qui l'autorise à recevoir et à republier un message et elle doit recevoir le message.

**À savoir**
  + 

**Vérifiez le nom Région AWS de votre client MQTT et la règle que vous avez créée**  
La console dans laquelle vous exécutez le client MQTT doit se trouver dans la même AWS région que la règle que vous avez créée. 
  + 

**Vérifiez le objet du message d'entrée dans la déclaration de requête de règle**  
Pour que la règle fonctionne, elle doit recevoir un message dont le nom de rubrique correspond au filtre de rubrique figurant dans la clause FROM de l'déclararionde requête de règle.

    Vérifiez l'orthographe du filtre de rubrique dans l'déclararionde requête de règle avec celle de l'objet dans le client MQTT. Les noms de objets distinguent les majuscules et minuscules et le objet du message doit correspondre au filtre de objet indiqué dans l'déclararionde requête de règle.
  + 

**Vérifiez le contenu de la charge utile des messages d'entrée**  
Pour que la règle fonctionne, elle doit trouver le champ de données dans la charge utile du message déclarée dans l'déclararionSELECT.

    Vérifiez l'orthographe du `temperature` champ dans l'déclararionde requête de règle avec celle de la charge utile du message dans le client MQTT. Les noms de champs distinguent les majuscules et minuscules et le `temperature` champ de l'déclararionde requête de règle doit être identique au `temperature` champ de la charge du message.

    Assurez-vous que le document JSON contenu dans la charge utile du message est correctement formaté. Si le JSON contient des erreurs, telles qu'une virgule manquante, la règle ne pourra pas le lire. 
  + 

**Vérifiez le objet du message republié dans l'action de la règle**  
Le objet auquel l'action Republier la règle publie le nouveau message doit correspondre au objet auquel vous vous êtes abonné dans le client MQTT.

    Ouvrez la règle que vous avez créée dans la console et vérifiez le objet dans lequel l'action de règle republiera le message.
  + 

**Vérifiez le rôle utilisé par la règle**  
L'action de règle doit être autorisée à recevoir le objet d'origine et à publier le nouveau objet. 

    Les politiques qui autorisent la règle à recevoir les données des messages et à les republier sont spécifiques aux objets utilisés. Si vous modifiez le objet utilisé pour republier les données du message, vous devez mettre à jour le rôle de l'action de règle afin de mettre à jour sa politique afin qu'elle corresponde au objet actuel.

    Si vous pensez que c'est le problème, modifiez l'action Republier la règle et créez un nouveau rôle. Les nouveaux rôles créés par l'action de règle reçoivent les autorisations nécessaires pour effectuer ces actions.

## Étape 3 : examen des résultats et des étapes suivantes
<a name="iot-repub-rule-review"></a>

**Dans ce tutoriel**
+ Vous avez utilisé une simple requête SQL et quelques fonctions dans une instruction de requête de règle pour produire un nouveau message MQTT.
+ Vous avez créé une règle qui republie ce nouveau message.
+ Vous avez utilisé le client MQTT pour tester votre AWS IoT règle.

**Étapes suivantes**  
Après avoir republié quelques messages avec cette règle, essayez de l'utiliser pour voir comment la modification de certains aspects du didacticiel affecte le message republié. Voici quelques idées pour vous aider à démarrer.
+ Modifiez le *device\$1id* sujet du message d'entrée et observez l'effet sur la charge utile du message republié.
+ Modifiez les champs sélectionnés dans l'déclararionde requête de règle et observez l'effet sur la charge utile des messages republiés.
+ Essayez le prochain didacticiel de cette série et découvrez comment [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md).

L'action Republier la règle utilisée dans ce didacticiel peut également vous aider à déboguer les instructions de requête relatives aux règles. Par exemple, vous pouvez ajouter cette action à une règle pour voir comment son déclararionde requête de règle met en forme les données utilisées par ses actions de règle.