Tutorial: implementar análise espacial de IoT usando os Azure Mapas

Em um cenário de IoT, é comum capturar e acompanhar eventos relevantes que ocorrem no espaço e no tempo. Os exemplos incluem aplicativos de gerenciamento de frota, acompanhamento de ativos, mobilidade e cidade inteligente. Este tutorial guia você por uma solução que, usando as APIs dos Azure Mapas, acompanha a movimentação de aluguel de carros usados.

Neste tutorial, você vai:

  • Criar uma conta de armazenamento do Azure para registrar os dados de acompanhamento de carros.
  • Carregar uma cerca geográfica em uma conta de armazenamento do Azure.
  • Criar um hub no Hub IoT do Azure e registrar um dispositivo.
  • Crie uma função no Azure Functions implementando a lógica de negócios com base na análise espacial do Azure Mapas.
  • Assinar eventos de telemetria de dispositivo de IoT usando a função do Azure por meio da Grade de Eventos do Azure.
  • Filtrar os eventos de telemetria usando o roteamento de mensagens do Hub IoT.

Pré-requisitos

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Dica

Baixe todo o projeto C# rentalCarSimulation do GitHub como um só arquivo zip acessando a raiz da amostra e selecionando o botão verde <> Código e Baixar zip.

Este tutorial usa o aplicativo Postman, mas você pode escolher um ambiente de desenvolvimento de API diferente.

Importante

Nos exemplos de URL, substitua {Your-Azure-Maps-Subscription-key} por sua chave de assinatura do Azure Mapas.

Caso de uso: acompanhamento de carros de aluguel

Digamos que uma empresa de aluguel de carros deseja registrar informações de localização, distância viajada e estado de funcionamento dos próprios carros de aluguel. A empresa também deseja armazenar essas informações sempre que um carro deixa a região geográfica autorizada correta.

Os carros de aluguel são equipados com dispositivos IoT que enviam regularmente dados de telemetria ao Hub IoT. A telemetria inclui a localização atual e indica se o motor do carro está ligado. O esquema de localização do dispositivo adere ao esquema de Plug and Play para dados geoespaciais de IoT. O esquema de telemetria do dispositivo do carro alugado é semelhante ao seguinte código JSON:

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

Neste tutorial, apenas um veículo será rastreado. Depois de configurar os serviços do Azure, você precisa baixar o projeto C# rentalCarSimulation para executar o simulador de veículo. O processo inteiro, desde o evento até a execução da função, é resumido nas seguintes etapas:

  1. O dispositivo no veículo envia dados telemétricos ao Hub IoT.

  2. Se o motor do carro estiver funcionando, o hub publicará os dados de telemetria na Grade de Eventos.

  3. Uma função do Azure é disparada devido à respectiva assinatura de evento para eventos de telemetria do dispositivo.

  4. A função registra as coordenadas de localização do dispositivo do veículo, a hora do evento e a identificação do dispositivo. Em seguida, ela usa a API de Obtenção de Cerca Geográfica Espacial para determinar se o carro foi dirigido para fora da cerca geográfica. Se ele estiver fora dos limites da cerca geográfica, a função armazenará os dados de localização recebidos do evento em um contêiner de blob. A função também consultará a Reversão do Endereço de Pesquisa para converter a localização da coordenada em um endereço de rua, que ela armazenará com o restante dos dados de localização do dispositivo.

O diagrama a seguir mostra uma visão geral de alto nível do sistema.

Diagrama de visão geral do sistema.

A figura a seguir mostra a área de cerca geográfica realçada em azul. A rota do carro de aluguel é indicada por uma linha verde.

Figura mostrando a rota de cerca geográfica.

Criar uma conta de armazenamento do Azure

Para armazenar dados de acompanhamento de violação de carros, crie uma conta de armazenamento para uso geral v2 em seu grupo de recursos. Se você não criou um grupo de recursos, siga as instruções em criar grupos de recursos . Nomeie seu grupo de recursos como ContosoRental.

Para criar uma conta de armazenamento, siga as instruções em Criar uma conta de armazenamento. Neste tutorial, você nomeará a conta de armazenamento como ArmazenamentoAluguelContoso, mas você pode nomeá-la como quiser.

Ao criar com sucesso sua conta de armazenamento, você precisa criar um contêiner para armazenar os dados de registro.

  1. Abra sua conta de armazenamento recém-criada. Na seção Informações Gerais, selecione o link de Contêineres.

    Captura de tela de contêineres de armazenamento de blob.

  2. No canto superior esquerdo, selecione + Container. Um painel é exibido no lado direito do navegador. Nomeie seu contêiner como contoso-aluguel-registros e selecione Criar.

    Captura de tela da criação de um contêiner de blob.

  3. Acesse o painel de Chaves de acesso em sua conta de armazenamento e copie o Nome da conta de armazenamento e o valor da Chave na seção key1. Você precisa ter os dois valores na seção Criar uma função e adicionar uma assinatura da Grade de Eventos.

    Captura de tela do nome e da chave da conta de armazenamento de cópias.

Carregar uma cerca geográfica em sua conta de armazenamento do Azure

A cerca geográfica define a área geográfica autorizada para nosso veículo de aluguel. Use a cerca geográfica na sua função do Azure para determinar se um carro saiu da área da cerca geográfica.

Siga as etapas descritas no artigo Como criar um registro de dados para fazer o upload do arquivo de dados JSON de cerca geográfica na sua conta de armazenamento do Azure e, em seguida, registre-o na sua conta do Azure Mapas. Certifique-se de anotar o valor do identificador exclusivo (udid). Ele será necessário. O udid é como você faz referência à cerca geográfica que carregou na sua conta de armazenamento do Azure a partir do seu código-fonte. Para obter mais informações sobre arquivos de dados de cercas geográficas, confira Dados GeoJSON de delimitação geográfica.

Criar um hub IoT

O Hub IoT permite comunicação bidirecional segura e confiável entre um aplicativo IoT e os dispositivos gerenciados por ele. Para este tutorial, convém obter informações do seu dispositivo no veículo para determinar a localização do carro alugado. Nesta seção, você criará um hub IoT dentro do grupo de recursos AluguelContoso. Esse hub será responsável por publicar nossos eventos de telemetria do dispositivo.

Para criar um hub IoT no grupo de recursos AluguelContoso, siga as etapas em Criar um hub IoT.

Registrar um dispositivo em seu hub IoT

Os dispositivos não podem se conectar ao hub IoT, a menos que estejam registrados no registro de identidade do hub IoT. Crie um único dispositivo com o nome InVehicleDevice. Para criar e registrar o dispositivo no hub IoT, siga as etapas em Registrar um novo dispositivo no hub IoT. Copie a cadeia de conexão primária do seu dispositivo. Você precisará dela mais tarde.

Crie uma função e adicione uma assinatura de Grade de Eventos

O Azure Functions é um serviço de computação sem servidor que permite executar pequenos trechos de código, também chamados de "funções", sem a necessidade de provisionar explicitamente nem gerenciar a infraestrutura de computação. Para saber mais, confira Azure Functions.

Uma função é disparada por determinado evento. Crie uma função disparada por um gatilho da Grade de Eventos. Crie a relação entre gatilho e função criando uma assinatura de evento para eventos de telemetria de dispositivo do Hub IoT. Quando ocorre um evento de telemetria de dispositivo, sua função é chamada como um ponto de extremidade e recebe os dados relevantes para o dispositivo que você registrou anteriormente no Hub IoT.

Esse é o código do script C# contido por sua função.

Agora, configure sua função do Azure.

  1. No painel do portal do Azure, selecione Criar um recurso. Digite Aplicativo de Funções na caixa de texto de pesquisa. Selecione Aplicativo de Funções>Criar.

  2. Na página de criação do Aplicativo de Funções, nomeie o aplicativo de funções. Em Grupo de Recursos, selecione ContosoRental na lista suspensa. Selecione .NET como a Pilha de Runtime. Na parte inferior da página, selecione Avançar: Armazenamento >.

    Captura de tela da criação de um aplicativo de funções.

  3. Para Conta de armazenamento, selecione a conta de armazenamento que você criou em Criar uma conta de armazenamento do Azure. Selecione Examinar + criar.

  4. Examine os detalhes do aplicativo de funções e selecione Criar.

  5. Depois que o aplicativo é criado, você adiciona uma função a ele. Vá para o aplicativo de funções. Escolha o botão Criar no Portal do Azure.

    Importante

    O Gatilho do Hub de Eventos do Azure e o Gatilho da Grade de Eventos do Azure têm nomes semelhantes. Selecione o modelo Gatilho da Grade de Eventos do Azure.

    Captura de tela da criação de uma função no portal do Azure.

  6. O painel Criar função é exibido. Role o painel Selecionar um modelo para baixo, escolha Gatilho da Grade de Eventos do Azure e selecione o botão Criar.

    Captura de tela da criação de uma função.

  7. Dê um nome à função. Neste tutorial você usará o nome GetGeoFunction, mas, de modo geral, pode usar o nome que quiser. Selecione Criar função.

  8. No menu à esquerda, selecione o painel Código + Teste. Copie e cole o script C# na janela de código.

    Cópia/Captura de tela do código colado na janela de funções.

  9. No código C#, substitua os seguintes parâmetros:

    • Substitua SUBSCRIPTION_KEY pela chave de assinatura da sua conta do Azure Mapas.
    • Substitua UDID pelo udid da cerca geográfica que você carregou em Carregar uma cerca geográfica em sua conta de armazenamento do Azure.
    • A função CreateBlobAsync no script cria um blob por evento na conta de armazenamento de dados. Substitua ACCESS_KEY, ACCOUNT_NAME e STORAGE_CONTAINER_NAME pela chave de acesso da sua conta de armazenamento, pelo nome da conta e pelo contêiner de armazenamento de dados. Esses valores foram gerados quando você criou sua conta de armazenamento em Criar uma conta de Armazenamento do Azure.
  10. No menu esquerdo, selecione o painel Integração. Selecione Gatilho da Grade de Eventos no diagrama. Dê um nome para o gatilho, eventGridEvent, e selecione Criar assinatura de Grade de Eventos.

    Captura de tela da adição de assinatura de evento.

  11. Preencha os detalhes da assinatura. Nomeie a assinatura do evento. Para Esquema de Evento, selecione Esquema de Grade de Eventos. Para Tipos de Tópico, selecione Contas do Hub IoT do Azure. Para Grupo de Recursos, selecione o grupo de recursos criado no início deste tutorial. Para Recurso, selecione o Hub IoT que você criou em "Criar um Hub IoT do Azure". Para Filtrar Tipos de Evento, selecione Telemetria do Dispositivo.

    Depois de escolher essas opções, você verá o Tipo de Tópico se alterar para Hub IoT. Para Nome do Tópico do Sistema, é possível usar o mesmo nome que o recurso. Por fim, na seção Detalhes do ponto de extremidade, clique em Selecionar um ponto de extremidade. Aceite todas as configurações e selecione Confirmar Seleção.

    Captura de tela da criação da assinatura de evento.

  12. Examine suas configurações. Lembre-se de que o ponto de extremidade especifica a função que você criou no início desta seção. Selecione Criar.

    Captura de tela da confirmação de criação da assinatura de evento.

  13. Agora você está de volta no painel Editar Gatilho. Clique em Salvar.

Filtrar eventos usando o roteamento de mensagens do Hub IoT

Quando você adiciona uma assinatura de Grade de Eventos à função do Azure, uma rota de mensagens é criada automaticamente no hub IoT especificado. O roteamento de mensagens permite que você roteie diferentes tipos de dados para vários pontos de extremidade. Por exemplo, você pode rotear mensagens de telemetria do dispositivo, eventos do ciclo de vida do dispositivo e eventos de alteração de dispositivo gêmeo. Para saber mais, confira Usar o roteamento de mensagens do Hub IoT.

Captura de tela do roteamento de mensagens no hub IoT.

Em seu cenário de exemplo, você quer receber mensagens apenas quando o carro alugado estiver em movimento. Crie uma consulta de roteamento para filtrar os eventos em que a propriedade Engine é igual a "ON" . Para criar uma consulta de roteamento, selecione a rota RouteToEventGrid e substitua a Consulta de roteamento por "Engine = 'ON'" . Em seguida, selecione Salvar. Agora, o hub IoT apenas publicará a telemetria de dispositivos em que o motor estiver ligado.

Captura de tela da filtragem do roteamento de mensagens.

Dica

Existem várias maneiras de consultar mensagens IoT de dispositivo para nuvem. Para saber mais sobre a sintaxe de roteamento de mensagens, confira Roteamento de mensagens do Hub IoT.

Enviar dados de telemetria ao Hub IoT

Quando a função do Azure estiver em execução, você poderá enviar dados de telemetria para o hub IoT, que os encaminhará para a Grade de Eventos. Use um aplicativo C# para de simular dados de localização de um dispositivo em um carro de aluguel. Para executar o aplicativo, você precisa ter o SDK do .NET 6.0 no computador de desenvolvimento. Siga estas etapas para enviar dados telemétricos simulados ao hub IoT:

  1. Se você ainda não fez isso, baixe o projeto rentalCarSimulation em C#.

  2. Abra o arquivo simulatedCar.cs em um editor de texto de sua escolha e substitua o valor da connectionString pelo que você salvou quando registrou o dispositivo. Salve as alterações no arquivo.

  3. Verifique se você tem o runtime do ASP.NET Core instalado no computador. Na janela do terminal local, abra a pasta raiz do projeto em C# e execute o seguinte comando a fim de instalar os pacotes necessários para o aplicativo de dispositivo simulado:

    dotnet restore
    
  4. No mesmo terminal, execute o seguinte comando para compilar e executar o aplicativo de simulação de carros alugados:

    dotnet run
    

Seu terminal local deve se parecer com a captura de tela a seguir.

Captura de tela da saída do terminal.

Se você abrir o contêiner de Armazenamento de Blobs agora, verá quatro blobs para locais em que o veículo estava fora da cerca geográfica.

Captura de tela da visualização dos blobs dentro do contêiner.

O mapa a seguir mostra quatro pontos de localização de veículos fora da cerca geográfica. Cada localização foi registrada em intervalos de tempo regulares.

Captura de tela do mapa de violação.

Explorar o Azure Mapas e o IoT do Azure

Para explorar as APIs dos Azure Mapas usadas neste tutorial, confira:

Para obter uma lista completa das APIs REST do Azure Mapas, confira:

Para obter uma lista de dispositivos certificados pelo Azure para IoT, visite:

Limpar os recursos

Não há recursos que exijam limpeza.

Próximas etapas

Para saber mais sobre como enviar a telemetria do dispositivo para a nuvem e vice-versa, confira: