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 MQTT message lorsqu'un MQTT message spécifique 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 sujet de MQTT message.

Ce que vous allez apprendre dans ce didacticiel:
  • Comment utiliser des SQL requêtes et des fonctions simples dans une instruction de requête de règle

  • Comment utiliser le MQTT client pour tester une AWS IoT règle

Ce didacticiel vous prendra environ 30 minutes.

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

    Vous aurez besoin de votre AWS IoT console Compte AWS et de votre console pour terminer ce didacticiel.

  • Révisé Afficher MQTT les messages avec le AWS IoT MQTT client

    Assurez-vous que vous pouvez utiliser le MQTT client pour vous abonner à un sujet et le publier. Vous allez utiliser le MQTT client pour tester votre nouvelle règle dans le cadre de cette procédure.

Réviser MQTT les sujets et AWS IoT les règles

Avant de parler de AWS IoT règles, il est utile de comprendre le MQTT protocole. Dans les solutions IoT, le MQTT protocole offre certains avantages par rapport aux autres protocoles de communication réseauHTTP, ce qui en fait notamment un choix populaire pour les appareils IoT. Cette section passe en revue les principaux aspects de ce didacticiel MQTT tels qu'ils s'appliquent à ce didacticiel. Pour plus d'informations sur le MQTT mode de comparaison avecHTTP, voirChoix d'un protocole d'application pour la communication de votre appareil.

MQTTprotocole

Le MQTT protocole 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 MQTT les messages 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 MQTT message, ces éléments agissent sur le message comme suit.

  • Déclaration de requête de règle

    L'instruction de requête de la règle décrit les MQTT sujets à utiliser, interprète les données issues de la charge utile du message et met en forme les données conformément à une SQL instruction similaire aux instructions utilisées par les bases de données courantesSQL. 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'instruction de requête sous forme de MQTT message avec un sujet 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'applique aux device/device_id/data MQTT rubriques 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 sujet correspondant, elle republie les temperature valeurs device_id et sous forme de nouveau MQTT message avec le device/data/temp sujet.

Par exemple, la charge utile d'un MQTT message contenant le device/22/data sujet 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 du sujet, et les republie sous forme de MQTT message avec le device/data/temp sujet et une charge utile du message qui ressemble à 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 SQL la version, sélectionnez2016-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 MQTT messages dont le sujet correspond au filtre de device/+/data sujet.

      • 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. C'est le MQTT sujet 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 le 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 MQTT client pour publier les MQTT messages utilisés par cette règle et vous y abonner.

Ouvrez le MQTTclient dans la AWS IoT console dans une nouvelle fenêtre. Cela vous permettra de modifier la règle sans perdre la configuration de votre MQTT client. Le MQTT client ne conserve aucun abonnement ou journal des messages si vous le quittez pour accéder à une autre page de la console.

Pour utiliser le MQTT client pour tester votre règle
  1. Dans le MQTTclient de la AWS IoT console, abonnez-vous aux sujets d'entrée, dans ce cas,device/+/data.

    1. Dans le MQTT client, sous Abonnements, choisissez S'abonner à un sujet.

    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 dans MQTT des rubriques contenant des caractères génériques.

    1. Dans le MQTT client, sous Abonnements, choisissez Publier dans le sujet.

    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 MQTT message, choisissez Publier dans le sujet.

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

    1. Dans le MQTT client, sous Abonnements, il y a un point vert à côté des deux sujets 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 MQTT client

    Chaque fois que vous publiez votre message d'entrée dans le device/22/data sujet, ce message doit apparaître dans le MQTT client si vous vous êtes abonné au filtre de device/+/data sujet 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 MQTT client, sous Abonnements, choisissez device/+/data, vérifiez le sujet du message de publication, puis choisissez Publier dans le sujet. 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 Région AWS nom de votre MQTT client et la règle que vous avez créée

      La console dans laquelle vous exécutez le MQTT client 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 FROM clause de l'instruction de requête de règle.

      Vérifiez l'orthographe du filtre de rubrique dans l'instruction de requête de règle avec celle du sujet dans le MQTT client. 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'SELECTinstruction.

      Vérifiez l'orthographe du temperature champ dans l'instruction de requête de règle avec celle de la charge utile du message dans le MQTT client. 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 JSON document contenu dans la charge utile du message est correctement formaté. S'il 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 sujet auquel l'action Republier la règle publie le nouveau message doit correspondre au sujet auquel vous vous êtes abonné dans le MQTT client.

      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 SQL requête simple et quelques fonctions dans une instruction de requête de règle pour générer un nouveau MQTT message.

  • Vous avez créé une règle qui republie ce nouveau message.

  • Vous avez utilisé le MQTT client 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.

  • Changez le device_id dans le 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 SNS notification Amazon.

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.