Concepts et statut des commandes - 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.

Concepts et statut des commandes

Utilisez AWS IoT les commandes pour envoyer des instructions depuis le cloud aux appareils connectés. Pour utiliser cette fonctionnalité :

  1. Créez une commande avec une charge utile contenant les configurations requises pour s'exécuter sur le périphérique.

  2. Spécifiez l'équipement cible qui recevra la charge utile et exécutera les actions.

  3. Exécutez la commande sur le périphérique cible et récupérez les informations d'état. Pour résoudre les problèmes, consultez les CloudWatch journaux.

Pour de plus amples informations sur le contournement, veuillez consulter Workflow de commandes de haut niveau.

Concepts clés des commandes

Les concepts clés suivants vous aident à comprendre la fonctionnalité Commandes. Les termes sont utilisés de manière cohérente dans cette documentation :

  • Commande : modèle réutilisable définissant les instructions de l'appareil

  • Exécution : instance d'une commande exécutée sur un appareil

  • Nom de l'objet : identifiant des appareils enregistrés dans le registre de l'IoT

  • ID client : identifiant MQTT pour les appareils non enregistrés

  • Charge utile : données d'instructions envoyées aux appareils

  • Sujet - Canal MQTT pour la communication de commandes

Commandes

Les commandes sont des instructions envoyées depuis le cloud à vos appareils IoT sous forme de messages MQTT. Après avoir reçu la charge utile, les appareils traitent les instructions et prennent les mesures correspondantes, telles que la modification des paramètres de configuration, la transmission des relevés des capteurs ou le téléchargement des journaux. Les appareils renvoient ensuite les résultats dans le cloud, ce qui permet une surveillance et un contrôle à distance.

Namespace

Lorsque vous créez une commande, spécifiez son espace de noms. Pour AWS IoT Device Management les commandes, utilisez l'espace de AWS-IoT noms par défaut et fournissez une charge utile ou un modèle de charge utile. Pour AWS IoT FleetWise les commandes, utilisez l'espace de AWS-IoT-FleetWise noms. Pour plus d'informations, consultez la section Commandes à distance dans le Guide du AWS IoT FleetWise développeur.

Charge utile

Lorsque vous créez une commande, fournissez une charge utile statique qui définit les actions que le périphérique doit effectuer. La charge utile peut utiliser n'importe quel format pris en charge. Pour garantir que les appareils interprètent correctement la charge utile, nous vous recommandons de spécifier le type de format de charge utile. Les appareils utilisant le MQTT5 protocole peuvent suivre la norme MQTT pour identifier le format. Les indicateurs de format pour JSON ou CBOR sont disponibles dans la rubrique de demande de commandes.

Modèle de charge utile

Un modèle de charge utile définit une charge utile de commande avec des espaces réservés qui génèrent différentes charges utiles au moment de l'exécution en fonction des valeurs de paramètres que vous fournissez. Par exemple, au lieu de créer des charges utiles distinctes pour différentes valeurs de température, créez un modèle avec un espace réservé à la température et spécifiez la valeur lors de l'exécution. Cela élimine le maintien de plusieurs charges utiles similaires.

Appareil cible

Pour exécuter une commande, spécifiez une machine cible en utilisant son nom d'objet (pour les appareils enregistrés avec AWS IoT) ou son ID client MQTT (pour les appareils non enregistrés). L'ID client est un identifiant unique défini dans le MQTT protocole utilisé pour connecter les appareils à AWS IoT. Pour en savoir plus, consultez Considérations relatives à l'appareil cible.

Rubriques relatives aux commandes

Avant d'exécuter une commande, les appareils doivent s'abonner à la rubrique de demande de commandes. Lorsque vous exécutez une commande, la charge utile est envoyée à l'appareil sur ce sujet. Après l'exécution, les appareils publient les résultats et l'état dans la rubrique de réponse aux commandes. Pour de plus amples informations, veuillez consulter Rubriques relatives aux commandes.

Exécution de commandes

Une exécution est une instance d'une commande exécutée sur un équipement cible. Lorsque vous lancez une exécution, la charge utile est transmise à l'appareil et un identifiant d'exécution unique est généré. L'appareil exécute la commande et indique la progression à AWS IoT. La logique côté appareil détermine le comportement d'exécution et les rapports d'état relatifs aux sujets réservés.

Conditions de valeur des paramètres

Lorsque vous créez des commandes avec des modèles de charge utile, définissez des conditions de valeur pour valider les valeurs des paramètres avant leur exécution. Les conditions de valeur garantissent que les paramètres répondent aux exigences, empêchant ainsi les exécutions non valides.

Opérateurs pris en charge par CommandParameterValuetype

Types numériques (INTEGER, LONG, DOUBLE, UNSIGNEDLONG)
  • EQUALS- La valeur doit être égale au nombre spécifié

  • NOT_EQUALS- La valeur ne doit pas être égale au nombre spécifié

  • GREATER_THAN- La valeur doit être supérieure au nombre spécifié

  • GREATER_THAN_EQUALS- La valeur doit être supérieure ou égale au nombre spécifié

  • LESS_THAN- La valeur doit être inférieure au nombre spécifié

  • LESS_THAN_EQUALS- La valeur doit être inférieure ou égale au nombre spécifié

  • IN_RANGE- La valeur doit être comprise dans la plage spécifiée (inclus)

  • NOT_IN_RANGE- La valeur doit être en dehors de la plage spécifiée (inclus)

  • IN_SET- La valeur doit correspondre à l'un des nombres spécifiés

  • NOT_IN_SET- La valeur ne doit correspondre à aucun des nombres spécifiés

Type de chaîne (STRING)
  • EQUALS- La valeur doit être égale à la chaîne spécifiée

  • NOT_EQUALS- La valeur ne doit pas être égale à la chaîne spécifiée

  • IN_SET- La valeur doit correspondre à l'une des chaînes spécifiées

  • NOT_IN_SET- La valeur ne doit correspondre à aucune des chaînes spécifiées

Type booléen
  • Les conditions de valeur ne sont pas prises en charge

Type binaire
  • Les conditions de valeur ne sont pas prises en charge

Exemple : commande de contrôle de température

{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }

Dans cet exemple, le temperature paramètre doit être compris entre 60 et 80 (inclus). Les demandes d'exécution dont les valeurs se situent en dehors de cette plage échouent à la validation.

Note

Les conditions de valeur sont évaluées lors de l'appel de l'StartCommandExecution API. Les validations échouées renvoient une erreur et empêchent la création de l'exécution.

Priorité et évaluation des valeurs des paramètres

Lorsque vous lancez des exécutions de commandes avec des modèles de charge utile, les valeurs des paramètres sont résolues selon la priorité suivante :

  1. Paramètres de la demande d'exécution - Les valeurs fournies dans la StartCommandExecution demande ont la priorité la plus élevée

  2. Valeurs par défaut des commandes - Si aucun paramètre n'est fourni dans la demande d'exécution, c'est celui du paramètre qui defaultValue est utilisé

  3. Aucune valeur - Si aucune valeur n'est fournie, l'exécution échoue en tant que paramètre requis pour générer la demande d'exécution

Les conditions de valeur sont évaluées sur la base de la valeur finale du paramètre dérivée ci-dessus sur la priorité et avant la création de l'exécution. Si la validation échoue, la demande d'exécution renvoie une erreur.

Exemple : SetTemperature commande avec defaultValue

{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }

Au début de l'exécution :

  • Si vous le fournissez "temperature": {"I": 75} dans la demande, 75 est utilisé

  • Si vous omettez le paramètre de température, la valeur par défaut 72 est utilisée

  • Les deux valeurs sont validées par rapport à la condition de plage [60,80]

États de commande

Les commandes que vous Compte AWS contiennent peuvent être dans l'un des trois états suivants : Disponible, Obsolète ou En attente de suppression.

Disponible

Une fois la création réussie, une commande passe à l'état Disponible et peut être exécutée sur les appareils.

Obsolète

Marquez les commandes comme obsolètes lorsqu'elles ne sont plus nécessaires. Les commandes obsolètes ne peuvent pas démarrer de nouvelles exécutions, mais les exécutions en attente se poursuivent jusqu'à leur fin. Pour activer de nouvelles exécutions, restaurez l'état Disponible de la commande.

Suppression en attente

Lorsque vous marquez une commande pour suppression, elle est automatiquement supprimée si elle est obsolète au-delà du délai maximum (par défaut : 12 heures). Cette action est permanente. Si elle n'est pas déconseillée ou déconseillée pendant une durée inférieure au délai imparti, la commande passe à l'état En attente de suppression et est supprimée une fois le délai expiré.

Statut d’exécution de la commande

Lorsque vous lancez une exécution sur une machine cible, celle-ci entre dans un CREATED état et peut passer à d'autres statuts en fonction des rapports de l'appareil. Vous pouvez récupérer les informations d'état et suivre les exécutions.

Note

Vous pouvez exécuter plusieurs commandes simultanément sur un appareil. Utilisez le contrôle de simultanéité pour limiter les exécutions par appareil et éviter les surcharges. Pour connaître le nombre maximal d'exécutions simultanées par appareil, voir AWS IoT Device Management les quotas de commandes.

Le tableau suivant indique les états d'exécution et leurs transitions en fonction de la progression de l'exécution.

État et source de l'exécution des commandes
Statut d’exécution de la commande Initié par un appareil/le cloud ? Exécution du terminal ? Transitions de statut autorisées
CREATED Cloud Non
  • EN_COURS

  • RÉUSSI

  • ÉCHEC

  • REFUSÉE

  • TIMED_OUT

IN_PROGRESS Appareil Non
  • EN_COURS

  • RÉUSSI

  • ÉCHEC

  • REFUSÉE

  • TIMED_OUT

TIMED_OUT Appareil et cloud Non
  • RÉUSSI

  • ÉCHEC

  • REFUSÉE

  • TIMED_OUT

SUCCEEDED Appareil Oui Non applicable
FAILED Appareil Oui Non applicable
REJECTED Appareil Oui Non applicable

Les appareils peuvent publier des mises à jour de statut et de résultats à tout moment à l'aide de commandes réservées aux sujets MQTT. Pour fournir un contexte supplémentaire, les appareils peuvent utiliser reasonDescription les champs reasonCode et de l'statusReasonobjet.

Le schéma suivant montre les transitions entre les états d'exécution.

Image montrant comment l'état d'exécution d'une commande passe d'un statut à un autre.
Note

Lorsqu'aucune réponse de l'appareil n'est AWS IoT détectée dans le délai imparti, il est défini TIMED_OUT comme un statut temporaire autorisant les nouvelles tentatives et les changements d'état. Si votre appareil le signale explicitementTIMED_OUT, cela devient un statut de terminal sans autre transition. Pour de plus amples informations, veuillez consulter Exécutions de commandes non terminales.

Les sections suivantes décrivent les exécutions terminales et non terminales ainsi que leurs statuts.

Exécutions de commandes non terminales

Une exécution n'est pas terminale si elle peut accepter les mises à jour des appareils. Les exécutions non terminales sont considérées comme actives. Les statuts suivants ne sont pas terminaux :

  • CRÉÉ

    Lorsque vous lancez une exécution depuis la AWS IoT console ou que vous utilisez l'StartCommandExecutionAPI, les demandes réussies changent le statut enCREATED. À partir de ce statut, les exécutions peuvent passer à n'importe quel autre statut non terminal ou terminal.

  • EN_COURS

    Après avoir reçu la charge utile, les appareils peuvent commencer à exécuter des instructions et à effectuer des actions spécifiées. Pendant l'exécution, les appareils peuvent publier des réponses à la rubrique de réponse des commandes et mettre à jour l'état surIN_PROGRESS. À partir deIN_PROGRESS, les exécutions peuvent passer à n'importe quel statut terminal ou non terminal, à l'exception CREATED de.

    Note

    L'UpdateCommandExecutionAPI peut être invoquée plusieurs fois avec un IN_PROGRESS statut. Spécifiez des détails d'exécution supplémentaires à l'aide de statusReason l'objet.

  • TIMED_OUT

    Le cloud et l'appareil peuvent déclencher cet état. Les exécutions CREATED ou IN_PROGRESS le statut peuvent changer TIMED_OUT pour les raisons suivantes :

    • Après avoir envoyé la commande, une minuterie démarre. Si l'appareil ne répond pas dans le délai spécifié, le cloud passe àTIMED_OUT. Dans ce cas, l'exécution n'est pas terminale.

    • L'appareil peut remplacer le statut par n'importe quel état du terminal ou signaler un délai d'expiration et régler le statut sur. TIMED_OUT Dans ce cas, le statut est conservéTIMED_OUT, mais les champs StatusReason d'objet changent en fonction des informations de l'appareil. L'exécution devient terminale.

    Pour de plus amples informations, veuillez consulter Valeur du délai d'expiration et statut TIMED_OUT d'exécution.

Exécutions des commandes du terminal

Une exécution devient un terminal lorsqu'elle n'accepte plus les mises à jour des appareils. Les statuts suivants sont terminaux. Les exécutions peuvent passer aux statuts de terminal à partir de n'importe quel statut non terminal :CREATED,IN_PROGRESS, ou. TIMED_OUT

  • RÉUSSI

    Si l'appareil termine l'exécution avec succès, il peut publier une réponse à la rubrique de réponse des commandes et mettre à jour l'état surSUCCEEDED.

  • ÉCHEC

    Lorsqu'un appareil ne parvient pas à terminer l'exécution, il peut publier une réponse à la rubrique de réponse des commandes et mettre à jour l'état surFAILED. Utilisez les reasonDescription champs reasonCode et de l'statusReasonobjet, ou CloudWatch des journaux, pour résoudre les problèmes.

  • REFUSÉE

    Lorsqu'un appareil reçoit une demande non valide ou incompatible, il peut appeler l'UpdateCommandExecutionAPI avec statutREJECTED. Utilisez les reasonDescription champs reasonCode et de l'statusReasonobjet, ou CloudWatch des journaux, pour résoudre les problèmes.