Simulation des communications du service Device Shadow - 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.

Simulation des communications du service Device Shadow

Cette rubrique indique comment le service Device Shadow agit en tant qu'intermédiaire et permet aux appareils et aux applications d'utiliser un shadow pour mettre à jour, stocker et récupérer l'état d'un appareil.

Pour démontrer l'interaction décrite dans cette rubrique et pour l'explorer plus en détail, vous aurez besoin d'un Compte AWS et d'un système sur lesquels vous pourrez exécuter le AWS CLI. Si vous ne les avez pas, vous pouvez toujours voir l'interaction dans les exemples de code.

Dans cet exemple, la AWS IoT console représente le périphérique. Le AWS CLI représente l'application ou le service qui accède à l'appareil par le biais de l'ombre. L' AWS CLI interface est très similaire à l'API avec laquelle une application peut communiquer AWS IoT. L'appareil dans cet exemple est une ampoule intelligente et l'application affiche l'état de cette ampoule et peut le modifier.

Configuration de la simulation

Ces procédures initialisent la simulation en ouvrant la console AWS IoT, qui simule votre appareil, et la fenêtre de ligne de commande qui simule votre application.

Pour configurer votre environnement de simulation
  1. Vous aurez besoin d'un Compte AWS pour exécuter vous-même les exemples de cette rubrique. Si vous n'en avez pas Compte AWS, créez-en un, comme décrit dansConfigurez votre Compte AWS.

  2. Ouvrez la console AWS IoT et, dans le menu de gauche, choisissez Test pour ouvrir le client MQTT.

  3. Dans une autre fenêtre, ouvrez une fenêtre de terminal sur un système où l'interface AWS CLI est installée.

Deux fenêtres doivent être ouvertes : l'une avec la AWS IoT console sur la page Test et l'autre avec une invite de ligne de commande.

Initialisation de l'appareil

Dans cette simulation, nous allons travailler avec un objet nommé mySimulatedThing, et son ombre nommée SimShadow1.

Create thing Object et sa politique en matière d'IoT

Pour créer un objet, dans la AWS IoT console :

  1. Sélectionnez Gérer, puis choisissez votre objet .

  2. Cliquez sur le bouton Créer si des éléments sont répertoriés, sinon cliquez sur Enregistrer un seul objet pour créer un seul AWS IoT élément.

  3. Entrez le nommySimulatedThing, laissez les autres paramètres par défaut, puis cliquez sur Suivant.

  4. Utilisez la création de certificats en un clic pour générer les certificats qui authentifieront la connexion de l'appareil à AWS IoT. Cliquez sur Activer pour activer le certificat.

  5. Vous pouvez joindre la politique My_IoT_Policy qui autoriserait l'appareil à publier et à s'abonner aux sujets réservés au MQTT. Pour des étapes plus détaillées sur la création d'un AWS IoT objet et sur la création de cette politique, consultezCréez un objet.

Crée une ombre nommée pour l'objet

Vous pouvez créer une ombre nommée pour un objet en publiant une demande de mise à jour dans la rubrique $aws/things/mySimulatedThing/shadow/name/simShadow1/update, comme décrit ci-dessous.

Ou, pour créer une ombre nommée :

  1. Dans la AWS IoT console, choisissez votre objet dans la liste des objets affichés, puis choisissez Shadows.

  2. Choisissez Ajouter une ombre, entrez le nomsimShadow1, puis choisissez Créer pour ajouter l'ombre nommée.

S'abonner et publier sur des sujets MQTT réservés

Dans la console, souscrivez aux sujets MQTT réservés. Ces rubriques sont les réponses aux actions get, update et delete, afin que votre appareil soit prêt à recevoir les réponses après avoir publié une action.

Pour vous abonner à une rubrique MQTT dans le client MQTT
  1. Dans le client MQTT, choisissez Publier dans une rubrique.

  2. Entrez le get, update, et les delete sujets auxquels vous souhaitez vous abonner. Copiez un sujet à la fois dans la liste suivante, collez-le dans le champ Filtre de sujet, puis cliquez sur S'abonner. Vous devriez voir les sujets apparaître sous Abonnements.

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents

    À ce stade, votre appareil simulé est prêt à recevoir les rubriques telles qu'elles sont publiées par AWS IoT.

Pour vous abonner à une rubrique MQTT dans le client MQTT

Une fois qu'un appareil s'est initialisé et s'est abonné aux rubriques de réponse, il doit exécuter une requête portant sur les shadows qu'il prend en charge. Cette simulation ne prend en charge qu'une seule ombre, l'ombre qui supporte un objet nommé SimShadow1. mySimulatedThing

Pour obtenir l'état actuel du shadow à partir du client MQTT
  1. Dans le client MQTT, choisissez Publier dans une rubrique.

  2. Sous Publish, entrez l’objet suivant et supprimez tout contenu de la fenêtre de corps de message ci-dessous où vous avez entré la rubrique à obtenir. Vous pouvez ensuite choisir Publier dans le sujet pour publier la demande. $aws/things/mySimulatedThing/shadow/name/simShadow1/get.

    Si vous n'avez pas créé l'ombre nommée, simShadow1, vous recevez un message dans $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected l’objet et le code est 404, comme dans cet exemple où l'ombre n'a pas été créée, nous allons donc la créer ensuite.

    { "code": 404, "message": "No shadow exists with name: 'simShadow1'" }
Pour créer un shadow avec l'état actuel de l'appareil
  1. Dans le client MQTT, choisissez Publier dans une rubrique et entrez l’objet.

    $aws/things/mySimulatedThing/shadow/name/simShadow1/update
  2. Dans la fenêtre de corps de message ci-dessous où vous avez entré la rubrique, entrez ce document shadow pour montrer que l'appareil rapporte son ID et sa couleur actuelle en valeurs RVB. Choisissez Publier pour publier la demande.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Si vous recevez un message dans le sujet :

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted : Cela signifie que l'ombre a été créée et que le corps du message contient le document fantôme actuel.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected : Vérifiez l'erreur dans le corps du message.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted : L'ombre existe déjà et le corps du message contient l'état actuel de l'ombre, comme dans cet exemple. Avec cela, vous pouvez définir votre appareil ou confirmer qu'il correspond à l'état du shadow.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591140517, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Envoi d'une mise à jour à partir de l'application

Cette section utilise le AWS CLI pour montrer comment une application peut interagir avec une ombre.

Pour obtenir l'état actuel de l'ombre à l'aide du AWS CLI

Sur la ligne de commande, entrez la commande ci-dessous.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

Sur les plateformes Windows, vous pouvez utiliser con à la place de/dev/stdout.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con

Comme le shadow existe et a été initialisé par l'appareil pour refléter son état actuel, il doit renvoyer le document shadow suivant.

{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591141111 }

L'application peut utiliser cette réponse pour initialiser sa représentation de l'état de l'appareil.

Si l'application met à jour l'état, par exemple lorsqu'un utilisateur final change la couleur de notre ampoule intelligente en jaune, l'application enverra une commande update-thing-shadow. Cette commande correspond à l'API REST UpdateThingShadow.

Pour mettre à jour un shadow à partir d'une application

Sur la ligne de commande, entrez la commande ci-dessous.

AWS CLI v2.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --cli-binary-format raw-in-base64-out \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
AWS CLI v1.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout

Si elle réussit, cette commande doit renvoyer le document shadow suivant.

{ "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] } }, "version": 4, "timestamp": 1591141596, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Réponse à une mise à jour sur l'appareil

Pour en revenir au client MQTT dans la AWS console, vous devriez voir les messages AWS IoT publiés pour refléter la commande de mise à jour émise dans la section précédente.

Pour afficher les messages de mise à jour dans le client MQTT

Dans le client MQTT, choisissez $aws/things/ /shadow/name/simshadow1/update/delta dans la colonne mySimulatedThing Abonnements. Si le nom de la rubrique est tronqué, vous pouvez faire une pause dessus pour voir le nom complet. Dans le journal des rubriques de cette rubrique, vous devriez voir un /delta message similaire à celui-ci.

{ "version": 4, "timestamp": 1591141596, "state": { "ColorRGB": [ 255, 255, 0 ] }, "metadata": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Votre appareil traite le contenu de ce message pour définir l'état de l'appareil, afin qu'il corresponde à l'état desired dans le message.

Une fois que l'appareil a mis à jour l'état pour qu'il corresponde à l'desiredétat indiqué dans le message, il doit renvoyer le nouvel état signalé AWS IoT en publiant un message de mise à jour. Cette procédure simule cela dans le client MQTT.

Pour mettre à jour le shadow à partir de l'appareil
  1. Dans le client MQTT, choisissez Publier dans une rubrique.

  2. Dans la fenêtre du corps du message, dans le champ de sujet situé au-dessus de la fenêtre du corps du message, entrez le sujet de l'ombre suivi de l'/updateaction : $aws/things/mySimulatedThing/shadow/name/simShadow1/update et dans le corps du message, entrez ce document fantôme mis à jour, qui décrit l'état actuel de l'appareil. Choisissez Publier pour publier l'état de l'appareil mis à jour.

    { "state": { "reported": { "ColorRGB": [255,255,0] } }, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

    Si le message a bien été reçu par AWS IoT, vous devriez voir une nouvelle réponse dans le journal des messages $aws/things/ mySimulatedThing /shadow/name/simshadow1/update/accepted du client MQTT avec l'état actuel de l'ombre, comme dans cet exemple.

    { "state": { "reported": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "reported": { "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Une mise à jour réussie de l'état signalé du périphérique AWS IoT entraîne également l'envoi d'une description complète de l'état fantôme dans un message adressé au sujet, tel que le corps du message résultant de la mise à jour instantanée effectuée par le périphérique dans la procédure précédente.

{ "previous": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 4 }, "current": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5 }, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Observation de la mise à jour dans l'application

L'application peut désormais interroger le shadow pour obtenir l'état actuel, tel qu'il a été rapporté par l'appareil.

Pour obtenir l'état actuel de l'ombre à l'aide du AWS CLI
  1. Sur la ligne de commande, entrez la commande ci-dessous.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

    Sur les plateformes Windows, vous pouvez utiliser à la con place de/dev/stdout.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
  2. Comme le shadow vient d'être mis à jour par l'appareil pour refléter son état actuel, il doit renvoyer le document shadow suivant.

    { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591143269 }

Au-delà de la simulation

Expérimentez avec l'interaction entre l'interface AWS CLI (représentant l'application) et la console (représentant l'appareil) pour modéliser votre solution IoT.