Étape 3 : Démontrer que vous vous abonnez à des messages avec leAWS IoTAppareil client - 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.

Étape 3 : Démontrer que vous vous abonnez à des messages avec leAWS IoTAppareil client

Dans cette section, vous allez montrer deux types d'abonnements aux messages :

  • Abonnement à un sujet

  • Abonnement à un sujet Wild-Card

Ces énoncés de stratégie de la stratégie créée pour ces exercices donnent au Raspberry Pi l'autorisation d'effectuer ces actions :

  • iot:Receive

    Donne leAWS IoTAutorisation Device Client pour recevoir des rubriques MQTT qui correspondent à celles nommées dans leResourceobjet.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
  • iot:Subscribe

    Donne leAWS IoTAutorisation Device Client pour s'abonner aux filtres de rubriques MQTT qui correspondent à ceux nommés dans leResourceobjet.

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }

Abonnez-vous à un seul sujet de message MQTT

Cette procédure explique commentAWS IoTDevice Client peut s'abonner aux messages MQTT et les enregistrer.

Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, indiquez le contenu de~/dc-configs/dc-pubsub-custom-config.jsonou ouvrez le fichier dans un éditeur de texte pour consulter son contenu. Recherchez le pluginsamplesqui devrait ressembler à ce qui suit.

"samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/subtopic", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

Remarquez lesubscribe-topicest la rubrique MQTT dans laquelle laAWS IoTDevice Client s'abonnera lorsqu'il est exécuté. LeAWS IoTDevice Client écrit les charges utiles des messages qu'il reçoit de cet abonnement dans le fichier nommé dans lesubscribe-fileValeur .

Pour vous abonner à un sujet de message MQTT à partir duAWS IoTAppareil client
  1. Assurez-vous que la fenêtre du terminal et la fenêtre avec le client de test MQTT sont visibles pendant que vous effectuez cette procédure. Assurez-vous également que votreClient MQTTest toujours abonné au#Filtre de rubriques. Si ce n'est pas le cas, abonnez-vous au#filtre de sujet à nouveau.

  2. Dans la fenêtre du terminal, entrez ces commandes pour exécuter leAWS IoTDevice Client utilisant le fichier de configuration créé dansCréer le fichier de configuration.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json

    Dans la fenêtre de terminal, leAWS IoTDevice Client affiche les messages d'information et les erreurs éventuelles qui se produisent lors de son exécution.

    Si aucune erreur n'est affichée dans la fenêtre du terminal, continuez dans leAWS IoTconsole

  3. DansAWS IoT, dans la consoleClient MQTT, choisissez lePublier dans une rubriqueonglet.

  4. DansNom de la rubrique, saisisseztest/dc/subtopic

  5. DansCharge utile des messages, passez en revue le contenu du message.

  6. ChoisissezPublierpour publier le message MQTT.

  7. Dans la fenêtre du terminal, surveillez lamessage reçuentrée de l'outilAWS IoTDevice Client qui se présente sous la forme suivante.

    2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
  8. Après avoir vu lemessage reçuentrée indiquant que le message a été reçu, entrez^C(Ctrl+C) afin d'arrêter leAWS IoTClient de l'appareil.

  9. Saisissez cette commande pour afficher la fin du fichier journal des messages et voir le message que vous avez publié à partir duClient MQTT.

    tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log

En affichant le message dans le fichier journal, vous avez démontré que leAWS IoTDevice Client a reçu le message que vous avez publié depuis le client de test MQTT.

S'abonner à plusieurs rubriques de messages MQTT à l'aide de caractères génériques

Ces procédures démontrent comment leAWS IoTDevice Client peut s'abonner aux messages MQTT et les enregistrer à l'aide de caractères génériques. Pour ce faire, vous allez :

  1. Mettez à jour le filtre de rubriques que leAWS IoTDevice Client utilise pour s'abonner aux rubriques MQTT.

  2. Mettez à jour la stratégie utilisée par l'appareil pour autoriser les nouveaux abonnements.

  3. Exécutez leAWS IoTDevice Client et publiez des messages depuis la console de test MQTT.

Pour créer un fichier de configuration pour s'abonner à plusieurs rubriques de message MQTT à l'aide d'un filtre de rubriques MQTT générique
  1. Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, ouvrez~/dc-configs/dc-pubsub-custom-config.jsonpour éditer et localiser lesamplesobjet.

  2. Dans l'éditeur de texte, localisez lesampleset mettez à jour lesubscribe-topicse présente ainsi.

    "samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/#", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

    La nouvellesubscribe-topicvaleur est uneFiltre de rubriques MQTTavec un caractère joker MQTT à la fin. Ceci décrit un abonnement à toutes les rubriques MQTT qui commencent partest/dc/. LeAWS IoTDevice Client écrit les charges utiles des messages qu'il reçoit de cet abonnement dans le fichier nommé danssubscribe-file.

  3. Enregistrez le fichier de configuration modifié sous~/dc-configs/dc-pubsub-wild-config.jsonet quittez l'éditeur.

Pour modifier la stratégie utilisée par votre Raspberry Pi afin de permettre l'abonnement et la réception de plusieurs rubriques de messages MQTT
  1. Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, dans votre éditeur de texte préféré, ouvrez~/policies/pubsub_test_thing_policy.jsonpour éditer, puis localiser leiot::Subscribeetiot::Receiveinstructions de stratégie dans le fichier.

  2. Dansiot::Subscribe, mettez à jour la chaîne de l'objet Resource pour la remplacersubtopicavec*afin que l'adresse se présente ainsi.

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*" ] }
    Note

    LeFiltre de thème MQTT caractères génériquessont les+(signe plus) et#(signe livre). Une demande d'abonnement avec un#à la fin, s'abonne à tous les sujets qui commencent par la chaîne qui précède le#caractère (par exemple,test/dc/dans ce cas).

    La valeur de la ressource dans l'énoncé de stratégie qui autorise cet abonnement doit toutefois utiliser un*(un astérisque) à la place du#(signe livre) dans le filtre de rubrique ARN. En effet, le processeur de stratégies utilise un caractère joker différent de celui utilisé par MQTT.

    Pour plus d'informations sur l'utilisation de caractères génériques pour les rubriques et les filtres de rubriques dans les stratégies, voirUtilisation de caractères génériques dans MQTT et les politiques AWS IoT Core.

  3. Dansiot::Receive, mettez à jour la chaîne de l'objet Resource pour la remplacersubtopicavec*afin que l'adresse se présente ainsi.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*" ] }
  4. Enregistrez le document de stratégie mis à jour sous~/policies/pubsub_wild_test_thing_policy.jsonet quittez l'éditeur.

  5. Entrez cette commande pour mettre à jour la stratégie de ce didacticiel afin d'utiliser les nouvelles définitions de ressources.

    aws iot create-policy-version \ --set-as-default \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"

    Si la commande réussit, elle renvoie une réponse telle que celle-ci. Remarquez quepolicyVersionIdest maintenant2, indiquant qu'il s'agit de la deuxième version de cette politique.

    Si vous avez mis à jour la stratégie avec succès, vous pouvez passer à la procédure suivante.

    { "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Publish\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Subscribe\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Receive\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n ]\n }\n ]\n}\n", "policyVersionId": "2", "isDefaultVersion": true }

    Si vous obtenez une erreur indiquant qu'il existe trop de versions de stratégie pour en enregistrer une nouvelle, entrez cette commande pour répertorier les versions actuelles de la stratégie. Consultez la liste renvoyée par cette commande pour trouver une version de stratégie que vous pouvez supprimer.

    aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"

    Entrez cette commande pour supprimer une version dont vous n'avez plus besoin. Notez que vous ne pouvez pas supprimer la version de la stratégie par défaut. La version de stratégie par défaut est celle avec unisDefaultVersionvaleur detrue.

    aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id policyId

    Après avoir supprimé une version de stratégie, réessayez cette étape.

Avec le fichier de configuration et la stratégie mis à jour, vous êtes prêt à démontrer les abonnements aux caractères génériques avec leAWS IoTClient de l'appareil.

Pour démontrer comment leAWS IoTDevice Client s'abonne à plusieurs rubriques de message MQTT et les reçoit
  1. DansClient MQTT, vérifiez les abonnements. Si l'icôneClient MQTTest abonné à la#Filtre de rubriques, passez à l'étape suivante. Dans le cas contraire, dans leClient MQTT, dansS'abonner à une rubrique, dansFiltre de rubriques, saisissez#(un signe de livre), puis choisissezS'abonnerpour y souscrire.

  2. Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, entrez ces commandes pour démarrer leAWS IoTClient de l'appareil.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
  3. En regardant leAWS IoTSortie Device Client dans la fenêtre du terminal sur l'ordinateur hôte local, revenez à laClient MQTT. DansPublier dans une rubrique, dansNom de la rubrique, saisisseztest/dc/subtopicChoisissezPublier.

  4. Dans la fenêtre du terminal, confirmez que le message a été reçu en recherchant un message tel que :

    2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
  5. En regardant leAWS IoTSortie Device Client dans la fenêtre du terminal de l'ordinateur hôte local, revenez à laTest client MQTT. DansPublier dans une rubrique, dansNom de la rubrique, saisisseztest/dc/subtopic2ChoisissezPublier.

  6. Dans la fenêtre du terminal, confirmez que le message a été reçu en recherchant un message tel que :

    2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
  7. Après avoir vu les messages confirmant que les deux messages ont été reçus, entrez^C(Ctrl+C) afin d'arrêter leAWS IoTClient de l'appareil.

  8. Saisissez cette commande pour afficher la fin du fichier journal des messages et voir le message que vous avez publié à partir duTest client MQTT.

    tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
    Note

    Le fichier journal contient uniquement des charges utiles de messages. Les rubriques de message ne sont pas enregistrées dans le fichier journal des messages reçus.

    Il se peut que vous voyiez également le message publié par leAWS IoTDevice Client dans le journal reçu. En effet, le filtre de rubrique générique inclut cette rubrique de message et, parfois, la demande d'abonnement peut être traitée par le courtier de messages avant que le message publié ne soit envoyé aux abonnés.

Les entrées du fichier journal montrent que les messages ont été reçus. Vous pouvez répéter cette procédure en utilisant d'autres noms de rubriques. Tous les messages dont le nom de sujet commence partest/dc/doivent être reçus et enregistrés. Les messages dont les noms de rubriques commencent par un autre texte sont ignorés.

Après avoir démontré comment leAWS IoTDevice Client peut publier et s'abonner aux messages MQTT, continuer àDidacticiel : Démontrez des actions à distance (tâches) avecAWS IoTPériphérique Périphérique.