Tutoriel : Republication d'un message MQTT - AWS IoT Core

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

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.

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

Passez en revue les sujets et AWS IoT les règles du MQTT

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 pour la communication de votre appareil.

Protocole MQTT

Le protocole MQTT utilise un modèle de communication de publication/abonnement 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 la règle

    Chaque action de règle d'une règle agit sur les données résultant de l'instruction de requête de la règle. AWS IoT prend en charge de nombreuses actions de règles. Dans ce didacticiel, vous allez toutefois vous concentrer sur l'action de la Republish 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

La AWS IoT règle que vous allez créer dans ce didacticiel s'abonne aux rubriques device/device_id/data MQTT où device_id est l'identifiant de l'appareil qui a envoyé le message. Ces rubriques sont décrites par un filtre de rubrique 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.

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

  3. 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_temp.

      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.

    2. 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.

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

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

    2. 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.

  5. 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.

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

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

  6. 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.

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

    3. 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.

      2. Saisissez un nom qui décrit le nouveau rôle. Dans le cadre de ce tutoriel, utilisez republish_role.

        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.

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

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

  7. 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.

  8. 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

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 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, abonnez-vous aux rubriques d'entrée, dans ce cas, device/+/data.

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

    2. Dans Sujet d'abonnement, entrez le objet du filtre de objet d'entrée,device/+/data.

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

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

      Dans la colonne Abonnements, la section Publier dans un objet device/+/data apparaît.

  2. 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.

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

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

      Dans la colonne Abonnements, la section appareil/+/data, device/data/temp apparaît.

  3. 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.

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

    3. 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 } }
    4. Pour envoyer votre message MQTT, choisissez Publier dans le objet.

  4. 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.

    2. Sous Abonnements, choisissez device/+/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 } }
    3. Sous Abonnements, choisissez device/data/temp pour vérifier que la charge utile de votre message republié 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 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.

  5. Si vous constatez que le message correct a été publié dans la rubrique device/data/temp, 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é dans les rubriques device/+/data ou device/data/temp, consultez les conseils de dépannage.

Résolution des problèmes liés à la règle de republication des messages

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/+/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

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_id dans l’objet du message d'entrée et observez l'effet sur la charge 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.

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.