Tutorial: Implementar a análise espacial da IoT usando o Azure Maps

Em um cenário de IoT, é comum capturar e rastrear eventos relevantes que ocorrem no espaço e no tempo. Os exemplos incluem gestão de frotas, rastreamento de ativos, mobilidade e aplicações de cidades inteligentes. Este tutorial orienta você por uma solução que rastreia o movimento de aluguel de carros usados usando as APIs do Azure Maps.

Neste tutorial você irá:

  • Crie uma conta de armazenamento do Azure para registrar dados de rastreamento de carros.
  • Carregue uma cerca geográfica para uma conta de armazenamento do Azure.
  • Crie um hub no Hub IoT do Azure e registre um dispositivo.
  • Crie uma função no Azure Functions, implementando a lógica de negócios com base na análise espacial do Azure Maps.
  • Assine eventos de telemetria de dispositivo IoT da função do Azure por meio da Grade de Eventos do Azure.
  • Filtre os eventos de telemetria usando o roteamento de mensagens do Hub IoT.

Pré-requisitos

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

Gorjeta

Você pode baixar todo o projeto rentalCarSimulation C# do GitHub como um único arquivo ZIP, indo para a raiz do exemplo e selecionando o botão código verde<>e, em seguida, 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} pela sua chave de subscrição do Azure Maps.

Caso de uso: rastreamento de carro alugado

Digamos que uma empresa de aluguel de carros queira registrar informações de localização, distância percorrida e estado de funcionamento para seus carros alugados. A empresa também quer armazenar essas informações sempre que um carro sair da região geográfica autorizada correta.

Os carros de aluguel são equipados com dispositivos IoT que enviam regularmente dados de telemetria para o Hub IoT. A telemetria inclui a localização atual e indica se o motor do carro está funcionando. O esquema de localização do dispositivo adere ao esquema IoT Plug and Play para dados geoespaciais. O esquema de telemetria do dispositivo do carro alugado se parece com o 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, você rastreia apenas um veículo. Depois de configurar os serviços do Azure, você precisa baixar o projeto rentalCarSimulation C# para executar o simulador de veículo. Todo o processo, desde a execução do evento até a execução da função, é resumido nas seguintes etapas:

  1. O dispositivo no veículo envia dados de telemetria para o 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 é acionada devido à sua assinatura de eventos para eventos de telemetria de dispositivo.

  4. A função regista as coordenadas de localização do dispositivo do veículo, a hora do evento e o ID do dispositivo. Em seguida, ele usa a API Spatial Geofence Get para determinar se o carro dirigiu fora da cerca geográfica. Se tiver viajado para fora dos limites da cerca geográfica, a função armazena os dados de localização recebidos do evento em um contêiner de blob. A função também consulta o Search Address Reverse para traduzir o local da coordenada para um endereço e armazena-o com o resto 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 destaca a área da cerca geográfica em azul. A rota do carro alugado é indicada por uma linha verde.

Figura mostrando a rota da cerca geográfica.

Criar uma conta de armazenamento do Azure

Para armazenar dados de rastreamento de violação de carro, crie uma conta de armazenamento v2 de uso geral 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, nomeie a conta de armazenamento contosorentalstorage, mas, em geral, você pode nomeá-la como quiser.

Ao criar com êxito sua conta de armazenamento, você precisará criar um contêiner para armazenar dados de log.

  1. Vá para sua conta de armazenamento recém-criada. Na seção Essenciais, selecione o link Contêineres.

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

  2. No canto superior esquerdo, selecione + Contêiner. Um painel aparece no lado direito do navegador. Nomeie seu contêiner contoso-rental-logs e selecione Criar.

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

  3. Vá para o painel Teclas de acesso na sua conta de armazenamento e copie o nome da conta de armazenamento e o valor da chave na seção key1. Você precisa de ambos os valores na seção Criar uma função e adicionar uma assinatura de Grade de Eventos.

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

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

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

Siga as etapas descritas no artigo Como criar registro de dados para carregar o arquivo de dados JSON de cerca geográfica em sua conta de armazenamento do Azure e registrá-lo em sua conta do Azure Maps. Certifique-se de anotar o valor do identificador exclusivo (udid), você precisará dele. É udid assim que você faz referência à cerca geográfica que carregou em sua conta de armazenamento do Azure a partir do código-fonte. Para obter mais informações sobre arquivos de dados de cerca geográfica, consulte Geofencing GeoJSON data.

Criar um hub IoT

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

Para criar um hub IoT no grupo de recursos ContosoRental , 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 em seu hub IoT, siga as etapas em registrar um novo dispositivo no hub IoT. Certifique-se de copiar a cadeia de conexão principal do seu dispositivo. Precisará dele mais tarde.

Criar uma função e adicionar uma subscrição da Grelha de Eventos

O Azure Functions é um serviço de computação sem servidor que permite executar pequenas partes de código ("funções"), sem a necessidade de provisionar ou gerenciar explicitamente a infraestrutura de computação. Para saber mais, consulte Azure Functions.

Uma função é acionada por um determinado evento. Crie uma função acionada por um gatilho de Grade de Eventos. Crie a relação entre trigger 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 de ponto de extremidade e recebe os dados relevantes para o dispositivo registrado anteriormente no Hub IoT.

Aqui está o código de script C# que sua função contém.

Agora, configure sua função do Azure.

  1. No painel do portal do Azure, selecione Criar um recurso. Digite Função App na caixa de texto de pesquisa. Selecione Função App>Create.

  2. Na página Criação de aplicativo de função, nomeie seu aplicativo de função. Em Grupo de Recursos, selecione ContosoRental na lista suspensa. Selecione .NET como a pilha de tempo de execução. Na parte inferior da página, selecione Avançar: Armazenamento >.

    Captura de ecrã a mostrar a criação de uma aplicação funcional.

  3. Para Conta de armazenamento, selecione a conta de armazenamento criada em Criar uma conta de armazenamento do Azure. Selecione Rever + criar.

  4. Revise os detalhes do aplicativo de função e selecione Criar.

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

    Importante

    O Gatilho do Hub de Eventos do Azure e os modelos de Gatilho de Grade de Eventosdo Azure têm nomes semelhantes. Certifique-se de selecionar o modelo de Gatilho de Grade de Eventos do Azure.

    Captura de ecrã a mostrar a criação de uma função no Portal do Azure.

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

    Captura de tela de criar uma função.

  7. Dê um nome à função. Neste tutorial, use o nome GetGeoFunction, mas em geral você pode usar qualquer nome que desejar. 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.

    Copiar/Captura de tela do código colar na janela de função.

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

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

    Captura de ecrã de adicionar subscrição de evento.

  11. Preencha os detalhes da subscrição. Nomeie a assinatura do evento. Para Esquema de Eventos, 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. Em Recurso, selecione o hub IoT criado em "Criar um hub IoT do Azure". Em Filtrar para Tipos de Eventos, selecione Telemetria de Dispositivo.

    Depois de escolher essas opções, você verá a alteração do Tipo de tópico para o Hub IoT. Para Nome do Tópico do Sistema, você pode usar o mesmo nome do seu recurso. Finalmente, na seção Detalhes do ponto final, selecione Selecionar um ponto de extremidade. Aceite todas as configurações e selecione Confirmar seleção.

    Captura de ecrã da subscrição do evento de criação.

  12. Reveja as definições. Certifique-se de que o ponto de extremidade especifica a função que você criou no início desta seção. Selecione Criar.

    Captura de ecrã da confirmação de subscrição do evento de criação.

  13. Agora você está de volta ao painel Editar gatilho . Selecione Guardar.

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 rotear diferentes tipos de dados para vários pontos de extremidade. Por exemplo, você pode rotear mensagens de telemetria de dispositivo, eventos de ciclo de vida do dispositivo e eventos de alteração de gêmeos de dispositivo. Para obter mais informações, consulte Usar o roteamento de mensagens do Hub IoT.

Captura de tela do roteamento de mensagens no hub IoT.

No seu cenário de exemplo, você só deseja receber mensagens quando o carro alugado estiver em movimento. Crie uma consulta de roteamento para filtrar os eventos em que a propriedade é igual a Engine "ON". Para criar uma consulta de roteamento, selecione a rota RouteToEventGrid e substitua a consulta Roteamento por "Engine='ON'". Em seguida, selecione Guardar. Agora, o hub IoT publica apenas a telemetria do dispositivo onde o mecanismo está ligado.

Captura de tela de mensagens de roteamento de filtro.

Gorjeta

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

Enviar dados de telemetria para o Hub IoT

Quando sua função do Azure está em execução, agora você pode enviar dados de telemetria para o hub IoT, que os roteia para a Grade de Eventos. Use um aplicativo C# para simular dados de localização para um dispositivo no veículo de um carro alugado. Para executar o aplicativo, você precisa do .NET SDK 6.0 em seu computador de desenvolvimento. Siga estas etapas para enviar dados de telemetria simulados para o hub IoT:

  1. Se ainda não o fez, faça o download do projeto rentalCarSimulation C#.

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

  3. Certifique-se de ter o ASP.NET Core Runtime instalado em sua máquina. Na janela do terminal local, vá para a pasta raiz do projeto C# e execute o seguinte comando para instalar os pacotes necessários para o aplicativo de dispositivo simulado:

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

    dotnet run
    

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

Screenshot da saída do terminal.

Se você abrir o contêiner de armazenamento de blob agora, poderá ver quatro blobs para locais onde o veículo estava fora da cerca geográfica.

Captura de tela de blobs de exibição dentro do contêiner.

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

Screenshot do mapa de violação.

Explore o Azure Maps e a IoT

Para explorar as APIs do Azure Maps usadas neste tutorial, consulte:

Para obter uma lista completa das APIs REST do Azure Maps, consulte:

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

Clean up resources (Limpar recursos)

Não há recursos que exijam limpeza.

Próximos passos

Para saber mais sobre como enviar telemetria de dispositivo para nuvem e vice-versa, consulte:

Send telemetry from a device (Enviar telemetria a partir de um dispositivo)