Tutorial: Implementar análise espacial de IoT usando o Azure MapasTutorial: Implement IoT spatial analytics using Azure Maps

Em um cenário de IoT, é comum capturar e acompanhar eventos relevantes que ocorrem no espaço e no tempo.In an IoT scenario, it's common to capture and track relevant events that occur in space and time. Os cenários de exemplo incluem aplicativos de gerenciamento de frota, acompanhamento de ativos, mobilidade e cidade inteligente.Example scenarios include fleet management, asset tracking, mobility, and smart city applications. Este tutorial descreve um padrão de solução usando as APIs dos Azure Mapas.This tutorial guides you through a solution pattern using the Azure Maps APIs. Os eventos relevantes são capturados pelo Hub IoT com o modelo de assinatura de evento fornecido pela Grade de Eventos.Relevant events are captured by IoT Hub, using the event subscription model provided by the Event Grid.

Neste tutorial, você irá:In this tutorial you will:

  • Crie um Hub IoT.Create an IoT Hub.
  • Carregue a área do limite geográfico no Azure Mapas, serviço de dados usando a API de Upload de Dados.Upload geofence area in the Azure Maps, Data service using the Data Upload API.
  • Crie uma função no Azure Functions implementando a lógica de negócios com base na análise espacial do Azure Mapas.Create a function in Azure Functions, implementing business logic based on Azure Maps spatial analytics.
  • Assine eventos de telemetria do dispositivo de IoT usando a função Azure por meio da Grade de Eventos.Subscribe to IoT device telemetry events from the Azure function via Event Grid.
  • Filtre os eventos de telemetria usando o roteamento de mensagens do Hub IoT.Filter the telemetry events using IoT Hub message routing.
  • Crie uma conta de armazenamento para armazenar dados de eventos relevantes.Create a storage account to store relevant event data.
  • Simule um dispositivo de IoT no veículo.Simulate an in-vehicle IoT device.

Caso de usoUse case

Esta solução demonstra um cenário em que uma empresa de aluguel de carros planeja monitorar e registrar eventos para os carros de aluguel.This solution demonstrates a scenario where a car rental company plans to monitor and log events for its rental cars. As empresas de aluguel de carros geralmente alugam carros para uma região geográfica específica.Car rental companies usually rent cars to a specific geographic region. Elas precisam acompanhar a localização dos carros enquanto eles estão alugados.They need to track the cars whereabouts while they are rented. As instâncias de um carro que sai da região geográfica escolhida precisam ser registradas em log.Instances of a car leaving the chosen geographic region must be logged. Os dados de log garantem que as políticas, os valores e outros aspectos empresariais sejam tratados corretamente.Logging data ensures policies, fees, and other business aspects would be handled properly.

Em nosso caso de uso, os carros alugados estão equipados com dispositivos IoT que enviam dados telemétricos regularmente para o Hub IoT do Azure.In our use case, the rental cars are equipped with IoT devices that regularly send telemetry data to Azure IoT Hub. A telemetria inclui a localização atual e indica se o motor do carro está ligado.The telemetry includes the current location and indicates whether the car's engine is running. O esquema de localização do dispositivo adere ao esquema de Plug and Play para dados geoespaciais de IoT.The device location schema adheres to the IoT Plug and Play schema for geospatial data. O esquema de telemetria do dispositivo do carro alugado é semelhante a:The rental car's device telemetry schema looks like:

{
    "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 ]
            } 
        } 
    }
}

Vamos usar telemetria de dispositivo no veículo para atingir nossa meta.Let's use in-vehicle device telemetry to accomplish our goal. Queremos executar regras de delimitação geográfica.We want to execute geofencing rules. Além disso, queremos fornecer uma resposta sempre que recebemos um evento indicando que o carro se movimentou.And, we want to respond whenever we receive an event indicating the car has moved. Para fazer isso, assinaremos os eventos de telemetria do dispositivo no Hub IoT por meio da Grade de Eventos.To do so, we'll subscribe to the device telemetry events from IoT Hub via Event Grid.

Há várias maneiras de assinar a Grade de Eventos; neste tutorial, usaremos o Azure Functions.There are several ways to subscribe to Event Grid, in this tutorial we use Azure Functions. O Azure Functions responde aos eventos publicados na Grade de Eventos.Azure Functions reacts to events published in the Event Grid. Ele também implementa a lógica de negócios do aluguel de carros, que se baseia na análise espacial dos Azure Mapas.It also implements car rental business logic, which is based on Azure Maps spatial analytics.

O código dentro da função do Azure verifica se o veículo saiu da cerca geográfica.Code inside Azure function checks whether the vehicle has left the geofence. Se o veículo sai da cerca geográfica, a função do Azure coleta informações adicionais, como o endereço associado à localização atual.If the vehicle left the geofence, the Azure function gathers additional information such as the address associated to the current location. A função também implementa a lógica para armazenar dados de eventos significativos em um Armazenamento de Blobs de dados que ajuda a fornecer a descrição das circunstâncias do evento.The function also implements logic to store meaningful event data in a data blob storage that helps provide description of the event circumstances.

As circunstâncias do evento podem ser úteis para a empresa de aluguel de carros e para o cliente de aluguel.The event circumstances can be helpful to the car rental company and the rental customer. O diagrama a seguir apresenta uma visão geral de alto nível do sistema.The following diagram gives you a high-level overview of the system.

Visão geral do sistema

A figura a seguir representa a área de cerca geográfica realçada em azul.The following figure represents the geofence area highlighted in blue. A rota do veículo de aluguel é indicada por uma linha verde.The rental vehicle's route is indicated by a green line.

Rota de delimitação geográfica

Pré-requisitosPrerequisites

Criar um grupo de recursosCreate a resource group

Para concluir as etapas deste tutorial, primeiro você precisa criar um grupo de recursos no portal do Azure.To complete the steps in this tutorial, you first need to create a resource group in the Azure portal. Para criar um grupo de recursos, execute as seguintes etapas:To create a resource group, do the following steps:

  1. Entre no portal do Azure.Sign in to the Azure portal.

  2. Selecione Grupos de recursos.Select Resource groups.

    Grupos de recursos

  3. Em Grupos de recursos, selecione Adicionar.Under Resource groups, select Add.

    Adicionar grupo de recursos

  4. Insira os seguintes valores de propriedade:Enter the following property values:

    • Assinatura: Selecione sua assinatura do Azure.Subscription: Select your Azure subscription.
    • Grupo de recursos: Insira "ContosoRental" como o nome do grupo de recursos.Resource group: Enter "ContosoRental" as the resource group name.
    • Região: Selecione uma região para o grupo de recursos.Region: Select a region for the resource group.

    Detalhes do grupo de recursos

    Selecione Examinar + criar e, em seguida, Criar na próxima página.Select Review + create, and then select Create on the next page.

Criar uma conta dos Mapas do AzureCreate an Azure Maps account

Para implementar a lógica de negócios com base na análise espacial dos Azure Mapas, precisamos criar uma conta dos Azure Mapas no grupo de recursos que criamos.To implement business logic based on Azure Maps spatial analytics, we need to create an Azure Maps account in the resource group we created. Siga as instruções em Criar uma conta para criar uma assinatura da conta dos Azure Mapas no tipo de preço S1.Follow instructions in Create an account to create an Azure Maps account subscription with S1 pricing tier. Siga as etapas em Obter chave primária para obter a chave primária da sua conta.Follow the steps in get primary key to obtain your primary key for your account. Para obter mais informações sobre a autenticação nos Azure Mapas, confira Gerenciar a autenticação nos Azure Mapas.For more information on authentication in Azure Maps, see manage authentication in Azure Maps.

Criar uma conta de armazenamentoCreate a storage account

Para registrar dados de evento, criaremos um v2storage de uso geral que fornecerá acesso a todos os serviços de Armazenamento do Azure: blobs, arquivos, filas, tabelas e discos.To log event data, we'll create a general-purpose v2storage that provides access to all of the Azure Storage services: blobs, files, queues, tables, and disks. Precisaremos colocar essa conta de armazenamento no grupo de recursos "ContosoRental" para armazenar dados como blobs.We'll need to place this storage account in the "ContosoRental" resource group to store data as blobs. Para criar uma conta de armazenamento, siga a instrução em criar uma conta de armazenamento.To create a storage account, follow instruction in create a storage account. Em seguida, precisaremos criar um contêiner para armazenar os blobs.Next we'll need to create a container to store blobs. Siga as etapas abaixo para fazer isso:Follow the steps below to do so:

  1. Em sua "conta de armazenamento – blob, arquivo, tabela, fila", navegue até Contêineres.In your "storage account - blob, file, table, queue", navigate to Containers.

    blobs

  2. Clique no botão contêiner no canto superior esquerdo, dê ao contêiner o nome de "contoso-aluguel-logs" e clique em "OK".Click the container button at the top left and name your container "contoso-rental-logs" and click "OK".

    blob-container

  3. Navegue até a folha Chaves de acesso em sua conta de armazenamento e copie o "nome da conta de armazenamento" e a "chave de acesso".Navigate to the Access keys blade in your storage account and copy the "storage account name" and "access key". Eles serão necessários em uma etapa posterior.They're needed in a later step.

    access-keys

Agora, temos uma conta de armazenamento e um contêiner para registrar dados de evento em log.Now, we have a storage account and a container to log event data. Em seguida, criaremos um hub IoT.Next, we'll create an IoT hub.

Crie um Hub IoTCreate an IoT Hub

O Hub IoT é um serviço gerenciado na nuvem.The IoT Hub is a managed service in the cloud. O Hub IoT funciona como um hub central de mensagens para comunicação bidirecional entre um aplicativo IoT e os dispositivos gerenciados por ele.The IoT Hub acts as a central message hub for bi-directional communication between an IoT application and the devices managed by it. Para rotear mensagens de telemetria do dispositivo para uma Grade de Eventos, crie um Hub IoT no grupo de recursos "ContosoRental".In order to route device telemetry messages to an Event Grid, create an IoT Hub within the "ContosoRental" resource group. Configure uma integração de rota de mensagem na qual filtraremos as mensagens com base no status do motor do carro.Set up a message route integration where we will filter messages based on the car's engine status. Também enviaremos mensagens de telemetria do dispositivo para a Grade de Eventos sempre que o carro estiver se movendo.We will also send device telemetry messages to the Event Grid whenever the car is moving.

Observação

A funcionalidade do Hub IoT para publicar eventos de telemetria de dispositivo na Grade de Eventos está em versão prévia pública.IoT Hub's functionality to publish device telemetry events on Event Grid is in Public preview. A versão prévia pública dos recursos está disponível em todas as regiões, exceto Leste dos EUA, Oeste dos EUA, Oeste da Europa, Azure Governamental, Azure China 21Vianet e Azure Alemanha.Public preview features are available in all regions except East US, West US, West Europe, Azure Government, Azure China 21Vianet, and Azure Germany.

Crie um Hub IOT seguindo as etapas na seção criar um Hub IoT.Create an Iot Hub by following the steps in create an IoT Hub section.

Registrar um dispositivoRegister a device

Para se conectar ao Hub IoT, um dispositivo deve ser registrado.In order to connect to the IoT Hub, a device must be registered. Para registrar um dispositivo com o Hub IoT, siga as etapas abaixo:To register a device with IoT hub, follow the steps below:

  1. No Hub IoT, clique na folha "dispositivos IoT" e clique em "Novo".In your IoT Hub, click on the "IoT devices" blade and click "New".

    add-device

  2. Na página Criar um dispositivo, dê um nome ao dispositivo IoT e clique em "Salvar".On the create a device page, name your IoT device, and click "Save".

    register-device

  3. Salve a Cadeia de conexão primária do seu dispositivo para usá-la em uma etapa posterior, na qual será necessário alterar um espaço reservado com essa cadeia de conexão.Save the Primary Connection String of your device to use it in a later step, in which you need to change a placeholder with this connection string.

    add-device

Carregar cerca geográficaUpload geofence

Usaremos o aplicativo Postman para carregar a cerca geográfica no serviço Azure Mapas usando a API de Upload de Dados dos Azure Mapas.We'll use the Postman application to upload the geofence to the Azure Maps service using the Azure Maps Data Upload API. Qualquer evento quando o carro estiver fora dessa cerca geográfica será registrado.Any event when the car is outside this geofence will be logged.

Abra o aplicativo Postman e siga as etapas abaixo para carregar a cerca geográfica usando o Azure Mapas, API de Upload de Dados.Open the Postman app and follow the steps below to upload the geofence using the Azure Maps, Data Upload API.

  1. No aplicativo Postman, clique em novo | Criar novo e selecione Solicitação.In the Postman app, click new | Create new, and select Request. Insira um nome de solicitação para o upload de dados de limite geográfico, selecione uma coleção ou uma pasta em que salvá-los e clique em Salvar.Enter a Request name for Upload geofence data, select a collection or folder to save it to, and click Save.

    Carregar cercas geográficas usando Postman

  2. Selecione o método HTTP POST na guia compilador e insira a URL a seguir para fazer uma solicitação POST.Select POST HTTP method on the builder tab and enter the following URL to make a POST request.

    https://atlas.microsoft.com/mapData/upload?subscription-key={subscription-key}&api-version=1.0&dataFormat=geojson
    

    O parâmetro "geojson" no parâmetro dataFormat no caminho da URL representa o formato dos dados sendo carregados.The "geojson" value against the dataFormat parameter in the URL path represents the format of the data being uploaded.

  3. Clique em Parâmetros e insira os seguintes pares de chave/valor a serem usados para a URL da solicitação POST.Click Params, and enter the following Key/Value pairs to be used for the POST request URL. Substitua o valor subscription-key pela chave do Azure Mapas.Replace subscription-key value with your Azure Maps key.

    Postman de parâmetros de chave-valor

  4. Clique em Corpo e, em seguida, selecione o formato de entrada bruto e escolha JSON (aplicativo/texto) como o formato de entrada na lista suspensa.Click Body then select raw input format and choose JSON (application/text) as the input format from the drop-down list. Abra o arquivo de dados JSON aqui e copie o JSON para a seção do corpo como os dados a serem carregados e clique em Enviar.Open the JSON data file here, and copy the Json in the body section as the data to upload and click Send.

    postar dados

  5. Examine os cabeçalhos de resposta.Review the response headers. Após uma solicitação bem-sucedida, o cabeçalho Local conterá o URI de status para verificar o status atual da solicitação de upload.Upon a successful request, the Location header will contain the status URI to check the current status of the upload request. O URI de status estará no formato a seguir.The status URI will be of the following format.

    https://atlas.microsoft.com/mapData/{uploadStatusId}/status?api-version=1.0
    
  6. Copie o URI de status e acrescente um parâmetro subscription-key a ele.Copy your status URI and append a subscription-key parameter to it. Atribua o valor da sua chave de assinatura da conta do Azure Mapas ao parâmetro subscription-key.Assign the value of your Azure Maps account subscription key to the subscription-key parameter. O formato do URI de status deve se parecer com o formato abaixo e {Subscription-key} deve ser substituído pela chave de assinatura.The status URI format should be like the one below, and {Subscription-key} replaced with your subscription key.

    https://atlas.microsoft.com/mapData/{uploadStatusId}/status?api-version=1.0&subscription-key={Subscription-key}
    
  7. Para obter o udId, abra uma nova guia no aplicativo de postmaster e selecione obter método GET HTTP na guia construtor e faça uma solicitação GET no URI de status.To get the, udId open a new tab in the Postman app and select GET HTTP method on the builder tab and make a GET request at the status URI. Se o upload de dados for bem-sucedido, você receberá uma udId no corpo da resposta.If your data upload was successful, you'll receive a udId in the response body. Copie o udId para uso posterior.Copy the udId for later use.

    {
     "udid" : "{udId}"
    }
    

Em seguida, criaremos uma Função do Azure dentro do grupo de recursos "ContosoRental" e, depois, configuraremos uma rota de mensagem no Hub IoT para filtrar as mensagens de telemetria do dispositivo.Next we'll create an Azure Function within the "ContosoRental" resource group and then set up a message route in IoT Hub to filter device telemetry messages.

Criar uma função do Azure e adicionar uma assinatura da Grade de EventosCreate an Azure Function and add an Event Grid subscription

O Azure Functions é um serviço de computação sem servidor que permite executar o código sob demanda, sem a necessidade de provisionar explicitamente nem gerenciar a infraestrutura de computação.Azure Functions is a serverless compute service which enables us to run code on-demand, without the need to explicitly provision or manage compute infrastructure. Para saber mais sobre o Azure Functions, confira a documentação do Azure Functions.To learn more about Azure Functions, take a look at the Azure functions documentation.

A lógica que implementamos na função é usar os dados de localização provenientes da telemetria do dispositivo no veículo para avaliar o status da cerca geográfica.The logic we implement in the function is using the location data coming from the in-vehicle device telemetry for assessing the geofence status. Se um veículo específico sair da cerca geográfica, a função coletará mais informações, como o endereço da localização por meio da API Obter Reversão de Endereço de Pesquisa.In case a given vehicle goes outside the geofence, the function will gather more information like the address of the location via the Get Search Address Reverse API. Essa API converte uma coordenada de localização específica em um endereço compreensível por humanos.This API translates a given location coordinate into a human understandable street address.

Todas as informações de evento relevantes são então mantidas no Armazenamento de Blobs.All relevant event info is then kept in the blob store. A Etapa 5 abaixo aponta para o código executável que implementa essa lógica.Step 5 below points to the executable code implementing such logic. Siga as etapas abaixo para criar uma Função do Azure que envia logs de dados para o contêiner de blob na conta de Armazenamento de Blobs e adicionar uma assinatura da Grade de Eventos a ela.Follow the steps below to create an Azure Function that sends data logs to the blob container in the blob storage account and add an Event Grid subscription to it.

  1. No dashboard do portal do Azure, selecione Criar um recurso.In the Azure portal dashboard, select create a resource. Selecione Computação na lista de tipos de recursos disponíveis e, em seguida, selecione o Aplicativo de Funções.Select Compute from the list of available resource types and then select Function App.

    create-resource

  2. Na página de criação do Aplicativo de Funções, nomeie o aplicativo de funções.On the Function App creation page, name your function app. Em Grupo de Recursos, selecione Usar existente e selecione "ContosoRental" na lista suspensa.Under Resource Group, select Use existing, and select "ContosoRental" from the drop-down list. Selecione ".NET Core" como a pilha de runtime.Select ".NET Core" as the Runtime Stack. Em Hospedagem, para Conta de armazenamento, selecione o nome de uma conta de armazenamento de uma etapa anterior.Under Hosting, for Storage account, select the storage account name from a prior step. Na etapa anterior, nomeamos a conta de armazenamento como v2storage.In our prior step, we named the storage account v2storage. Em seguida, selecione Revisar + Criar.Then, select Review+Create.

    create-app

  3. Examine os detalhes do aplicativo de funções e selecione "Criar".Review the function app details, and select "Create".

  4. Depois que o aplicativo tiver sido criado, precisaremos adicionar uma função a ele.Once the app is created, we need to add a function to it. Vá para o aplicativo de funções.Go to the function app. Clique em Nova função para adicionar uma função e escolha No portal como o ambiente de desenvolvimento.Click New function to add a function, and choose In-Portal as the development environment. Em seguida, selecione Continuar.Then, select Continue.

    create-function

  5. Escolha Mais modelos e clique em Concluir e exibir modelos.Choose More templates and click Finish and view templates.

  6. Selecione o modelo com um Gatilho de Grade de Eventos do Azure.Select the template with an Azure Event Grid Trigger. Instale extensões, se solicitado, nomeie a função e selecione Criar.Install extensions if prompted, name the function, and select Create.

    function-template

    O Gatilho de Hub de Eventos do Azure e o Gatilho da Grade de Eventos do Azure têm ícones semelhantes.The Azure Event Hub Trigger and the Azure Event Grid Trigger have similar icons. Selecione o Gatilho da Grade de Eventos do Azure.Make sure you select the Azure Event Grid Trigger.

  7. Copie o código C# para sua função.Copy the C# code into your function.

  8. No script C#, substitua os parâmetros a seguir.In the C# script, replace the following parameters. Clique em Save (Salvar).Click Save. Não clique em Executar aindaDon't click Run yet

    • Substitua SUBSCRIPTION_KEY pela chave primária de assinatura da conta do Azure Mapas.Replace the SUBSCRIPTION_KEY with your Azure Maps account primary subscription key.
    • Substitua UDID pelo udId da cerca geográfica que você carregou.Replace the UDID with the udId of the geofence you uploaded,
    • A função CreateBlobAsync no script cria um blob por evento na conta de armazenamento de dados.The CreateBlobAsync function in the script creates a blob per event in the data storage account. 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.Replace the ACCESS_KEY, ACCOUNT_NAME, and STORAGE_CONTAINER_NAME with your storage account's access key, account name, and data storage container.
  9. Clique em Adicionar assinatura da Grade de Eventos.Click on Add Event Grid subscription.

    add-event-grid

  10. Preencha os detalhes da assinatura, dê um nome à sua assinatura em DETALHES DA ASSINATURA DO EVENTO.Fill out subscription details, under EVENT SUBSCRIPTION DETAILS name your event subscription. Para o Esquema de Evento, escolha "Esquema de Grade de Eventos".For Event Schema choose "Event Grid Schema". Em DETALHES DO TÓPICO, selecione "Contas do Hub IoT do Azure" como Tipo de tópico.Under TOPIC DETAILS select "Azure IoT Hub Accounts" as Topic type. Escolha a mesma assinatura que você usou para criar o grupo de recursos e selecione "ContosoRental" como o "Grupo de Recursos".Choose the same subscription you used for creating the resource group, select "ContosoRental" as the "Resource Group". Escolha o Hub IoT criado como um "Recurso".Choose the IoT Hub you created as a "Resource". Escolha Telemetria do Dispositivo como Tipo de Evento.Pick Device Telemetry as Event Type. Depois de escolher essas opções, você verá o "Tipo de Tópico" mudar para "Hub IoT" automaticamente.After choosing these options, you'll see the "Topic Type" change to "IoT Hub" automatically.

    event-grid-subscription

Filtrar eventos usando o roteamento de mensagens do Hub IoTFilter events using IoT Hub message routing

Depois de adicionar uma assinatura da Grade de Eventos à Função do Azure, você verá uma rota de mensagem padrão para a Grade de Eventos na folha Roteiros de Mensagens do Hub IoT.After you add an Event Grid subscription to the Azure Function, you'll see a default message route to Event Grid in IoT Hub's Message Routing blade. Os roteiros de mensagens permite que você roteie diferentes tipos de dados para vários pontos de extremidade.Message routing enables you to route different data types to various endpoints. 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.For example, you can route device telemetry messages, device life-cycle events, and device twin change events. Para saber mais sobre o roteamento de mensagens do Hub IoT, confira Usar o roteamento de mensagens do Hub IoT.To learn more about IoT hub message routing, see Use IoT Hub message routing.

hub-EG-route

Em nosso cenário de exemplo, desejamos filtrar todas as mensagens nas quais o veículo alugado está em movimento.In our example scenario, we want to filter out all messages where the rental vehicle is moving. Para publicar esses eventos de telemetria do dispositivo na Grade de Eventos, usaremos a consulta de roteiros para filtrar os eventos, em que a propriedade Engine está "ATIVADA" .In order to publish such device telemetry events to Event Grid, we'll use the routing query to filter the events where the Engine property is "ON". Há várias maneiras de consultar mensagens do dispositivo para a nuvem do IoT. Para saber mais sobre a sintaxe de roteamento de mensagens, confira Roteamento de mensagens do Hub IoT.There are various ways to query IoT device-to-cloud messages, to learn more about message routing syntax, see IoT Hub message routing. Para criar uma consulta de roteamento, clique na rota RouteToEventGrid e substitua a Consulta de roteamento por "Engine='ON'" e clique em Salvar.To create a routing query, click on the RouteToEventGrid route and replace the Routing query with "Engine='ON'" and click Save. Agora, o Hub IoT apenas publicará a telemetria do dispositivo em que o Motor estiver LIGADO.Now IoT hub will only publish device telemetry where the Engine is ON.

hub-EG-filter

Enviar dados de telemetria ao Hub IoTSend telemetry data to IoT Hub

Depois que a nossa Função do Azure estiver em funcionamento, podemos enviar dados telemétricos ao Hub IoT, que os roteará para a Grade de Eventos.Once our Azure Function is up and running, we can now send telemetry data to the IoT Hub, which will route it to the Event Grid. Vamos usar um aplicativo C# para simular dados de localização para um dispositivo no veículo de um carro de aluguel.Let's use a C# application to simulate location data for an in-vehicle device of a rental car. Para executar o aplicativo, é necessário ter o SDK do .NET Core 2.1.0 ou superior no computador de desenvolvimento.To run the application, you need the .NET Core SDK 2.1.0 or greater on your development machine. Siga as etapas abaixo para enviar dados de telemetria simulados para o Hub IoT.Follow the steps below to send simulated telemetry data to IoT Hub.

  1. Baixe o projeto rentalCarSimulation em C#.Download the rentalCarSimulation C# project.

  2. Abra o arquivo simulatedCar.cs em um editor de texto de sua escolha e substitua o valor do connectionString pelo que você salvou quando registrou o dispositivo e salve as alterações no arquivo.Open the simulatedCar.cs file in a text editor of your choice and replace the value of the connectionString with the one you saved when you registered the device and save changes to the file.

  3. Verifique se você tem o .NET Core instalado no computador.Make sure you have .NET Core installed on your machine. Na janela do terminal local, navegue até a pasta raiz do projeto em C# e execute o seguinte comando para instalar os pacotes necessários para o aplicativo de dispositivo simulado:In your local terminal window, navigate to the root folder of the C# project and run the following command to install the required packages for simulated device application:

    dotnet restore
    
  4. No mesmo terminal, execute o seguinte comando para compilar e executar o aplicativo de simulação de carros alugados:In the same terminal, run the following command to build and run the rental car simulation application:

    dotnet run
    

Seu terminal local deve ser semelhante ao mostrado abaixo.Your local terminal should look like the one below.

Saída do terminal

Se você abrir o contêiner de armazenamento de blobs agora, poderá ver quatro blobs para locais em que o veículo estava fora da cerca geográfica.If you open the blob storage container now, you should be able to see four blobs for locations where the vehicle was outside the geofence.

Inserir blob

O mapa abaixo mostra quatro pontos em que o veículo estava fora da cerca geográfica, registrados a intervalos de tempo regulares.The map below shows four points where the vehicle was outside the geofence, logged at regular time intervals.

mapa de violação

Próximas etapasNext steps

Para explorar as APIs do Azure Mapas usadas neste tutorial, confira:To explore Azure Maps APIs used in this tutorial, see:

Para obter uma lista completa das APIs REST do Azure Mapas, confira:For a complete list of Azure Maps REST APIs, see:

Para saber mais sobre o IoT Plug and Play, confira:To learn more about IoT Plug and Play, see:

Para obter uma lista de dispositivos certificados pelo Azure para IoT, visite:To get a list of devices that are Azure certified for IoT, visit:

Para saber mais sobre como enviar o dispositivo para a telemetria de nuvem e vice-versa, confira:To learn more about how to send device to cloud telemetry and the other way around, see: