

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
<a name="iot-remote-command-concepts"></a>

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.

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

1. 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](iot-remote-command-workflow.md).

**Topics**
+ [Concepts clés des commandes](#iot-command-concepts)
+ [États de commande](#iot-command-states)
+ [Statut d’exécution de la commande](#iot-command-execution-status)

## Concepts clés des commandes
<a name="iot-command-concepts"></a>

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](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-commands.html) 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](mqtt.md) protocole utilisé pour connecter les appareils à AWS IoT. Pour en savoir plus, consultez [Considérations relatives à l'appareil cible](iot-remote-command-execution-start-monitor.md#iot-command-execution-target).

**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](reserved-topics.md#reserved-topics-commands).

**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
<a name="iot-command-parameter-value-conditions"></a>

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 [CommandParameterValue](https://docs.aws.amazon.com//iot/latest/apireference/API_CommandParameterValue.html)type**

**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](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartCommandExecution.html). 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
<a name="iot-command-parameter-value-priority"></a>

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

1. **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é

1. **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
<a name="iot-command-states"></a>

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
<a name="iot-command-execution-status"></a>

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](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#commands-limits).

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 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| IN\$1PROGRESS | Appareil | Non |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| TIMED\$1OUT | Appareil et cloud | Non |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| 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'`statusReason`objet.

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.\]](http://docs.aws.amazon.com/fr_fr/iot/latest/developerguide/images/command-execution-status-transitions.png)


**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 explicitement`TIMED_OUT`, cela devient un statut de terminal sans autre transition. Pour de plus amples informations, veuillez consulter [Exécutions de commandes non terminales](#iot-command-execution-status-nonterminal).

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

**Topics**
+ [Exécutions de commandes non terminales](#iot-command-execution-status-nonterminal)
+ [Exécutions des commandes du terminal](#iot-command-execution-status-terminal)

### Exécutions de commandes non terminales
<a name="iot-command-execution-status-nonterminal"></a>

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'`StartCommandExecution`API, les demandes réussies changent le statut en`CREATED`. À partir de ce statut, les exécutions peuvent passer à n'importe quel autre statut non terminal ou terminal.
+ 

**EN\$1COURS**  
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 sur`IN_PROGRESS`. À partir de`IN_PROGRESS`, les exécutions peuvent passer à n'importe quel statut terminal ou non terminal, à l'exception `CREATED` de.
**Note**  
L'`UpdateCommandExecution`API 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\$1OUT**  
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](iot-remote-command-execution-start-monitor.md#iot-command-execution-timeout-status).

### Exécutions des commandes du terminal
<a name="iot-command-execution-status-terminal"></a>

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 sur`SUCCEEDED`.
+ 

**É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 sur`FAILED`. Utilisez les `reasonDescription` champs `reasonCode` et de l'`statusReason`objet, 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'`UpdateCommandExecution`API avec statut`REJECTED`. Utilisez les `reasonDescription` champs `reasonCode` et de l'`statusReason`objet, ou CloudWatch des journaux, pour résoudre les problèmes.