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.
Dans ce tutoriel, vous allez :
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/
MQTT rubriques où device_id
/datadevice_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
-
Dans Règles, choisissez Créer et commencez à créer votre nouvelle règle.
-
Dans la partie supérieure de Créer une règle :
-
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.
-
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.
-
-
Dans l'déclararionde requête règle de Create a rule :
-
Dans Utiliser SQL la version, sélectionnez
2016-03-23
. -
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 autemperature
champ.
-
-
-
Dans Définir une ou plusieurs actions :
-
Pour ouvrir la liste des actions de règle pour cette règle, choisissez Ajouter une action.
-
Dans Sélectionner une action, choisissez Republier un message dans un AWS IoT sujet.
-
Au bas de la liste d'actions, choisissez Configurer l'action pour ouvrir la page de configuration de l'action sélectionnée.
-
-
Sous Configurer les actions :
-
Dans Sujet, entrez
device/data/temp
. C'est le MQTT sujet du message que cette règle publiera. -
Dans Qualité de service, choisissez 0 - Le message est délivré zéro fois ou plus.
-
Dans Choisir ou créer un rôle pour accorder AWS IoT l'accès pour effectuer cette action :
-
Choisissez Create Role (Créer le rôle). La boîte de dialogue Créer un rôle s'ouvre.
-
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.
-
Choisissez Create Role pour créer le rôle et fermer la boîte de dialogue.
-
-
Choisissez Ajouter une action pour ajouter l'action à la règle et revenez à la page Créer une règle.
-
-
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.
-
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
Pour utiliser le MQTT client pour tester votre règle
-
Dans le MQTTclient de la AWS IoT console
, abonnez-vous aux sujets d'entrée, dans ce cas, device/+/data
.-
Dans le MQTT client, sous Abonnements, choisissez S'abonner à un sujet.
-
Dans Sujet d'abonnement, entrez le objet du filtre de objet d'entrée,
device/+/data
. -
Conservez les valeurs par défaut des autres paramètres.
-
Choisissez Subscribe to topic (S'abonner à la rubrique).
Dans la colonne Abonnements, la section Publier dans un objet
device/+/data
apparaît.
-
-
Abonnez-vous à l’objet que votre règle publiera :
device/data/temp
.-
Sous Abonnements, choisissez S’abonner à un objet nouveau, puis dans Sujet d'abonnement, entrez l’objet du message republié,
device/data/temp
. -
Conservez les paramètres par défaut du reste des champs
-
Choisissez Subscribe to topic (S'abonner à la rubrique).
Dans la colonne Abonnements, la section appareil/+/data,
device/data/temp
apparaît.
-
-
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.-
Dans le MQTT client, sous Abonnements, choisissez Publier dans le sujet.
-
Dans le champ Publier, entrez le nom de l'objet d'entrée,
device/22/data
. -
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 } }
-
Pour envoyer votre MQTT message, choisissez Publier dans le sujet.
-
-
Passez en revue les messages qui ont été envoyés.
-
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.
-
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 } }
-
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 latemperature
valeur est numérique. Cela est dû au fait que latopic()
fonction a extrait la chaîne du nom de l'objet du message d'entrée tandis que latemperature
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-latopic(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.
-
-
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 dedevice/+/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 letemperature
champ de l'déclararionde requête de règle doit être identique autemperature
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.