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.
Démontrer l'abonnement aux messages avec le AWS IoT Device Client
Dans cette section, vous allez présenter deux types d'abonnements aux messages :
-
Abonnement thématique unique
-
Abonnement à un sujet générique
Ces déclarations de politique dans la politique créée pour ces exercices autorisent le Raspberry Pi à effectuer ces actions :
-
iot:Receive
Permet au AWS IoT Device Client de recevoir des MQTT sujets correspondant à ceux nommés dans l'
Resource
objet.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
-
iot:Subscribe
Permet au AWS IoT Device Client de s'abonner à des filtres de MQTT rubrique correspondant à ceux nommés dans l'
Resource
objet.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }
S'abonner à un seul sujet de MQTT message
Cette procédure montre comment le client du AWS IoT périphérique peut s'abonner aux MQTT messages et les enregistrer.
Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, listez le contenu du fichier ~/dc-configs/dc-pubsub-custom-config.json
ou ouvrez-le dans un éditeur de texte pour en vérifier le contenu. Localisez l'objet samples
, qui devrait ressembler à ceci.
"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"
Notez que la subscribe-topic
valeur est le MQTT sujet auquel le client du AWS IoT périphérique s'abonnera lors de son exécution. Le client du AWS IoT périphérique écrit les charges utiles des messages qu'il reçoit dans le cadre de cet abonnement dans le fichier nommé dans la subscribe-file
valeur.
Pour s'abonner à un sujet de MQTT message depuis le AWS IoT Device Client
-
Assurez-vous que la fenêtre du terminal et celle du client de MQTT test sont visibles pendant que vous effectuez cette procédure. Assurez-vous également que votre client de MQTT test est toujours abonné au filtre # topic. Si ce n'est pas le cas, abonnez-vous à nouveau au filtre de rubrique #.
-
Dans la fenêtre du terminal, entrez ces commandes pour exécuter le client de AWS IoT périphérique à l'aide du fichier de configuration créé dansCréez 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 du terminal, le client du AWS IoT périphérique affiche les messages d'information et les éventuelles erreurs survenant lors de son exécution.
Si aucune erreur ne s'affiche dans la fenêtre du terminal, continuez dans la AWS IoT console.
-
Dans la AWS IoT console, dans le client de MQTT test, choisissez l'onglet Publier dans une rubrique.
-
Dans Topic name (Nom de la rubrique), saisissez
test/dc/subtopic
. -
Dans Charge utile du message , passez en revue le contenu du message.
-
Choisissez Publier pour publier le MQTT message.
-
Dans la fenêtre du terminal, recherchez le message reçu du client du AWS IoT périphérique qui ressemble à ceci.
2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
-
Après avoir vu le message reçu indiquant que le message a été reçu, entrez
^C
(Ctrl-C) pour arrêter le client du AWS IoT périphérique. -
Entrez cette commande pour afficher la fin du fichier journal des messages et voir le message que vous avez publié depuis le client de MQTT test.
tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
En visualisant le message dans le fichier journal, vous avez démontré que le client du AWS IoT périphérique a reçu le message que vous avez publié en provenance du client de MQTT test.
S'abonner à plusieurs sujets de MQTT message à l'aide de caractères génériques
Ces procédures montrent comment le client du AWS IoT périphérique peut s'abonner à MQTT des messages et les enregistrer à l'aide de caractères génériques. Pour ce faire, vous allez :
-
Mettez à jour le filtre de rubrique utilisé par le AWS IoT Device Client pour s'abonner aux MQTT rubriques.
-
Mettez à jour la politique utilisée par l'appareil pour autoriser les nouveaux abonnements.
-
Exécutez le AWS IoT Device Client et publiez des messages depuis la console de MQTT test.
Pour créer un fichier de configuration permettant de s'abonner à plusieurs sujets de MQTT message à l'aide d'un filtre de MQTT sujet 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 le modifier et localisez l'objetsamples
. -
Dans l'éditeur de texte, localisez l'
samples
objet et mettez à jour la valeursubscribe-topic
pour qu'elle ressemble à ceci."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 un filtre de MQTT sujet avec MQTT un caractère générique à la fin. Ceci décrit un abonnement à toutes les MQTT rubriques commençant partest/dc/
. Le client du AWS IoT périphérique écrit les charges utiles des messages qu'il reçoit dans le cadre de cet abonnement dans le fichier indiqué danssubscribe-file
. -
Enregistrez le fichier de configuration modifié sous
~/dc-configs/dc-pubsub-wild-config.json
, et quittez l'éditeur.
Pour modifier la politique utilisée par votre Raspberry Pi afin d'autoriser l'abonnement et la réception de plusieurs sujets de MQTT message
-
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 modification, puis recherchez lesiot::Subscribe
et les déclarations de politiqueiot::Receive
dans le fichier. -
Dans la déclaration de politique
iot::Subscribe
, mettez à jour la chaîne de l'objet Resourcesubtopic
à remplacer par*
, afin qu'elle ressemble à ceci.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/
*
" ] }Note
Les caractères génériques du filtre MQTT thématique sont le
+
(signe plus) et le#
(signe dièse). Une demande d'abonnement avec un#
à la fin permet de souscrire à tous les rubriques commençant par la chaîne qui précède le caractère#
(par exemple,test/dc/
dans ce cas).La valeur de la ressource indiquée dans la déclaration de politique qui autorise cet abonnement doit toutefois utiliser un
*
(astérisque) à la place du#
(signe dièse) dans le filtre de rubrique. ARN Cela est dû au fait que le processeur de politiques utilise un caractère générique différent de celui MQTT utilisé.Pour plus d'informations sur l'utilisation de caractères génériques pour les rubriques et de filtres de rubriques dans les politiques, consultez Utilisation de caractères génériques dans les MQTT politiques AWS IoT Core.
-
Dans la déclaration de politique
iot::Receive
, mettez à jour la chaîne de l'objet Resourcesubtopic
à remplacer par*
, afin qu'elle ressemble à ceci.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/
*
" ] } -
Enregistrez le document de politique mis à jour et quittez l'éditeur
~/policies/pubsub_wild_test_thing_policy.json
. -
Entrez cette commande pour mettre à jour la politique 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 comme celle-ci. Notez que
policyVersionId
est maintenant2
, ce qui indique qu'il s'agit de la deuxième version de cette politique.Si vous avez correctement mis à jour la politique, 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 recevez un message d'erreur indiquant qu'il existe trop de versions de politique pour en enregistrer une nouvelle, entrez cette commande pour répertorier les versions actuelles de la politique. Consultez la liste renvoyée par cette commande pour rechercher une version de politique que vous pouvez supprimer.
aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
Saisissez cette commande pour supprimer une version dont vous n'avez plus besoin. Notez que vous ne pouvez pas supprimer la version de politique par défaut. La version de politique par défaut est celle dont la valeur
isDefaultVersion
est detrue
.aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id
policyId
Après avoir supprimé une version de politique, réessayez cette étape.
Avec le fichier de configuration et la politique mis à jour, vous êtes prêt à démontrer les abonnements génériques avec le AWS IoT Device Client.
Pour montrer comment le client de l' AWS IoT appareil s'abonne à plusieurs sujets de MQTT message et en reçoit
-
Dans le client de MQTT test, vérifiez les abonnements. Si le client de MQTT test est abonné au filtre de
#
rubrique, passez à l'étape suivante. Sinon, dans le client de MQTT test, dans l'onglet S'abonner à un sujet, dans le filtre de sujet, entrez#
(un signe dièse), puis choisissez S'abonner pour vous y abonner. -
Dans la fenêtre du terminal de votre ordinateur hôte local connecté à votre Raspberry Pi, entrez ces commandes pour démarrer le AWS IoT Device Client.
cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
-
Tout en regardant le résultat du AWS IoT Device Client dans la fenêtre du terminal de l'ordinateur hôte local, retournez au client de MQTT test. Dans l'onglet Publier dans une rubrique, dans Nom de rubrique, entrez
test/dc/subtopic
, puis choisissez Publier. -
Dans la fenêtre du terminal, vérifiez que le message a bien é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
-
Tout en regardant la sortie du AWS IoT Device Client dans la fenêtre du terminal de l'ordinateur hôte local, retournez au client de MQTT test. Dans l'onglet Publier dans une rubrique, dans Nom de rubrique, entrez
test/dc/subtopic2
, puis choisissez Publier. -
Dans la fenêtre du terminal, vérifiez que le message a bien é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 la réception des deux messages, entrez
^C
(Ctrl-C) pour arrêter le AWS IoT Device Client. -
Entrez cette commande pour afficher la fin du fichier journal des messages et voir le message que vous avez publié depuis le client de MQTT test.
tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
Note
Le fichier journal contient uniquement les charges utiles des messages. Les sujets des messages ne sont pas enregistrés dans le fichier journal des messages reçus.
Vous pouvez également voir le message publié par le AWS IoT Device Client dans le journal reçu. En effet, le filtre de sujet générique inclut ce sujet de message et, parfois, la demande d'abonnement peut être traitée par l’agent de messages avant que le message publié ne soit envoyé aux abonnés.
Les entrées du fichier journal indiquent que les messages ont été reçus. Vous pouvez répéter cette procédure en utilisant d'autres noms de rubrique. Tous les messages dont le nom de rubrique commence par test/dc/
doivent être reçus et enregistrés. Les messages dont le nom de rubrique commence par un autre texte sont ignorés.
Après avoir démontré comment le AWS IoT Device Client peut publier des MQTT messages et s'y abonner, passez àDidacticiel : Démonstration d'actions à distance (jobs) avec AWS IoT Device Client.