Tutoriel : Connexion d'un appareil à AWS IoT Core l'aide de l' AWS IoT appareil SDK - 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 : Connexion d'un appareil à AWS IoT Core l'aide de l' AWS IoT appareil SDK

Ce didacticiel explique comment connecter un appareil AWS IoT Core afin qu'il puisse envoyer et recevoir des données depuis et vers AWS IoT. Une fois ce didacticiel terminé, votre appareil sera configuré pour se connecter à AWS IoT Core et vous comprendrez comment les appareils communiquent avec AWS IoT.

Prérequis

Avant de commencer ce didacticiel, assurez-vous de disposer des éléments suivants :

  • Terminé Commencer à utiliser les AWS IoT Core didacticiels

    Dans la section de ce didacticiel où vous devezConfigurer votre appareil, sélectionnez l'Connectez un Raspberry Pi ou un autre appareiloption correspondant à votre appareil et utilisez les options du langage Python pour configurer votre appareil.

    Note

    Gardez ouverte la fenêtre du terminal que vous utilisez dans ce didacticiel, car vous l'utiliserez également dans ce didacticiel.

  • Un appareil capable d'exécuter le AWS IoT Device SDK v2 pour Python.

    Ce didacticiel montre comment connecter un appareil à l'aide AWS IoT Core d'exemples de code Python, qui nécessitent un périphérique relativement puissant. Si vous travaillez avec des appareils dont les ressources sont limitées, il est possible que ces exemples de code ne fonctionnent pas sur eux. Dans ce cas, vous aurez peut-être plus de succès avec le Tutoriel : Utilisation du Kit SDK des appareils AWS IoT pour Embedded C didacticiel.

  • Vous avez obtenu les informations requises pour vous connecter à l'appareil

    Pour connecter votre appareil à AWS IoT, vous devez disposer d'informations sur le nom de l'objet, le nom d'hôte et le numéro de port.

    Note

    Vous pouvez également utiliser l'authentification personnalisée pour connecter des appareils à AWS IoT Core. Les données de connexion que vous transmettez à votre fonction Lambda d'autorisation dépendent du protocole que vous utilisez.

    • Nom de l'objet : nom de l' AWS IoT objet auquel vous souhaitez vous connecter. Vous devez avoir enregistré votre appareil en tant qu' AWS IoT objet. Pour de plus amples informations, veuillez consulter Gestion des appareils avec AWS IoT.

    • Nom d'hôte : nom d'hôte du point de terminaison IoT spécifique au compte.

    • Numéro de port : numéro de port auquel se connecter.

    Vous pouvez utiliser la configureEndpoint méthode en AWS IoT Python SDK pour configurer le nom d'hôte et le numéro de port.

    myAWSIoTMQTTClient.configureEndpoint("random.iot.region.amazonaws.com", 8883)

Préparez votre appareil pour AWS IoT

Dans Commencer à utiliser les AWS IoT Core didacticiels, vous avez préparé votre appareil et votre AWS compte pour qu'ils puissent communiquer. Cette section passe en revue les aspects de cette préparation qui s'appliquent à toute connexion d'appareil avec AWS IoT Core.

Pour qu'un appareil puisse se connecter à AWS IoT Core :

  1. Vous devez avoir un Compte AWS.

    La procédure Configurez Compte AWS décrite dans décrit comment créer un Compte AWS si vous n'en avez pas déjà un.

  2. Dans ce compte, les AWS IoT ressources suivantes doivent être définies pour l'appareil de votre région Compte AWS et de votre région.

    La procédure décrite ci-dessous Créez des AWS IoT ressources décrit comment créer ces ressources pour l'appareil dans votre région Compte AWS .

    • Un certificat d'appareil enregistré AWS IoT et activé pour authentifier l'appareil.

      Le certificat est souvent créé avec un AWS IoT objet et y est attaché. Bien qu'il ne soit pas nécessaire qu'un appareil se connecte à un objet AWS IoT, il met des AWS IoT fonctionnalités supplémentaires à la disposition de celui-ci.

    • Politique attachée au certificat de l'appareil qui l'autorise à se connecter AWS IoT Core et à effectuer toutes les actions que vous souhaitez qu'il effectue.

  3. Une connexion Internet qui peut accéder aux terminaux Compte AWS de votre appareil.

    Les points de terminaison de l'appareil sont décrits AWS IoT données de l'appareil et points de terminaison de service et peuvent être consultés sur la page des paramètres de la AWS IoT console.

  4. Logiciel de communication tel que celui SDKs fourni par l' AWS IoT appareil. Ce tutoriel utilise le AWS IoT Device SDK v2 pour Python.

Passez en revue le MQTT protocole

Avant de parler de l'exemple d'application, il est utile de comprendre le MQTT protocole. Le MQTT protocole offre certains avantages par rapport aux autres protocoles de communication réseau, notammentHTTP, ce qui en fait un choix populaire pour les appareils IoT. Cette section passe en revue les principaux aspects MQTT qui 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.

MQTTutilise un modèle de communication publication/abonnement

Le MQTT protocole utilise un publish/subscribe communication model with its host. This model differs from the request/response modèle qui HTTP utilise. AvecMQTT, les appareils établissent une session avec l'hôte qui est identifié par un identifiant client unique. Pour envoyer des données, les appareils publient des messages identifiés par sujets à un courtier de messages sur l'hôte. Pour recevoir des messages du courtier de messages, les appareils s'abonnent aux sujets en envoyant des filtres de sujets dans les demandes d'abonnement adressées au courtier de messages.

MQTTprend en charge les sessions persistantes

Le courtier de messages reçoit les messages des appareils et publie des messages aux appareils qui y sont abonnés. Avec les sessions persistantes, —c'est-à-dire des sessions qui restent actives même lorsque l'appareil initiateur est déconnecté— les appareils peuvent récupérer les messages publiés alors qu'ils étaient déconnectés. Du côté de l'appareil, MQTT prend en charge les niveaux de qualité de service (QoS) qui garantissent que l'hôte reçoit les messages envoyés par l'appareil.

Consultez l'SDKexemple d'application pubsub.py pour appareil

Cette section passe en revue l'pubsub.pyexemple d'application du AWS IoT Device SDK v2 pour Python utilisé dans ce didacticiel. Ici, nous allons voir comment il se connecte AWS IoT Core pour publier des MQTT messages et s'y abonner. La section suivante présente quelques exercices destinés à vous aider à découvrir comment un appareil se connecte et communique avec lui AWS IoT Core.

L'pubsub.pyexemple d'application illustre les aspects suivants d'une MQTT connexion avec AWS IoT Core :

Protocoles de communication

L'pubsub.pyexemple montre une MQTT connexion utilisant les WSS protocoles MQTT and MQTT over. La bibliothèque AWS common runtime (AWS CRT) fournit le support des protocoles de communication de bas niveau et est incluse dans le AWS IoT Device SDK v2 pour Python.

MQTT

Les pubsub.py exemples d'appels mtls_from_path (présentés ici) dans le mqtt_connection_builderpour établir une connexion à AWS IoT Core l'aide du MQTT protocole. mtls_from_pathutilise les certificats X.509 et TLS v1.2 pour authentifier le périphérique. La AWS CRT bibliothèque gère les détails de niveau inférieur de cette connexion.

mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=args.endpoint, cert_filepath=args.cert, pri_key_filepath=args.key, ca_filepath=args.ca_file, client_bootstrap=client_bootstrap, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpoint

Le point Compte AWS de terminaison de votre appareil IoT

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

cert_filepath

Chemin d'accès au fichier de certificat de l'appareil

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

pri_key_filepath

Le chemin d'accès au fichier de clé privée de l'appareil créé avec son fichier de certificat

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

ca_filepath

Chemin d'accès au fichier de l'autorité de certification racine. Obligatoire uniquement si le MQTT serveur utilise un certificat qui ne figure pas déjà dans votre trust store.

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

client_bootstrap

L'objet d'exécution commun qui gère les activités de communication avec les sockets

Dans l'exemple d'application, cet objet est instancié avant l'appel à mqtt_connection_builder.mtls_from_path.

on_connection_interrupted
on_connection_resumed

Les fonctions de rappel permettent d'appeler lorsque la connexion de l'appareil est interrompue et reprise

client_id

L'identifiant qui identifie de manière unique cet appareil dans Région AWS

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

clean_session

S'il faut démarrer une nouvelle session persistante ou, le cas échéant, se reconnecter à une session existante

keep_alive_secs

La valeur de maintien en vie, en secondes, à envoyer à la CONNECT demande. Un ping sera automatiquement envoyé à cet intervalle. Si le serveur ne reçoit pas de ping après 1,5 fois cette valeur, il suppose que la connexion est perdue.

MQTTterminé WSS

Les pubsub.py exemples d'appels websockets_with_default_aws_signing (présentés ici) dans le mqtt_connection_builderpour établir une connexion en AWS IoT Core utilisant le MQTT protocole overWSS. websockets_with_default_aws_signingcrée une MQTT connexion à l'WSSaide de Signature V4 pour authentifier l'appareil.

mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing( endpoint=args.endpoint, client_bootstrap=client_bootstrap, region=args.signing_region, credentials_provider=credentials_provider, websocket_proxy_options=proxy_options, ca_filepath=args.ca_file, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpoint

Le point Compte AWS de terminaison de votre appareil IoT

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

client_bootstrap

L'objet d'exécution commun qui gère les activités de communication avec les sockets

Dans l'exemple d'application, cet objet est instancié avant l'appel à. mqtt_connection_builder.websockets_with_default_aws_signing

region

Région de AWS signature utilisée par l'authentification Signature V4. Dans pubsub.py, il transmet le paramètre saisi dans la ligne de commande.

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

credentials_provider

Les AWS informations d'identification fournies à utiliser pour l'authentification

Dans l'exemple d'application, cet objet est instancié avant l'appel à mqtt_connection_builder.websockets_with_default_aws_signing.

websocket_proxy_options

HTTPoptions de proxy, si vous utilisez un hôte proxy

Dans l'exemple d'application, cette valeur est initialisée avant l'appel à mqtt_connection_builder.websockets_with_default_aws_signing.

ca_filepath

Chemin d'accès au fichier de l'autorité de certification racine. Obligatoire uniquement si le MQTT serveur utilise un certificat qui ne figure pas déjà dans votre trust store.

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

on_connection_interrupted
on_connection_resumed

Les fonctions de rappel permettent d'appeler lorsque la connexion de l'appareil est interrompue et reprise

client_id

L'identifiant qui identifie de manière unique cet appareil dans le Région AWS.

Dans l'exemple d'application, cette valeur est transmise depuis la ligne de commande.

clean_session

S'il faut démarrer une nouvelle session persistante ou, le cas échéant, se reconnecter à une session existante

keep_alive_secs

La valeur de maintien en vie, en secondes, à envoyer à la CONNECT demande. Un ping sera automatiquement envoyé à cet intervalle. Si le serveur ne reçoit pas de ping après 1,5 fois cette valeur, il suppose que la connexion est perdue.

HTTPS

Qu'en est-il HTTPS ? AWS IoT Core prend en charge les appareils qui publient HTTPS des demandes. Du point de vue de la programmation, les appareils envoient HTTPS des demandes AWS IoT Core comme le ferait n'importe quelle autre application. Pour un exemple de programme Python qui envoie un HTTP message depuis un appareil, consultez l'exemple de HTTPS code utilisant la requests bibliothèque Python. Cet exemple envoie un message à AWS IoT Core un HTTPS utilisateur qui l' AWS IoT Core interprète comme un MQTT message.

Tout AWS IoT Core en prenant en charge les HTTPS demandes des appareils, assurez-vous de consulter les informations Choix d'un protocole d'application pour la communication de votre appareil correspondantes afin de pouvoir prendre une décision éclairée quant au protocole à utiliser pour les communications de votre appareil.

Sessions persistantes

Dans l'exemple d'application, la définition du clean_session paramètre sur False indique que la connexion doit être permanente. En pratique, cela signifie que la connexion ouverte par cet appel se reconnecte à une session persistante existante, s'il en existe une. Dans le cas contraire, il crée une nouvelle session persistante et s'y connecte.

Dans le cas d'une session permanente, les messages envoyés à l'appareil sont stockés par le courtier de messages lorsque l'appareil n'est pas connecté. Lorsqu'un appareil se reconnecte à une session permanente, le courtier de messages envoie au terminal tous les messages enregistrés auxquels il est abonné.

Sans session permanente, l'appareil ne recevra pas les messages envoyés lorsqu'il n'est pas connecté. L'option à utiliser dépend de votre application et de la nécessité de communiquer les messages qui apparaissent alors qu'un appareil n'est pas connecté. Pour de plus amples informations, veuillez consulter Sessions permanentes MQTT.

Qualité du service

Lorsque l'appareil publie des messages et s'y abonne, la qualité de service (QoS) préférée peut être définie. AWS IoT prend en charge les niveaux de QoS 0 et 1 pour les opérations de publication et d'abonnement. Pour plus d'informations sur les niveaux de QoS dans AWS IoT, consultez. Options de qualité de service (QoS) MQTT

Le AWS CRT moteur d'exécution de Python définit les constantes suivantes pour les niveaux de QoS qu'il prend en charge :

Niveaux de qualité de service en Python
MQTTNiveau de QoS Valeur symbolique Python utilisée par SDK Description
QoS niveau 0 mqtt.QoS.AT_MOST_ONCE Une seule tentative d'envoi du message sera effectuée, qu'il soit reçu ou non. Le message peut ne pas être envoyé du tout, par exemple si l'appareil n'est pas connecté ou s'il y a une erreur réseau.
QoS niveau 1 mqtt.QoS.AT_LEAST_ONCE Le message est envoyé à plusieurs reprises jusqu'à ce qu'un PUBACK accusé de réception soit reçu.

Dans l'exemple d'application, les demandes de publication et d'abonnement sont effectuées avec un niveau de QoS de 1 (mqtt.QoS.AT_LEAST_ONCE).

  • QoS lors de la publication

    Lorsqu'un appareil publie un message avec le niveau de QoS 1, il l'envoie à plusieurs reprises jusqu'à ce qu'il reçoive une PUBACK réponse du courtier de messages. Si l'appareil n'est pas connecté, le message est mis en file d'attente pour être envoyé après sa reconnexion.

  • QoS lors de l'abonnement

    Lorsqu'un appareil s'abonne à un message avec QoS de niveau 1, le courtier de messages enregistre les messages auxquels le périphérique est abonné jusqu'à ce qu'ils puissent être envoyés au périphérique. Le courtier de messages renvoie les messages jusqu'à ce qu'il reçoive une PUBACK réponse de l'appareil.

Publication du message

Une fois la connexion établie avec succès AWS IoT Core, les appareils peuvent publier des messages. Pour ce faire, l'pubsub.pyexemple appelle le publish fonctionnement de l'mqtt_connectionobjet.

mqtt_connection.publish( topic=args.topic, payload=message, qos=mqtt.QoS.AT_LEAST_ONCE )
topic

Le nom du sujet du message qui identifie le message

Dans l'exemple d'application, cela est transmis depuis la ligne de commande.

payload

La charge utile du message formatée sous forme de chaîne (par exemple, un JSON document)

Dans l'exemple d'application, cela est transmis depuis la ligne de commande.

Un JSON document est un format de charge utile courant, reconnu par d'autres AWS IoT services ; toutefois, le format de données de la charge utile du message peut être celui sur lequel les éditeurs et les abonnés sont d'accord. Cependant, d'autres AWS IoT services reconnaissent uniquement et JSONCBOR, dans certains cas, pour la plupart des opérations.

qos

Le niveau de QoS pour ce message

Abonnement aux messages

Pour recevoir des messages provenant AWS IoT d'autres services et appareils, les appareils s'abonnent à ces messages en utilisant le nom de leur sujet. Les appareils peuvent s'abonner à des messages individuels en spécifiant un nom de sujet, et à un groupe de messages en spécifiant un filtre de sujet, qui peut inclure des caractères génériques. L'pubsub.pyexemple utilise le code présenté ici pour s'abonner aux messages et enregistrer les fonctions de rappel afin de traiter le message après sa réception.

subscribe_future, packet_id = mqtt_connection.subscribe( topic=args.topic, qos=mqtt.QoS.AT_LEAST_ONCE, callback=on_message_received ) subscribe_result = subscribe_future.result()
topic

Le sujet auquel s'abonner. Il peut s'agir d'un nom de rubrique ou d'un filtre de rubrique.

Dans l'exemple d'application, cela est transmis depuis la ligne de commande.

qos

Si le courtier de messages doit stocker ces messages lorsque l'appareil est déconnecté.

Une valeur de mqtt.QoS.AT_LEAST_ONCE (QoS niveau 1) nécessite qu'une session persistante soit spécifiée (clean_session=False) lors de la création de la connexion.

callback

Fonction à appeler pour traiter le message souscrit.

La mqtt_connection.subscribe fonction renvoie un futur et un ID de paquet. Si la demande d'abonnement a été lancée avec succès, l'ID de paquet renvoyé est supérieur à 0. Pour vous assurer que l'abonnement a été reçu et enregistré par le courtier de messages, vous devez attendre le retour du résultat de l'opération asynchrone, comme indiqué dans l'exemple de code.

Fonction de rappel

Le rappel de l'pubsub.pyexemple traite les messages souscrits au fur et à mesure que l'appareil les reçoit.

def on_message_received(topic, payload, **kwargs): print("Received message from topic '{}': {}".format(topic, payload)) global received_count received_count += 1 if received_count == args.count: received_all_event.set()
topic

Le sujet du message

Il s'agit du nom de sujet spécifique du message reçu, même si vous vous êtes abonné à un filtre de sujet.

payload

La charge utile des messages

Le format utilisé est spécifique à l'application.

kwargs

Arguments supplémentaires possibles tels que décrits dans mqtt.Connection.subscribe.

Dans l'pubsub.pyexempleon_message_received, affiche uniquement le sujet et sa charge utile. Il compte également les messages reçus pour terminer le programme une fois la limite atteinte.

Votre application évaluera le sujet et la charge utile pour déterminer les actions à effectuer.

Déconnexion et reconnexion de l'appareil

L'pubsub.pyexemple inclut des fonctions de rappel qui sont appelées lorsque le périphérique est déconnecté et lorsque la connexion est rétablie. Les actions entreprises par votre appareil face à ces événements sont spécifiques à l'application.

Lorsqu'un appareil se connecte pour la première fois, il doit s'abonner aux rubriques pour pouvoir les recevoir. Si la session d'un appareil est présente lorsqu'il se reconnecte, ses abonnements sont restaurés et tous les messages enregistrés provenant de ces abonnements sont envoyés à l'appareil après sa reconnexion.

Si la session d'un appareil n'existe plus lorsqu'il se reconnecte, il doit se réabonner à ses abonnements. Les sessions persistantes ont une durée de vie limitée et peuvent expirer lorsque l'appareil est déconnecté trop longtemps.

Connectez votre appareil et communiquez avec AWS IoT Core

Cette section présente quelques exercices destinés à vous aider à explorer les différents aspects de la connexion de votre appareil à AWS IoT Core. Pour ces exercices, vous allez utiliser le client de MQTT test de la AWS IoT console pour voir ce que votre appareil publie et pour publier des messages sur votre appareil. Ces exercices utilisent l'pubsub.pyexemple du AWS IoT Device SDK v2 pour Python et s'appuient sur votre expérience des Commencer à utiliser les AWS IoT Core didacticiels didacticiels.

Pour ces exercices, vous allez commencer par l'pubsub.pyexemple de programme.

Note

Ces exercices supposent que vous avez terminé les Commencer à utiliser les AWS IoT Core didacticiels didacticiels et que vous utilisez la fenêtre du terminal de votre appareil à partir de ce didacticiel.

Abonnez-vous aux filtres thématiques génériques

Dans cet exercice, vous allez modifier la ligne de commande utilisée pour pubsub.py vous abonner à un filtre de sujet générique et traiter les messages reçus en fonction du sujet du message.

Procédure d'exercice

Pour cet exercice, imaginez que votre appareil contient une commande de température et une commande d'éclairage. Il utilise ces noms de rubriques pour identifier les messages les concernant.

  1. Avant de commencer l'exercice, essayez d'exécuter cette commande à partir des Commencer à utiliser les AWS IoT Core didacticiels didacticiels de votre appareil pour vous assurer que tout est prêt pour l'exercice.

    cd ~/aws-iot-device-sdk-python-v2/samples python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

    Vous devriez voir le même résultat que celui que vous avez vu dans le didacticiel de démarrage.

  2. Pour cet exercice, modifiez ces paramètres de ligne de commande.

    Action

    Paramètre de ligne de commande

    Effet

    ajouter

    --message ""

    Configurer pubsub.py pour écouter uniquement

    ajouter

    --count 2

    Terminez le programme après avoir reçu deux messages

    modification

    --topic device/+/details

    Définissez le filtre de rubrique auquel vous souhaitez vous abonner

    Ces modifications apportées à la ligne de commande initiale se traduisent par cette ligne de commande. Entrez cette commande dans la fenêtre du terminal de votre appareil.

    python3 pubsub.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

    Le programme doit afficher ce qui suit :

    Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-24d7cdcc-cc01-458c-8488-2d05849691e1'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received...

    Si vous voyez quelque chose comme ça sur votre terminal, celui-ci est prêt et il écoute les messages dont le nom des sujets commence par device et se termine par/detail. Alors, testons cela.

  3. Voici quelques messages que votre appareil est susceptible de recevoir.

    Nom de la rubrique

    Charge utile du message

    device/temp/details

    { "desiredTemp": 20, "currentTemp": 15 }

    device/light/details

    { "desiredLight": 100, "currentLight": 50 }

  4. À l'aide du client de MQTT test de la AWS IoT console, envoyez les messages décrits à l'étape précédente à votre appareil.

    1. Ouvrez le client de MQTT test dans la AWS IoT console.

    2. Dans Subscribe to a topic, dans le champ Subscription topic, entrez device/+/details, puis choisissez Subscribe to topic.

    3. Dans la colonne Abonnements du client de MQTT test, sélectionnez device/+/details.

    4. Pour chacun des sujets du tableau précédent, effectuez les opérations suivantes dans le client de MQTT test :

      1. Dans Publier, entrez la valeur de la colonne Nom du sujet dans le tableau.

      2. Dans le champ de charge utile du message situé sous le nom du sujet, entrez la valeur de la colonne Charge utile du message du tableau.

      3. Regardez la fenêtre du terminal en cours pubsub.py d'exécution et, dans le client de MQTT test, choisissez Publier dans le sujet.

      Vous devriez voir que le message a été reçu pubsub.py dans la fenêtre du terminal.

Résultat de l'exercice

Ainsi,pubsub.py, s'est abonné aux messages à l'aide d'un filtre thématique générique, les a reçus et les a affichés dans la fenêtre du terminal. Notez que vous vous êtes abonné à un filtre de sujet unique et que la fonction de rappel a été appelée pour traiter les messages ayant deux sujets distincts.

Traiter les abonnements aux filtres thématiques

Sur la base de l'exercice précédent, modifiez l'pubsub.pyexemple d'application pour évaluer les sujets des messages et traiter les messages souscrits en fonction du sujet.

Procédure d'exercice

Pour évaluer le sujet du message
  1. Copiez pubsub.py dans pubsub2.py.

  2. Ouvrez pubsub2.py dans votre éditeur de texte préféré ouIDE.

  3. Danspubsub2.py, trouvez la on_message_received fonction.

  4. Danson_message_received, insérez le code suivant après la ligne commençant par print("Received message et avant la ligne commençant parglobal received_count.

    topic_parsed = False if "/" in topic: parsed_topic = topic.split("/") if len(parsed_topic) == 3: # this topic has the correct format if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'): # this is a topic we care about, so check the 2nd element if (parsed_topic[1] == 'temp'): print("Received temperature request: {}".format(payload)) topic_parsed = True if (parsed_topic[1] == 'light'): print("Received light request: {}".format(payload)) topic_parsed = True if not topic_parsed: print("Unrecognized message topic.")
  5. Enregistrez vos modifications et exécutez le programme modifié à l'aide de cette ligne de commande.

    python3 pubsub2.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
  6. Dans la AWS IoT console, ouvrez le client MQTT de test.

  7. Dans Subscribe to a topic, dans le champ Subscription topic, entrez device/+/details, puis choisissez Subscribe to topic.

  8. Dans la colonne Abonnements du client de MQTT test, sélectionnez device/+/details.

  9. Pour chacune des rubriques de ce tableau, effectuez les opérations suivantes dans le client de MQTT test :

    Nom de la rubrique

    Charge utile du message

    device/temp/details

    { "desiredTemp": 20, "currentTemp": 15 }

    device/light/details

    { "desiredLight": 100, "currentLight": 50 }

    1. Dans Publier, entrez la valeur de la colonne Nom du sujet dans le tableau.

    2. Dans le champ de charge utile du message situé sous le nom du sujet, entrez la valeur de la colonne Charge utile du message du tableau.

    3. Regardez la fenêtre du terminal en cours pubsub.py d'exécution et, dans le client de MQTT test, choisissez Publier dans le sujet.

    Vous devriez voir que le message a été reçu pubsub.py dans la fenêtre du terminal.

Le résultat devrait être similaire dans la fenêtre de votre terminal.

Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-af794be0-7542-45a0-b0af-0b0ea7474517'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received... Received message from topic 'device/light/details': b'{ "desiredLight": 100, "currentLight": 50 }' Received light request: b'{ "desiredLight": 100, "currentLight": 50 }' Received message from topic 'device/temp/details': b'{ "desiredTemp": 20, "currentTemp": 15 }' Received temperature request: b'{ "desiredTemp": 20, "currentTemp": 15 }' 2 message(s) received. Disconnecting... Disconnected!

Résultat de l'exercice

Dans cet exercice, vous avez ajouté du code afin que l'exemple d'application reconnaisse et traite plusieurs messages dans la fonction de rappel. Ainsi, votre appareil pourrait recevoir des messages et agir en conséquence.

Un autre moyen pour votre appareil de recevoir et de traiter plusieurs messages consiste à s'abonner à différents messages séparément et à attribuer à chaque abonnement sa propre fonction de rappel.

Publiez des messages depuis votre appareil

Vous pouvez utiliser l'exemple d'application pubsub.py pour publier des messages depuis votre appareil. Bien qu'il publie les messages tels quels, ils ne peuvent pas être lus sous forme de JSON documents. Cet exercice modifie l'exemple d'application afin de pouvoir publier JSON des documents lisibles dans la charge utile des messages. AWS IoT Core

Procédure d'exercice

Dans cet exercice, le message suivant sera envoyé avec le device/data sujet.

{ "timestamp": 1601048303, "sensorId": 28, "sensorData": [ { "sensorName": "Wind speed", "sensorValue": 34.2211224 } ] }
Pour préparer votre client de MQTT test à surveiller les messages de cet exercice
  1. Dans Subscribe to a topic, dans le champ Subscription topic, entrez device/data, puis choisissez Subscribe to topic.

  2. Dans la colonne Abonnements du client de MQTT test, sélectionnez appareil/données.

  3. Laissez la fenêtre du client de MQTT test ouverte pour attendre les messages de votre appareil.

Pour envoyer JSON des documents avec l'exemple d'application pubsub.py
  1. Sur votre appareil, copiez-le pubsub.py verspubsub3.py.

  2. Modifiez pubsub3.py pour modifier le format des messages qu'il publie.

    1. Ouvrez pubsub3.py dans un éditeur de texte.

    2. Localisez cette ligne de code :

      message = "{} [{}]".format(message_string, publish_count)

    3. Remplacer par :

      message = "{}".format(message_string)

    4. Localisez cette ligne de code :

      message_json = json.dumps(message)

    5. Remplacer par :

      message = "{}".json.dumps(json.loads(message))

    6. Enregistrez vos modifications.

  3. Sur votre appareil, exécutez cette commande pour envoyer le message deux fois.

    python3 pubsub3.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --topic device/data --count 2 --message '{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' --endpoint your-iot-endpoint
  4. Dans le client de MQTT test, vérifiez qu'il a interprété et formaté le JSON document dans la charge utile du message, par exemple :

    Image montrant comment la charge utile d'un JSON message est affichée dans le MQTT client de la AWS IoT console.

Par défaut, s'abonne pubsub3.py également aux messages qu'il envoie. Vous devriez voir qu'elle a reçu les messages dans la sortie de l'application. La fenêtre du terminal doit se présenter comme suit.

Connecting to a3qEXAMPLEsffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-5cff18ae-1e92-4c38-a9d4-7b9771afc52f'... Connected! Subscribing to topic 'device/data'... Subscribed with QoS.AT_LEAST_ONCE Sending 2 message(s) Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' 2 message(s) received. Disconnecting... Disconnected!

Résultat de l'exercice

Ainsi, votre appareil peut générer des messages à envoyer AWS IoT Core pour tester la connectivité de base et fournir des messages AWS IoT Core à traiter. Par exemple, vous pouvez utiliser cette application pour envoyer des données de test depuis votre appareil afin de tester les actions des AWS IoT règles.

Passez en revue les résultats

Les exemples présentés dans ce didacticiel vous ont permis d'acquérir une expérience pratique des bases de la communication entre les AWS IoT Core appareils, élément fondamental de votre AWS IoT solution. Lorsque vos appareils sont en mesure de communiquer avec eux AWS IoT Core, ils peuvent transmettre des messages aux AWS services et autres appareils sur lesquels ils peuvent agir. De même, AWS les services et autres appareils peuvent traiter des informations qui se traduisent par le renvoi de messages vers vos appareils.

Lorsque vous serez prêt à AWS IoT Core poursuivre votre exploration, essayez ces didacticiels :