React para Hub IoT eventos usando a Grade de Eventos para desencadear ações

O Hub IoT do Azure integra-se no Azure Event Grid para que possa enviar notificações de eventos para outros serviços e acionar processos a jusante. Configure as aplicações empresariais para escutar eventos do Hub IoT para que possa reagir a eventos críticos de forma fiável, dimensionável e segura. Por exemplo, crie uma aplicação que atualiza uma base de dados, cria um pedido de trabalho e envia uma notificação por e-mail sempre que um novo dispositivo IoT é registado no hub IoT.

Azure Event Grid é um serviço de encaminhamento de eventos totalmente gerido que utiliza um modelo de subscrição de publicação. A Event Grid tem suporte integrado para serviços Azure, como Funções do Azure e Azure Logic Apps, e pode fornecer alertas de eventos para serviços não-Azure usando webhooks. Para obter uma lista completa dos manipuladores de eventos que a Grade de Eventos suporta, consulte uma introdução à Azure Event Grid.

Para ver um vídeo a discutir esta integração, veja Hub IoT do Azure integração com Azure Event Grid.

arquitetura Azure Event Grid

Disponibilidade regional

A integração do Event Grid está disponível para hubs IoT localizados nas regiões onde o Event Grid é suportado. Para a mais recente lista de regiões, consulte produtos disponíveis por região.

Tipos de evento

Hub IoT publica os seguintes tipos de eventos:

Tipo de evento Descrição
Microsoft.Devices.DeviceCreated Publicado quando um dispositivo está registado num hub IoT.
Microsoft.Devices.DeviceDeleted Publicado quando um dispositivo é eliminado de um hub IoT.
Microsoft.Devices.DeviceConnected Publicado quando um dispositivo está ligado a um hub IoT.
Microsoft.Devices.DeviceDisconnected Publicado quando um dispositivo é desligado de um hub IoT.
Microsoft.Devices.DeviceTelemetry Publicado quando uma mensagem de telemetria do dispositivo é enviada para um hub IoT

Utilize o portal do Azure ou o Azure CLI para configurar quais os eventos a publicar a partir de cada hub IoT. Por exemplo, experimente o tutorial Enviar por email o artigo Notificações de email sobre Hub IoT do Azure eventos utilizando As Aplicações Lógicas.

Esquema de eventos

Hub IoT eventos contêm toda a informação necessária para responder às alterações no ciclo de vida do seu dispositivo. Pode identificar um evento do Hub IoT ao verificar se a propriedade eventType começa com Microsoft.Devices. Para obter mais informações sobre como utilizar as propriedades do evento Event Grid, consulte o esquema de eventos da Grade de Eventos.

Esquema ligado ao dispositivo

O exemplo a seguir mostra o esquema de um evento ligado ao dispositivo:

[{  
  "id": "f6bbf8f4-d365-520d-a878-17bf7238abd8",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceConnected",
  "eventTime": "2018-06-02T19:17:44.4383997Z",
  "data": {
      "deviceConnectionStateEventInfo": {
        "sequenceNumber":
          "000000000000000001D4132452F67CE200000002000000000000000000000001"
      },
    "hubName": "egtesthub1",
    "deviceId": "LogicAppTestDevice",
    "moduleId" : "DeviceModuleID",
  }, 
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Esquema de telemetria do dispositivo

As mensagens de telemetria do dispositivo devem estar num formato JSON válido com o conteúdo Definido para aplicação/json e conteúdoEncoding definido para UTF-8 nas propriedades do sistema de mensagem. Ambas as propriedades são insensíveis. Se a codificação de conteúdo não estiver definida, Hub IoT escreverá as mensagens no formato codificado base 64.

Pode enriquecer eventos de telemetria do dispositivo antes de serem publicados na Grade de Eventos selecionando o ponto final como Grade de Evento. Para mais informações, por favor leia as informações sobre o assunto.

O exemplo a seguir mostra o esquema de um evento de telemetria do dispositivo:

[{  
  "id": "9af86784-8d40-fe2g-8b2a-bab65e106785",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceTelemetry",
  "eventTime": "2019-01-07T20:58:30.48Z",
  "data": {
      "body": {
          "Weather": {
              "Temperature": 900
            },
            "Location": "USA"
        },
        "properties": {
            "Status": "Active"
        },
        "systemProperties": {
          "iothub-content-type": "application/json",
          "iothub-content-encoding": "utf-8",
          "iothub-connection-device-id": "d1",
          "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
          "iothub-connection-auth-generation-id": "123455432199234570",
          "iothub-enqueuedtime": "2019-01-07T20:58:30.48Z",
          "iothub-message-source": "Telemetry"
        }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

Esquema criado por dispositivo

O exemplo a seguir mostra o esquema de um dispositivo criado:

[{
  "id": "56afc886-767b-d359-d59e-0da7877166b2",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceCreated",
  "eventTime": "2018-01-02T19:17:44.4383997Z",
  "data": {
    "twin": {
      "deviceId": "LogicAppTestDevice",
      "etag": "AAAAAAAAAAE=",
      "deviceEtag":"null",
      "status": "enabled",
      "statusUpdateTime": "0001-01-01T00:00:00",
      "connectionState": "Disconnected",
      "lastActivityTime": "0001-01-01T00:00:00",
      "cloudToDeviceMessageCount": 0,
      "authenticationType": "sas",
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      },
      "version": 2,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2018-01-02T19:17:44.4383997Z"
          },
          "$version": 1
        },
        "reported": {
          "$metadata": {
            "$lastUpdated": "2018-01-02T19:17:44.4383997Z"
          },
          "$version": 1
        }
      }
    },
    "hubName": "egtesthub1",
    "deviceId": "LogicAppTestDevice"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Aviso

Os dados gémeos associados a um evento de criação de dispositivos são uma configuração padrão e não devem ser invocados para propriedades reais authenticationType e outras do dispositivo num dispositivo recém-criado. Para authenticationType e outras propriedades do dispositivo num dispositivo recém-criado, utilize o gestor de registoS API fornecido nos SDKs Azure IoT.

Para obter uma descrição detalhada de cada propriedade, consulte Azure Event Grid esquema de eventos para Hub IoT.

Filtrar eventos

A Grelha de Eventos permite a filtragem em tipos de eventos, sujeitos e conteúdos de dados. Ao criar a subscrição da Grade de Eventos, pode optar por subscrever eventos IoT selecionados.

  • Tipo de evento: Para a lista de Hub IoT tipos de eventos, consulte os tipos de eventos.
  • Objeto: Para Hub IoT eventos, o sujeito é o nome do dispositivo. O sujeito toma o formato devices/{deviceId}. Pode filtrar os sujeitos com base em partidas (prefixo) e termina com fósforos (sufixo). O filtro utiliza um AND operador, pelo que os eventos com um sujeito que correspondam tanto ao prefixo como ao sufixo são entregues ao assinante.
  • Conteúdo de dados: O conteúdo dos dados é preenchido por Hub IoT utilizando o formato de mensagem. Pode escolher quais os eventos que são entregues com base no conteúdo da mensagem de telemetria. Por exemplo, consulte a filtragem avançada. Para filtrar o corpo da mensagem de telemetria, deve definir o conteúdoType para aplicação/json e conteúdoEncoding para UTF-8 nas propriedades do sistema de mensagem. Ambas as propriedades são insensíveis.

Limitações dos eventos de dispositivos ligados e desligados

Eventos do estado do dispositivo

Os eventos estatais de ligação do dispositivo estão disponíveis para dispositivos que se ligam utilizando o protocolo MQTT ou AMQP, ou utilizando qualquer um destes protocolos através de WebSockets. Os pedidos feitos apenas com HTTPS não despoletam notificações do estado de ligação do dispositivo.

  • Para os dispositivos que se ligam utilizando Java, Node ou Python SDKs Azure IoT com o protocolo MQTT terão estados de ligação enviados automaticamente.
  • Para dispositivos que se ligam utilizando os SDKs Java, Node ou Python Azure IoT com o protocolo AMQP, deve ser criada uma ligação nuvem-dispositivo para reduzir qualquer atraso em estados de ligação precisos.
  • Para dispositivos que se conectem utilizando o .NET Azure IoT SDK com o protocolo MQTT ou AMQP não enviarão um evento ligado ao dispositivo até que uma mensagem inicial de dispositivo para nuvem ou nuvem-para-dispositivo seja enviada/recebida.
  • Fora dos Azure IoT SDKs, em MQTT estas operações equivalem a operações de SUBSS ou PUBLICAÇÕES sobre os tópicos de mensagens apropriados. Ao longo da AMQP estes equivalem a anexar ou transferir uma mensagem nos caminhos de ligação apropriados.

Intervalo de estado do dispositivo

Hub IoT não reporta cada ação de ligação e desconexão de cada dispositivo, mas publica o estado de ligação atual tomado com um instantâneo periódico de 60 segundos. Receber o mesmo evento de estado de ligação com diferentes números de sequência ou diferentes eventos estatais de ligação significa que houve uma alteração no estado de ligação do dispositivo durante a janela de 60 segundos. imagem

Sugestões para consumir eventos

As aplicações que processam eventos do Hub IoT devem seguir estas práticas sugeridas:

  • Várias subscrições podem ser configuradas para direcionar eventos para o mesmo processador de eventos, por isso, não parta do princípio de que os eventos são de determinada origem. Verifique sempre o tópico da mensagem para garantir que é proveniente do hub IoT esperado.
  • Não assuma que todos os eventos que recebe são dos tipos esperados. Verifique sempre o eventType antes de processar a mensagem.
  • As mensagens podem chegar desordenadas ou após um atraso. Utilize o campo etag para perceber se as suas informações sobre objetos estão atualizadas para eventos criados ou eliminados pelo dispositivo.

Passos seguintes