

Aviso de fim do suporte: em 20 de maio de 2026, AWS encerrará o suporte para AWS IoT Events. Depois de 20 de maio de 2026, você não poderá mais acessar o AWS IoT Events console ou os AWS IoT Events recursos. Para obter mais informações, consulte [AWS IoT Events Fim do suporte](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Crie um modelo de detector em AWS IoT Events
<a name="iotevents-detector-model"></a>

Neste tópico, você define um *modelo de detector* (um modelo de seu equipamento ou processo) usando *estados*.

Para cada estado, você define a lógica condicional (booliana) que avalia as entradas recebidas para detectar um evento significativo. Quando um evento é detectado, ele muda o estado e pode iniciar ações adicionais. Esses eventos são conhecidos como eventos de transição.

Em seus estados, você também define eventos que podem executar ações sempre que o detector entra ou sai desse estado ou quando uma entrada é recebida (esses são conhecidos como eventos `OnEnter`, `OnExit`, e `OnInput`). As ações são executadas somente se a lógica condicional do evento for avaliada como `true`.

**Para criar um modelo de detector**

1. O primeiro estado do detector foi criado para você. Para modificá-lo, selecione o círculo com o rótulo **State\$11** no espaço de edição principal.

1. No painel **Estado**, insira o **nome do estado** e **OnEnter**escolha **Adicionar evento**. 

1. Na página **Adicionar OnEnter evento**, insira o **nome do evento** e a **condição do evento**. Neste exemplo, insira `true` para indicar que o evento sempre é iniciado quando o estado é inserido. 

1. Em **Ações do evento**, escolha **Adicionar ação**.

1. Em **Ações do evento**, faça o seguinte:

   1. Selecione **Definir variável**

   1.  Para **Operação variável**, escolha **Atribuir valor**.

   1. Para **Nome da variável**, insira o nome da variável a ser definida.

   1. Para **Valor da variável**, insira o valor **0** (zero).

1. Escolha **Salvar**. 

   Uma variável, como a que você definiu pode ser definida (com um valor) em qualquer evento no modelo do detector. O valor da variável só pode ser referenciado (por exemplo, na lógica condicional de um evento) depois que o detector atingir um estado e executar uma ação em que esteja definido ou definido.

1. No painel **Estado**, escolha o **X** ao lado de **Estado** para retornar à **paleta do Modelo de detector**.

1. Para criar um segundo estado do detector, na **paleta Modelo do detector**, escolha **Estado** e arraste-o para o espaço de edição principal. Isso cria um estado intitulado `untitled_state_1`.

1. Pausa no primeiro estado (**Normal**). Uma seta aparece na circunferência do estado.

1. Clique e arraste a seta do primeiro estado para o segundo estado. Uma linha direcionada do primeiro estado para o segundo estado (chamada **Sem título**) é exibida.

1. Selecione a linha **Sem título**. No painel **Eventos de transição**, insira o **Nome do evento** e a **Lógica do gatilho do evento**.

1. No painel **Evento de transição**, escolha **Adicionar ação**.

1. No painel **Adicionar ações do evento de transição**, escolha **Adicionar ação**. 

1.  Em **Escolher uma ação**, escolha **Definir variável**. 

   1. Para **Operação variável**, escolha **Atribuir valor**.

   1. Em **Nome da variável**, insira o nome da variável.

   1. Em **Atribuir valor**, insira o valor, como: `$variable.pressureThresholdBreached + 3`

   1. Escolha **Salvar**.

1. Selecione o segundo estado **untitled\$1state\$11**.

1. No painel **Estado**, insira o **Nome do estado** e para **em Entrar**, escolha **Adicionar evento**.

1. Na página **Adicionar OnEnter evento**, insira o **nome do evento** e a **condição do evento**. Selecione **Adicionar ação**.

1. Em **Escolher uma ação**, escolha **Enviar mensagem SNS**.

   1. Para **Tópico de SNS**, insira o ARN alvo do tópico do seu Amazon SNS.

   1. Escolha **Salvar**.

1. Continue adicionando os eventos no exemplo.

   1. Para **OnInput**, escolha **Adicionar evento** e insira e salve as seguintes informações do 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**, escolha **Adicionar evento** e insira e salve as seguintes informações do 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**, escolha **Adicionar evento** e insira e salve as seguintes informações do evento usando o ARN do tópico do Amazon SNS que você criou.

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

1. Pausa no segundo estado (**Perigoso**``). Uma seta aparece na circunferência do estado

1. Clique e arraste a seta do segundo estado para o primeiro estado. Uma linha direcionada com o rótulo **Sem título** é exibida.

1. Escolha a linha **Sem título** e, no painel **Evento de transição**, insira o **Nome do evento** e a **Lógica do gatilho do evento** usando as informações a seguir.

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

   Para obter mais informações sobre por que testamos o valor `$input` e o valor `$variable` na lógica de gatilho, consulte a entrada para disponibilidade de valores de variáveis em [AWS IoT Events restrições e limitações do modelo de detector](iotevents-restrictions-detector-model.md).

1. Selecione o estado **Iniciar**. Por padrão, esse estado foi criado quando você criou um modelo de detector. No painel **Iniciar**, escolha o **Estado destino** (por exemplo, **Normal**).

1. Em seguida, configure o seu modelo de detector para ouvir as entradas. Escolha **Publicar** no canto superior direito.

1. Na caixa de diálogo **Publicar modelo de detector**, faça o seguinte:

   1.  Insira o **Nome do modelo de detector**, uma **Descrição** e o nome de uma **Função**. Esta função foi criada para você.

   1. Escolha **Criar um detector para cada valor de chave exclusivo**. Para criar e usar sua própria **Função**, siga as etapas [Configurando permissões para AWS IoT Events](iotevents-permissions.md) e insira-a como a **Função** aqui.

1. Em **Chave de criação do detector**, escolha o nome de um dos atributos da entrada que você definiu anteriormente. O atributo que você escolhe como chave de criação do detector deve estar presente em cada entrada de mensagem e deve ser exclusivo para cada dispositivo que envia mensagens. Este exemplo usa o atributo **motorid**.

1. Escolha **Save and publish (Salvar e publicar)**.

**nota**  
O número de detectores exclusivos criados para um determinado modelo de detector é baseado nas mensagens de entrada enviadas. Quando um modelo de detector é criado, uma chave é selecionada a partir dos atributos de entrada. Essa chave determina qual instância do detector usar. Se a chave não tiver sido vista antes (para este modelo de detector), uma nova instância de detector será criada. Se a chave já foi vista antes, usamos a instância existente do detector correspondente a esse valor de chave.

É possível fazer uma cópia de backup da definição do modelo do detector (em JSON), recriar ou atualizar o modelo do detector ou usá-lo como modelo para criar outro modelo de detector.

Você pode fazer isso a partir do console ou usando o seguinte comando CLI. Se necessário, altere o nome do modelo do detector para corresponder ao que você usou ao publicá-lo na etapa anterior.

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

Isso cria um arquivo (`motorDetectorModel.json`) com conteúdo semelhante ao seguinte.

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