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 à API celle 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
Pour configurer votre environnement de simulation
-
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 Compte AWS.
-
Ouvrez la AWS IoT console
, puis dans le menu de gauche, choisissez Test pour ouvrir le MQTTclient. -
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 :
-
Sélectionnez Gérer, puis choisissez votre objet .
-
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.
-
Entrez le nom
mySimulatedThing
, laissez les autres paramètres par défaut, puis cliquez sur Suivant. -
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.
-
Vous pouvez joindre la politique
My_IoT_Policy
qui autoriserait l'appareil à publier les sujets MQTT réservés et à s'y abonner. 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 :
-
Dans la AWS IoT console, choisissez votre objet dans la liste des objets affichés, puis choisissez Shadows.
-
Choisissez Ajouter une ombre, entrez le nom
simShadow1
, puis choisissez Créer pour ajouter l'ombre nommée.
Abonnez-vous et publiez sur des MQTT sujets réservés
Dans la console, abonnez-vous aux sujets MQTT parallèles 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 s'abonner à un MQTT sujet dans le MQTTclient
-
Dans le MQTTclient, choisissez S'abonner à un sujet.
-
Entrez le
get
,update
, et lesdelete
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 publier dans un MQTT sujet du MQTTclient
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é mySimulatedThing, nommé, simShadow1.
Pour obtenir l'état fantôme actuel auprès du MQTTclient
-
Dans le MQTTclient, choisissez Publier dans un sujet.
-
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 lecode
est404
, 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
-
Dans le MQTTclient, choisissez Publier dans un sujet et entrez ce sujet :
$aws/things/mySimulatedThing/shadow/name/simShadow1/update
-
Dans la fenêtre du corps du message ci-dessous où vous avez saisi le sujet, entrez ce document fictif pour montrer que l'appareil indique son identifiant et sa couleur actuelle en RGB valeurs. 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 au UpdateThingShadow
RESTAPI.
Pour mettre à jour un shadow à partir d'une application
Sur la ligne de commande, entrez la commande ci-dessous.
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 MQTTclient 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 consulter les messages de mise à jour dans le MQTTclient
Dans le MQTTclient, choisissez $aws/things/ mySimulatedThing /shadow/name/ simShadow 1/update/delta dans la colonne 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 chez le MQTTclient.
Pour mettre à jour le shadow à partir de l'appareil
-
Dans le MQTTclient, choisissez Publier dans un sujet.
-
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'
/update
action :$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/ simShadow 1/update/accepted du MQTTclient avec l'état actuel du shadow, 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
-
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
-
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.