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 le
Resource
objet.{ "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 le
Resource
objet.{ "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.json
ou ouvrez le fichier dans un éditeur de texte pour consulter son contenu. Recherchez le pluginsamples
qui 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-topic
est 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-file
Valeur .
Pour vous abonner à un sujet de message MQTT à partir duAWS IoTAppareil client
-
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.
-
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
-
DansAWS IoT, dans la consoleClient MQTT, choisissez lePublier dans une rubriqueonglet.
-
DansNom de la rubrique, saisissez
test/dc/subtopic
-
DansCharge utile des messages, passez en revue le contenu du message.
-
ChoisissezPublierpour publier le message MQTT.
-
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
-
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. -
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 :
-
Mettez à jour le filtre de rubriques que leAWS IoTDevice Client utilise pour s'abonner aux rubriques MQTT.
-
Mettez à jour la stratégie utilisée par l'appareil pour autoriser les nouveaux abonnements.
-
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
-
Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, ouvrez
~/dc-configs/dc-pubsub-custom-config.json
pour éditer et localiser lesamples
objet. -
Dans l'éditeur de texte, localisez le
samples
et mettez à jour lesubscribe-topic
se 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 nouvelle
subscribe-topic
valeur 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
. -
Enregistrez le fichier de configuration modifié sous
~/dc-configs/dc-pubsub-wild-config.json
et 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
-
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.json
pour éditer, puis localiser leiot::Subscribe
etiot::Receive
instructions de stratégie dans le fichier. -
Dans
iot::Subscribe
, mettez à jour la chaîne de l'objet Resource pour la remplacersubtopic
avec*
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 et MQTT AWS IoT Core politiques.
-
Dans
iot::Receive
, mettez à jour la chaîne de l'objet Resource pour la remplacersubtopic
avec*
afin que l'adresse se présente ainsi.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/
*
" ] } -
Enregistrez le document de stratégie mis à jour sous
~/policies/pubsub_wild_test_thing_policy.json
et quittez l'éditeur. -
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 que
policyVersionId
est 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 un
isDefaultVersion
valeur 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
-
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. -
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
-
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, saisissez
test/dc/subtopic
ChoisissezPublier. -
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
-
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, saisissez
test/dc/subtopic2
ChoisissezPublier. -
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
-
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. -
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 àTutoriel : Démontrez des actions à distance (tâches) à l'aide du AWS IoT Client de l'appareil.