Tutoriel : envoi d'une notification Amazon SNS - 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 : envoi d'une notification Amazon SNS

Ce didacticiel explique comment créer une AWS IoT règle qui envoie des données de message MQTT à une rubrique Amazon SNS afin qu'elles puissent être envoyées sous forme de SMS.

Dans ce didacticiel, vous allez créer une règle qui envoie des données de message depuis un capteur météo à tous les abonnés d'une rubrique Amazon SNS, chaque fois que la température dépasse la valeur définie dans la règle. La règle détecte lorsque la température signalée dépasse la valeur définie par la règle, puis crée une nouvelle charge utile de message qui inclut uniquement l'identifiant de l'appareil, la température signalée et la limite de température dépassée. La règle envoie la charge du nouveau message sous forme de document JSON à une rubrique SNS, qui avertit tous les abonnés à la rubrique SNS.

Ce que vous allez apprendre dans ce didacticiel :
  • Comment créer et tester une notification Amazon SNS

  • Comment appeler une notification Amazon SNS à partir d'une règle AWS IoT

  • 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 :

Étape 1 : Créer une rubrique Amazon SNS qui envoie un SMS

Créer une rubrique Amazon SNS qui envoie un SMS
  1. Créer une rubrique Amazon SNS.

    1. Connectez-vous à la console Amazon SNS.

    2. Dans le panneau de navigation de gauche, choisissez Rubriques.

    3. Sur la page Rubriques, choisissez Créer une rubrique.

    4. Dans Détails, choisissez le type Standard. Par défaut, la console crée une rubrique FIFO.

    5. Dans Nom, entrez le nom de la rubrique SNS. Dans le cadre de ce didacticiel, entrez high_temp_notice.

    6. Faites défiler la page jusqu'en bas et choisissez Créer une rubrique.

      La console ouvre la page Détails de la nouvelle rubrique.

  2. Créez un abonnement Amazon SNS.

    Note

    Le numéro de téléphone que vous utilisez dans cet abonnement peut entraîner des frais de messagerie texte en raison des messages que vous allez envoyer dans ce didacticiel.

    1. Sur la page des détails de la rubrique high_temp_notice, sélectionnez Créer un abonnement.

    2. Dans Créer un abonnement, dans la section Détails, dans la liste des protocoles, choisissez SMS.

    3. Dans Endpoint, entrez le numéro d'un téléphone pouvant recevoir des SMS. Assurez-vous de le saisir de telle sorte qu'il commence par un +, qu'il inclue le code du pays et de la région, et qu'il n'inclue aucun autre caractère de ponctuation.

    4. Choisissez Créer un abonnement.

  3. Testez la notification Amazon SNS.

    1. Dans la console Amazon SNS, dans le volet de navigation de gauche, choisissez Rubrique.

    2. Pour ouvrir la page de détails de l'objet, dans Rubriques, dans la liste des objets, choisissez high_temp_notice.

    3. Pour ouvrir la page Publier le message dans le objet, sur la page de détails de high_temp_notice, choisissez Publier le message.

    4. Dans Publier le message dans le objet, dans la section Corps du message, dans le corps du message à envoyer au point de terminaison, entrez un message court.

    5. Faites défiler la page vers le bas et choisissez Publier des message.

    6. Sur le téléphone avec le numéro que vous avez utilisé précédemment lors de la création de l'abonnement, confirmez que le message a bien été reçu.

    Si vous n'avez pas reçu le message de test, vérifiez le numéro de téléphone et les paramètres de votre téléphone.

    Assurez-vous de pouvoir publier des messages de test depuis la console Amazon SNS avant de poursuivre le didacticiel.

Étape 2 : créer une AWS IoT règle pour envoyer le message texte

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 figure l'identifiant de l'appareil qui a envoyé le message. Ces rubriques sont décrites dans un filtre de rubrique sous device/+/data, où la + est un caractère générique qui correspond à n'importe quelle chaîne de caractères comprise entre les deux barres obliques. Cette règle teste également la valeur du temperature champ dans la charge utile du message.

Lorsque la règle reçoit un message d'une rubrique correspondante, device_id elle prend du nom de l'objet, la temperature valeur de la charge utile du message, ajoute une valeur constante pour la limite qu'elle teste, puis envoie ces valeurs sous forme de document JSON à une rubrique de notification Amazon SNS.

Par exemple, un message MQTT provenant du capteur météo numéro 32 utilise le device/32/data objet et contient une charge utile du message qui ressemble à ceci :

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

L'énoncé de la règle de la requête prend la temperature valeur de la charge de message, celle device_id du nom de l'objet, et ajoute la max_temperature valeur constante pour envoyer une charge utile de message qui ressemble à ceci à la rubrique Amazon SNS :

{ "device_id": "32", "reported_temperature": 38, "max_temperature": 30 }
Pour créer une AWS IoT règle afin de détecter une valeur de température supérieure à la limite et de créer les données à envoyer à la rubrique Amazon SNS
  1. Ouvrez le hub de règles de la AWS IoT console.

  2. S'il s'agit de votre première règle, choisissez Créer ou Créer une règle.

  3. Dans Créer a règle: :

    1. Pour Name (Nom), entrez temp_limit_notify.

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

    2. Dans Description, décrivez la règle.

      Une description significative permet de se souvenir plus facilement 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 is a version SQL, sélectionnez 2016-03-23.

    2. Dans la boîte d'édition Rôle d’instruction de requête entrez l'instruction :

      SELECT topic(2) as device_id, temperature as reported_temperature, 30 as max_temperature FROM 'device/+/data' WHERE temperature > 30

      Cette instruction :

      • Écoute les messages MQTT dont le objet correspond au filtre de device/+/data objet et dont la temperature valeur est supérieure à 30.

      • 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 reported_temperature champ.

      • Crée une valeur constante 30 pour représenter la valeur limite et l'affecte au max_temperature champ.

  5. Pour ouvrir la liste des actions de règle pour cette règle, dans Définir une ou plusieurs actions, choisissez Ajouter une action.

  6. Dans Sélectionner une action, choisissez Envoyer un message en tant que notification push SNS.

  7. Pour ouvrir la page de configuration de l'action sélectionnée, en bas de la liste d'actions, choisissez Configurer l'action.

  8. Sous Configurer les actions :

    1. Dans SNS target, choisissez Select, recherchez votre rubrique SNS nommée high_temp_notice, puis sélectionnez Select.

    2. Pour Format du message, choisissez RAW.

    3. Dans Choisir ou créer un rôle pour accorder AWS IoT l'accès pour effectuer cette action, choisissez Créer un rôle.

    4. Dans Créer un nouveau rôle, dans Nom, entrez un nom unique pour le nouveau rôle. Dans le cadre de ce tutoriel, utilisez sns_rule_role.

    5. Sélectionnez Créer un rôle.

    Si vous répétez ce didacticiel ou si vous réutilisez un rôle existant, choisissez Mettre à jour le rôle avant de continuer. Cela met à jour le document de politique du rôle pour qu'il fonctionne avec la cible SNS.

  9. Choisissez Ajouter une action et revenez à la page Créer une règle.

    Dans la vignette de la nouvelle action, sous Envoyer un message sous forme de notification push SNS, vous pouvez voir la rubrique SNS que votre règle appellera.

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

  10. Pour créer la règle et terminer cette étape, dans Créer une règle, faites défiler la page vers le bas et choisissez Créer une règle.

Étape 3 : tester la AWS IoT règle et la notification Amazon SNS

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. Si vous quittez le client MQTT pour accéder à une autre page de la console, il ne conservera aucun abonnement ni journal de messages.

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. Publiez un message sur le objet d'entrée avec un identifiant d'appareil spécifique, device/32/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/32/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": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Choisissez Publier dans la rubrique pour publier votre message.

  3. Confirmez que le message texte a été envoyé.

    1. Dans le client MQTT, sous Abonnements, il y a un point vert à côté de l'objet auquel vous vous êtes abonné plus tôt.

      Le point vert indique 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": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Vérifiez le téléphone que vous avez utilisé pour vous abonner à la rubrique SNS et vérifiez que le contenu de la charge utile du message ressemble à ceci :

      {"device_id":"32","reported_temperature":38,"max_temperature":30}

      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éclara l’instruction requête de règle par :

      cast(topic(2) AS DECIMAL)

      Notez que la conversion de la topic(2) valeur numérique, DECIMAL ne fonctionnera que si cette partie de l'objet contient uniquement des caractères numériques.

  4. Essayez d'envoyer un message MQTT dans lequel la température ne dépasse pas la limite.

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

    Vous devriez voir le message que vous avez envoyé dans l'device/+/dataabonnement. Toutefois, étant donné que la valeur de température est inférieure à la température maximale indiquée dans l'déclararionde requête de règle, vous ne devriez pas recevoir de message texte.

    Si vous ne voyez pas le comportement correct, consultez les conseils de dépannage.

Résolution des problèmes liés à votre règle de message SNS

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

  • Si vous ne recevez pas le message :

    Pour que votre règle fonctionne, elle doit disposer de la politique appropriée l'autorisant à recevoir un message et à envoyer une notification SNS, 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 que la valeur de température dans la charge utile du message dépasse le seuil de test

      Si la valeur de température est inférieure ou égale à 30, telle que définie dans l'déclararionde requête de règle, la règle n'exécutera aucune de ses actions.

    • 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 4 : examen des résultats et des étapes suivantes

Dans ce tutoriel :
  • Vous avez créé et testé une rubrique de notification Amazon SNS ainsi qu'un abonnement.

  • Vous avez utilisé une requête SQL simple et des fonctions dans une déclararionde requête de règle pour créer un nouveau message pour votre notification.

  • Vous avez créé une AWS IoT règle pour envoyer une notification Amazon SNS utilisant la charge utile de vos messages personnalisés.

  • Vous avez utilisé le client MQTT pour tester votre AWS IoT règle.

Étapes suivantes

Après avoir envoyé quelques SMS avec cette règle, essayez de l'utiliser pour voir comment la modification de certains aspects du didacticiel affecte le message et le moment où il est envoyé. Voici quelques idées pour vous aider à démarrer.

  • Modifiez le device_id dans le objet du message d'entrée et observez l'effet dans le contenu du message texte.

  • Modifiez les champs sélectionnés dans l'déclararionde requête de règle et observez l'effet dans le contenu du message texte.

  • Modifiez le test dans l'déclararionde requête de règle pour tester une température minimale au lieu d'une température maximale. N'oubliez pas de changer le nom de max_temperature !

  • Ajoutez une action de règle de republication pour envoyer un message MQTT lorsqu'une notification SNS est envoyée.

  • Essayez le prochain didacticiel de cette série et découvrez comment Tutoriel : Stockage des données de l'appareil dans une table DynamoDB .