Como criar um modelo de detector - AWS IoT Events

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á.

Como criar um modelo de detector

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_1 no espaço de edição principal.

  2. No painel Estado, insira o nome do estado e OnEnterescolha Adicionar evento.

  3. 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.

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

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

    1. Selecione Definir variável

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

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

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

  6. 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.

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

  8. 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.

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

  10. 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.

  11. 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.

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

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

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

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

    2. Em Nome da variável, insira o nome da variável.

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

    4. Escolha Salvar.

  15. Selecione o segundo estado untitled_state_1.

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

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

  18. 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.

    2. Escolha Salvar.

  19. 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
    2. 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
    3. 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
  20. Pausa no segundo estado (Perigoso). Uma seta aparece na circunferência do estado

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

  22. 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 Restrições e limitações do modelo de detector.

  23. 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).

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

  25. 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ê.

    2. 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 e insira-a como a Função aqui.

  26. 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.

  27. 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" } } }