

Aviso de fin de soporte: el 20 de mayo de 2026, AWS finalizará el soporte para AWS IoT Events. Después del 20 de mayo de 2026, ya no podrás acceder a la AWS IoT Events consola ni a AWS IoT Events los recursos. Para obtener más información, consulta [AWS IoT Events el fin del soporte](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Cree un modelo de detector en AWS IoT Events
<a name="iotevents-detector-model"></a>

En este tema, define un *modelo de detector* (un modelo de su equipo o proceso) utilizando *estados*.

Para cada estado, debe definir una lógica condicional (booleana) que evalúe las entradas para detectar un evento significativo. Al detectar un evento, este cambia el estado y puede iniciar acciones adicionales. Estos eventos se conocen como eventos de transición.

En sus estados, también define eventos que pueden ejecutar acciones cada vez que el detector entra o sale de ese estado o cuando se recibe una entrada (se conocen como eventos `OnEnter`, `OnExit` y `OnInput`). Las acciones se ejecutan solo si la lógica condicional del evento da como resultado `true`.

**Para crear un modelo de detector**

1. Se ha creado el primer estado del detector para usted. Para modificarlo, seleccione el círculo con la etiqueta **State\$11** en el espacio de edición principal.

1. En el panel **Estado**, introduzca el **nombre del estado** y **OnEnter**elija **Añadir evento**. 

1. En la página **Añadir OnEnter evento**, introduzca el **nombre del evento** y la **condición del evento**. En este ejemplo, introduzca `true` para indicar que el evento siempre se inicia al introducir el estado. 

1. En **Acciones del evento**, seleccione **Añadir acción**.

1. En **Acciones del evento**, realice lo siguiente:

   1. Seleccione **Establecer variable**

   1.  En **Operación de la variable**, seleccione **Asignar valor**.

   1. En **Nombre de la variable**, introduzca el nombre de la variable que va a establecer.

   1. En **Valor de la variable**, introduzca el valor **0** (cero).

1. Seleccione **Save**. 

   Una variable, como la que ha definido, se puede establecer (darle un valor) en cualquier evento del modelo de detector. Solo se puede hacer referencia al valor de la variable (por ejemplo, en la lógica condicional de un evento) después de que el detector haya alcanzado un estado y ejecutado una acción donde esté definido o establecido.

1. En el panel **Estado**, seleccione la **X** situada junto a **Estado** para volver a la **Paleta de modelos de detectores**.

1. Para crear un segundo estado de detector, en la **Paleta de modelos de detectores**, seleccione **Estado** y arrástrelo al espacio de edición principal. Esto crea un estado titulado `untitled_state_1`.

1. Haga una pausa en el primer estado (**Normal**). Aparece una flecha en la circunferencia de estado.

1. Pulse y arrastre la flecha del primer estado al segundo estado. Aparece una línea dirigida del primer estado al segundo estado (denominada **Sin título**).

1. Seleccione la línea **Sin título**. En el panel **Evento de transición**, introduzca el **Nombre del evento** y una **Lógica de activación del evento**.

1. En el panel **Evento de transición**, seleccione **Añadir acción**.

1. En el panel **Añadir acciones de evento de transición**, seleccione **Añadir acción**. 

1.  En **Elegir una acción**, seleccione **Establecer variable**. 

   1. En **Operación de la variable**, seleccione **Asignar valor**.

   1. En **Nombre de la variable**, introduzca el nombre de la variable.

   1. En **Asignar valor**, escriba el valor, como `$variable.pressureThresholdBreached + 3`:

   1. Seleccione **Save**.

1. Seleccione el segundo estado **untitled\$1state\$11**.

1. En el panel **Estado**, introduzca el **Nombre del estado** y en **OnEnter**, seleccione **Añadir evento**.

1. En la página **Añadir OnEnter evento**, introduzca el **nombre del evento** y la **condición del evento**. Seleccione **Agregar acción**.

1. En **Seleccionar una acción**, seleccione **Enviar mensaje SNS**.

   1. En **Tema de SNS**, introduzca el ARN objetivo de su tema de Amazon SNS.

   1. Seleccione **Save**.

1. Siga añadiendo los eventos indicados en el ejemplo.

   1. Para **OnInput**, elija **Agregar evento** e introduzca y guarde la siguiente información del evento.

      ```
        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. Para **OnInput**, elija **Agregar evento** e introduzca y guarde la siguiente información del evento.

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

   1. Para **OnExit**, elija **Añadir evento** e introduzca y guarde la siguiente información del evento con el ARN del tema de Amazon SNS que ha creado.

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

1. Haga una pausa en el segundo estado (**Peligroso**``). Aparece una flecha en la circunferencia del estado

1. Pulse y arrastre la flecha del segundo estado al primer estado. Aparece una línea dirigida con la etiqueta **Sin título**.

1. Seleccione la línea **Sin título** y en el panel **Evento de transición**, introduzca el **Nombre del evento** y la **Lógica de activación del evento** utilizando la siguiente información.

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

   Para obtener más información sobre por qué probamos el valor `$input` y el valor `$variable` en la lógica de activación, consulte en la entrada la disponibilidad de los valores de las variables en [AWS IoT Events restricciones y limitaciones del modelo de detector](iotevents-restrictions-detector-model.md).

1. Seleccione el estado **Inicio**. Por defecto, este estado se generó cuando creó un modelo de detector). En el panel **Inicio**, seleccione el **Estado de destino** (por ejemplo, **Normal**).

1. A continuación, configure su modelo de detector para que escuche las entradas. En la esquina superior derecha, seleccione **Publicar**.

1. En la página **Publicar modelo de detector**, haga lo siguiente.

   1.  Introduzca el **Nombre del modelo de detector**, una **Descripción** y el nombre de un **Rol**. Este rol se crea para usted.

   1. Seleccione **Crear un detector para cada valor clave único**. Para crear su propio **Rol** y utilizarlo, siga los pasos que se indican en [Configuración de permisos para AWS IoT Events](iotevents-permissions.md) e introdúzcalo como **Rol** aquí.

1. En **Clave de creación del detector**, elija el nombre de uno de los atributos de la entrada que definió anteriormente. El atributo que elija como clave de creación del detector debe estar presente en cada entrada de mensaje y debe ser único para cada dispositivo que envíe mensajes. En este ejemplo se utiliza el atributo **motorid**.

1. Seleccione **Guardar y publicar**.

**nota**  
El número de detectores únicos creados para un modelo de detector determinado se basa en los mensajes de entrada enviados. Cuando se crea un modelo de detector, se selecciona una clave a partir de los atributos de entrada. Esta clave determina qué instancia de detector se utilizará. Si la clave no se ha visto antes (para este modelo de detector), se crea una nueva instancia de detector. Si se ha visto antes, se utiliza la instancia de detector existente correspondiente a este valor clave.

Puede hacer una copia de seguridad de la definición de su modelo de detector (en JSON), recrear o actualizar el modelo de detector, o utilizarlo como plantilla para crear otro modelo de detector.

Puede hacerlo desde la consola o utilizando el siguiente comando CLI. De ser necesario, cambie el nombre del modelo de detector para que coincida con el que utilizó al publicarlo en el paso anterior.

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

Esto crea un archivo (`motorDetectorModel.json`) que tiene un contenido similar al siguiente.

```
{
    "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"
        }
    }
}
```