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.
- Uma Conta do Azure Mapas
- Uma chave de assinatura
- Um grupo de recursos
- O projeto C# rentalCarSimulation
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:
O dispositivo no veículo envia dados telemétricos ao Hub IoT.
Se o motor do carro estiver funcionando, o hub publicará os dados de telemetria na Grade de Eventos.
Uma função do Azure é disparada devido à respectiva assinatura de evento para eventos de telemetria do dispositivo.
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.
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.
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.
Abra sua conta de armazenamento recém-criada. Na seção Informações Gerais, selecione o link de Contêineres.
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.
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.
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.
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.
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 >.
Para Conta de armazenamento, selecione a conta de armazenamento que você criou em Criar uma conta de armazenamento do Azure. Selecione Examinar + criar.
Examine os detalhes do aplicativo de funções e selecione Criar.
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.
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.
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.
No menu à esquerda, selecione o painel Código + Teste. Copie e cole o script C# na janela de código.
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.
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.
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.
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.
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.
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.
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:
Se você ainda não fez isso, baixe o projeto rentalCarSimulation em C#.
Abra o arquivo
simulatedCar.cs
em um editor de texto de sua escolha e substitua o valor daconnectionString
pelo que você salvou quando registrou o dispositivo. Salve as alterações no arquivo.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
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.
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.
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.
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: