

Avis de fin de support : le 20 mai 2026, AWS le support de AWS IoT Events. Après le 20 mai 2026, vous ne pourrez plus accéder à la AWS IoT Events console ni aux AWS IoT Events ressources. Pour plus d'informations, consultez [AWS IoT Events la fin du support](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

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.

# Créez un modèle de détecteur dans AWS IoT Events
<a name="iotevents-detector-model"></a>

Dans cette rubrique, vous allez définir un *modèle de détecteur* (un modèle de votre équipement ou de votre processus) à l'aide *des états*.

Pour chaque état, vous définissez une logique conditionnelle (booléenne) qui évalue les entrées entrantes afin de détecter un événement significatif. Lorsqu'un événement est détecté, il change d'état et peut lancer des actions supplémentaires. Ces événements sont appelés événements de transition.

Dans vos états, vous définissez également des événements qui peuvent exécuter des actions chaque fois que le détecteur entre ou sort de cet état ou lorsqu'une entrée est reçue (ces événements sont appelés `OnEnter` `OnInput` événements `OnExit` et). Les actions ne sont exécutées que si la logique conditionnelle de l'événement est évaluée à`true`.

**Pour créer un modèle de détecteur**

1. Le premier état du détecteur a été créé pour vous. Pour le modifier, sélectionnez le cercle avec le libellé **State\$11** dans l'espace d'édition principal.

1. Dans le volet **État**, entrez le **nom de l'État** et **OnEnter**choisissez **Ajouter un événement**. 

1. Sur la page **Ajouter un OnEnter événement**, entrez le **nom de l'événement** et la **condition de l'événement**. Dans cet exemple, entrez `true` pour indiquer que l'événement est toujours initié lorsque l'état est saisi. 

1. Sous **Actions liées aux événements**, choisissez **Ajouter une action**.

1. Sous **Actions liées aux événements**, procédez comme suit :

   1. Sélectionnez **Définir une variable**

   1.  Pour **Fonctionnement variable**, choisissez **Affecter une valeur**.

   1. Dans **Nom de la variable**, entrez le nom de la variable à définir.

   1. Pour **Valeur variable**, entrez la valeur **0** (zéro).

1. Choisissez **Enregistrer**. 

   Une variable, comme celle que vous avez définie, peut être définie (avec une valeur) dans tous les cas dans le modèle de détecteur. La valeur de la variable ne peut être référencée (par exemple, dans la logique conditionnelle d'un événement) qu'une fois que le détecteur a atteint un état et a exécuté une action dans laquelle elle est définie ou définie.

1. Dans le volet **État**, cliquez sur le **X** à côté de **State** pour revenir à la **palette du modèle de détecteur**.

1. Pour créer un deuxième état de détecteur, dans la **palette du modèle de détecteur**, choisissez **State** et faites-le glisser dans l'espace d'édition principal. Cela crée un état intitulé`untitled_state_1`.

1. Faites une pause sur le premier état (**Normal**). Une flèche apparaît sur le pourtour de l'État.

1. Cliquez et faites glisser la flèche du premier état au second état. Une ligne dirigée entre le premier état et le second état (**intitulée Sans titre**) apparaît.

1. Sélectionnez la ligne **Sans titre**. Dans le volet des **événements de transition**, entrez un **nom d'événement** et une **logique de déclenchement d'événement**.

1. Dans le volet des **événements de transition**, choisissez **Ajouter une action**.

1. Dans le volet **Ajouter des actions relatives à un événement de transition**, choisissez **Ajouter une action**. 

1.  Pour **Choisir une action**, choisissez **Définir une variable**. 

   1. Pour **Fonctionnement variable**, choisissez **Affecter une valeur**.

   1. Dans **Nom de la variable**, entrez le nom de la variable.

   1. Pour **Attribuer une valeur**, entrez une valeur telle que : `$variable.pressureThresholdBreached + 3`

   1. Choisissez **Enregistrer**.

1. Sélectionnez le deuxième état **untitled\$1state\$11**.

1. Dans le volet **État**, entrez le **nom de l'État** et pour **En entrée**, choisissez **Ajouter un événement**.

1. Sur la page **Ajouter OnEnter un événement**, entrez le **nom de l'événement** et la **condition de l'événement**. Choisissez **Add action**.

1. Pour **Choisir une action**, choisissez **Envoyer un message SNS**.

   1. Pour la **rubrique SNS**, entrez l'ARN cible de votre rubrique Amazon SNS.

   1. Choisissez **Enregistrer**.

1. Continuez à ajouter les événements dans l'exemple.

   1. Pour **OnInput**, choisissez **Ajouter un événement**, puis entrez et enregistrez les informations d'événement suivantes.

      ```
        Event name: Overpressurized
        Event condition: $input.PressureInput.sensorData.pressure > 70
        Event actions:
          Set variable:
            Variable operation: Assign value
            Variable name: pressureThresholdBreached
            Assign value: 3
      ```

   1. Pour **OnInput**, choisissez **Ajouter un événement**, puis entrez et enregistrez les informations d'événement suivantes.

      ```
        Event name: Pressure Okay
        Event condition: $input.PressureInput.sensorData.pressure <= 70
        Event actions:
          Set variable:
            Variable operation: Decrement
            Variable name: pressureThresholdBreached
      ```

   1. Pour **OnExit**, choisissez **Ajouter un événement**, puis entrez et enregistrez les informations d'événement suivantes à l'aide de l'ARN de la rubrique Amazon SNS que vous avez créée.

      ```
        Event name: Normal Pressure Restored
        Event condition: true
        Event actions:
          Send SNS message: 
            Target arn: arn:aws:sns:us-east-1:123456789012:pressureClearedAction
      ```

1. Pause sur le deuxième état (**Dangereux**``). Une flèche apparaît sur le pourtour de l'État

1. Cliquez et faites glisser la flèche du deuxième état au premier état. Une ligne dirigée avec le libellé **Sans titre** apparaît.

1. Choisissez la ligne **Sans titre** et dans le volet des **événements de transition**, entrez un **nom d'événement** et une **logique de déclenchement d'événement** à l'aide des informations suivantes.

   ```
   {
     Event name: BackToNormal
     Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0
   }
   ```

   Pour plus d'informations sur les raisons pour lesquelles nous testons la `$input` valeur et la `$variable` valeur dans la logique de déclenchement, consultez l'entrée relative à la disponibilité des valeurs des variables dans[AWS IoT Events restrictions et limites du modèle de détecteur](iotevents-restrictions-detector-model.md).

1. Sélectionnez l'état de **départ**. Par défaut, cet état a été créé lorsque vous avez créé un modèle de détecteur). Dans le volet **Démarrer**, choisissez l'**état de destination** (par exemple, **Normal**).

1. Configurez ensuite le modèle de votre détecteur pour qu'il écoute les entrées. **Dans le coin supérieur droit, choisissez Publier.**

1. Sur la page du **modèle de détecteur de publication**, procédez comme suit.

   1.  Entrez un **nom de modèle de détecteur**, une **description** et le nom d'un **rôle**. Ce rôle a été créé pour vous.

   1. Choisissez **Créer un détecteur pour chaque valeur de clé unique**. Pour créer et utiliser votre propre **rôle**, suivez les étapes décrites [Configuration des autorisations pour AWS IoT Events](iotevents-permissions.md) et saisissez-le comme **rôle** ici.

1. Pour **la clé de création du détecteur**, choisissez le nom de l'un des attributs de l'entrée que vous avez définie précédemment. L'attribut que vous choisissez comme clé de création du détecteur doit être présent dans chaque message saisi et doit être unique pour chaque appareil qui envoie des messages. Cet exemple utilise l'attribut **motorid.**

1. Choisissez **Enregistrer et publier**.

**Note**  
Le nombre de détecteurs uniques créés pour un modèle de détecteur donné est basé sur les messages d'entrée envoyés. Lorsqu'un modèle de détecteur est créé, une clé est sélectionnée parmi les attributs d'entrée. Cette clé détermine l'instance de détecteur à utiliser. Si la clé n'a jamais été vue auparavant (pour ce modèle de détecteur), une nouvelle instance de détecteur est créée. Si la clé a déjà été vue, nous utilisons l'instance de détecteur existante correspondant à cette valeur de clé.

Vous pouvez créer une copie de sauvegarde de la définition de votre modèle de détecteur (au format JSON), recréer ou mettre à jour le modèle de détecteur ou l'utiliser comme modèle pour créer un autre modèle de détecteur.

Vous pouvez le faire depuis la console ou à l'aide de la commande CLI suivante. Si nécessaire, modifiez le nom du modèle de détecteur pour qu'il corresponde à celui que vous avez utilisé lors de sa publication à l'étape précédente.

```
aws iotevents describe-detector-model  --detector-model-name motorDetectorModel > motorDetectorModel.json 
```

Cela crée un fichier (`motorDetectorModel.json`) dont le contenu est similaire au suivant.

```
{
    "detectorModel": {
        "detectorModelConfiguration": {
            "status": "ACTIVE", 
            "lastUpdateTime": 1552072424.212, 
            "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole", 
            "creationTime": 1552072424.212, 
            "detectorModelArn": "arn:aws:iotevents:us-west-2:123456789012:detectorModel/motorDetectorModel", 
            "key": "motorid", 
            "detectorModelName": "motorDetectorModel", 
            "detectorModelVersion": "1"
        }, 
        "detectorModelDefinition": {
            "states": [
                {
                    "onInput": {
                        "transitionEvents": [
                            {
                                "eventName": "Overpressurized", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "$variable.pressureThresholdBreached + 3"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure > 70", 
                                "nextState": "Dangerous"
                            }
                        ], 
                        "events": []
                    }, 
                    "stateName": "Normal", 
                    "onEnter": {
                        "events": [
                            {
                                "eventName": "init", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "0"
                                        }
                                    }
                                ], 
                                "condition": "true"
                            }
                        ]
                    }, 
                    "onExit": {
                        "events": []
                    }
                }, 
                {
                    "onInput": {
                        "transitionEvents": [
                            {
                                "eventName": "Back to Normal", 
                                "actions": [], 
                                "condition": "$variable.pressureThresholdBreached <= 1 && $input.PressureInput.sensorData.pressure <= 70", 
                                "nextState": "Normal"
                            }
                        ], 
                        "events": [
                            {
                                "eventName": "Overpressurized", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "3"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure > 70"
                            }, 
                            {
                                "eventName": "Pressure Okay", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "$variable.pressureThresholdBreached - 1"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure <= 70"
                            }
                        ]
                    }, 
                    "stateName": "Dangerous", 
                    "onEnter": {
                        "events": [
                            {
                                "eventName": "Pressure Threshold Breached", 
                                "actions": [
                                    {
                                        "sns": {
                                            "targetArn": "arn:aws:sns:us-west-2:123456789012:MyIoTButtonSNSTopic"
                                        }
                                    }
                                ], 
                                "condition": "$variable.pressureThresholdBreached > 1"
                            }
                        ]
                    }, 
                    "onExit": {
                        "events": [
                            {
                                "eventName": "Normal Pressure Restored", 
                                "actions": [
                                    {
                                        "sns": {
                                            "targetArn": "arn:aws:sns:us-west-2:123456789012:IoTVirtualButtonTopic"
                                        }
                                    }
                                ], 
                                "condition": "true"
                            }
                        ]
                    }
                }
            ], 
            "initialStateName": "Normal"
        }
    }
}
```