Tutorial: Usar um dispositivo simulado para testar a conectividade com o hub IoT

Neste tutorial, você usa ferramentas do portal do Hub IoT e comandos da CLI do Azure para testar conectividade de dispositivo. Este tutorial também usa um simulador de dispositivo simples que você executa no computador desktop.

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

Neste tutorial, você aprenderá como:

  • Verificar autenticação de dispositivo
  • Verificar conectividade de dispositivo para nuvem
  • Verificar conectividade de nuvem para dispositivo
  • Verificar sincronização de dispositivo gêmeo

Pré-requisitos

  • Este tutorial usa a CLI do Azure para criar recursos de nuvem. Há duas maneiras de executar comandos da CLI:

    Observação

    Este artigo usa a versão mais recente da extensão de IoT do Azure, chamada azure-iot. A versão herdada chama-se azure-cli-iot-ext. Você deve ter apenas uma versão instalada por vez. Use o comando az extension list para validar quais extensões estão instaladas.

    Use az extension remove --name azure-cli-iot-ext para remover a versão herdada da extensão.

    Use az extension add --name azure-iot para adicionar a nova versão da extensão.

    Para ver quais extensões você tem instaladas, use az extension list.

  • O aplicativo de exemplo executado neste tutorial usa Node.js. Você precisa do Node.js v10.x.x ou posterior em seu computador de desenvolvimento.

    • Você pode fazer o download do Node.js para várias plataformas a partir do nodejs.org.

    • Você pode verificar a versão atual do Node.js no computador de desenvolvimento usando o seguinte comando:

      node --version
      
  • Clone ou baixe o projeto de Node.js de exemplo em Exemplos de Internet das Coisas do Azure para Node.js.

  • Verifique se a porta 8883 está aberta no firewall. A amostra de dispositivo deste tutorial usa o protocolo MQTT, que se comunica pela porta 8883. Essa porta poderá ser bloqueada em alguns ambientes de rede corporativos e educacionais. Para obter mais informações e maneiras de resolver esse problema, confira Como se conectar ao Hub IoT (MQTT).

Crie um hub IoT

Nesta seção, você usa a CLI do Azure para criar um hub IoT e um grupo de recursos. Um grupo de recursos do Azure é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados. Um hub IoT atua como um hub central de mensagens para comunicação bidirecional entre o aplicativo IoT e os dispositivos.

Se você já tiver um hub IoT em sua assinatura do Azure, ignore esta seção.

Para criar um hub IoT e um grupo de recursos:

  1. Inicie o aplicativo da CLI. Para executar os comandos da CLI no restante deste artigo, copie a sintaxe do comando, cole-a no aplicativo da CLI, edite os valores de variáveis e pressione Enter.

    • Se estiver usando o Cloud Shell, selecione o botão Experimentar nos comandos da CLI para iniciar o Cloud Shell em uma janela dividida do navegador. Ou você pode abrir o Cloud Shell em uma guia separada do navegador.
    • Se estiver usando a CLI do Azure localmente, inicie o aplicativo de console da CLI e faça logon na CLI do Azure.
  2. Execute az extension add para instalar ou atualizar a extensão azure-iot para a versão atual.

    az extension add --upgrade --name azure-iot
    
  3. No aplicativo da CLI, execute o comando az group create para criar um grupo de recursos. O comando a seguir cria um grupo de recursos chamado MyResourceGroup na localização eastus.

    Observação

    Opcionalmente, você pode definir um local diferente. Para ver os locais disponíveis, execute az account list-locations. Este início rápido usa eastus, conforme mostrado no comando de exemplo.

    az group create --name MyResourceGroup --location eastus
    
  4. Execute o comando az iot hub create para criar um Hub IoT. Pode levar alguns minutos para criar um Hub IoT.

    YourIotHubName. Substitua esse espaço reservado e as chaves ao redor no comando a seguir, usando o nome escolhido para o hub IoT. Um nome de Hub IoT deve ser exclusivo globalmente no Azure. Use o nome do hub IoT no restante deste guia de início rápido, sempre que ver o espaço reservado.

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

Verificar autenticação de dispositivo

Um dispositivo deve autenticar-se com o hub antes que ele possa trocar dados com o hub. Você pode usar a ferramenta de Dispositivos IoT na seção Gerenciamento de Dispositivos do portal para gerenciar os dispositivos e verificar as chaves de autenticação que estão utilizando. Nesta seção do tutorial, você adiciona um novo dispositivo de teste, recupera a chave e verifica se o dispositivo de teste pode conectar-se ao hub. Posteriormente, você redefinirá a chave de autenticação para observar o que acontece quando um dispositivo tenta usar uma chave desatualizada.

Registrar um dispositivo

Um dispositivo deve ser registrado no hub IoT antes de poder se conectar. Nesta seção, você usará a CLI do Azure para criar uma identidade do dispositivo.

Se você já tiver um dispositivo registrado em seu hub IoT, poderá ignorar essa seção.

Para criar uma identidade do dispositivo:

  1. Execute o comando az iot hub device-identity create no seu shell da CLI. Esse comando cria a identidade do dispositivo.

    your_iot_hub_name. substitua o espaço reservado abaixo pelo nome escolhido para o hub IoT.

    myDevice. Você pode usar esse nome para a identidade do dispositivo ao longo deste artigo ou fornecer um nome de dispositivo diferente.

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. Execute o comando az iot hub device-identity connection-string show.

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    A saída da cadeia de conexão está no seguinte formato:

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. Salve a cadeia de conexão em uma localização segura.

Observação

Mantenha seu aplicativo da CLI aberto. Você o usará em etapas posteriores.

Simular um dispositivo de teste

Para simular um dispositivo enviando telemetria para o Hub IoT, execute o aplicativo de dispositivo simulado Node.js que você baixou anteriormente.

  1. Em uma janela do terminal no computador de desenvolvimento, navegue até a pasta raiz do projeto Node.js de exemplo que você baixou. Em seguida, navegue até a pasta iot-hub\Tutorials\ConnectivityTests.

  2. Na janela de terminal, execute os seguintes comandos para instalar as bibliotecas necessárias e executar o aplicativo de dispositivo simulado. Use a cadeia de conexão do dispositivo que você anotou quando registrou o dispositivo.

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    A janela do terminal exibe uma mensagem de sucesso depois de se conectar ao hub:

    Screenshot that shows the simulated device connecting.

Agora, você autenticou com êxito a partir de um dispositivo usando uma chave de dispositivo gerada pelo Hub IoT.

Redefinir chaves

Nesta seção, você redefine a chave do dispositivo e observa o erro quando o dispositivo simulado tenta conectar-se.

  1. Para redefinir a chave primária do dispositivo, execute o comando az iot hub device-identity update:

    # Generate a new Base64 encoded key using the current date
    read key < <(date +%s | sha256sum | base64 | head -c 32)
    
    # Reset the primary device key for test device
    az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
    
  2. Na janela do terminal no computador de desenvolvimento, execute o aplicativo de dispositivo simulado novamente:

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    Desta vez, você verá um erro de autenticação quando o aplicativo tentar conectar-se:

    Screenshot that shows the connection failing after the key reset.

Gerar um token SAS (Assinatura de Acesso Compartilhado)

Se o dispositivo usar um dos SDKs do dispositivo do Hub IoT, o código da biblioteca do SDK gerará o token SAS utilizado para autenticar com o hub. Um token SAS é gerado a partir do nome do hub, do nome do dispositivo e da chave do dispositivo.

Em alguns cenários, como em um gateway de protocolo de nuvem ou como parte de um esquema de autenticação personalizado, você poderá precisar gerar o token SAS por conta própria. Para solucionar problemas com o código de geração do SAS, é útil gerar um token SAS válido para utilizar durante o teste.

Observação

O exemplo de SimulatedDevice-2.js inclui exemplos de geração de um token SAS com e sem o SDK.

  1. Execute o comando az iot hub generate-sas-token para gerar um token SAS conhecido e válido usando a CLI:

    az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
    
  2. Copie o texto completo do token SAS gerado. Um token SAS é semelhante ao seguinte exemplo: SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111

  3. Em uma janela de terminal no computador de desenvolvimento, navegue até a pasta raiz do projeto Node.js de exemplo que você baixou. Em seguida, navegue até a pasta iot-hub\Tutorials\ConnectivityTests.

  4. Na janela de terminal, execute os seguintes comandos para instalar as bibliotecas necessárias e executar o aplicativo de dispositivo simulado:

    npm install
    node SimulatedDevice-2.js "{Your SAS token}"
    

    A janela do terminal exibe uma mensagem de sucesso depois de se conectar ao hub usando o token SAS:

    Screenshot that shows a successful connection using a SAS token.

Agora, você autenticou com êxito de um dispositivo usando um token SAS de teste gerado por um comando da CLI. O arquivo SimulatedDevice-2.js inclui código de exemplo que mostra como gerar um token SAS no código.

Protocolos

Um dispositivo pode usar qualquer um dos protocolos a seguir para conectar o Hub IoT:

Protocolo Porta de saída
MQTT 8883
MQTT sobre WebSockets 443
AMQP 5671
AMQP sobre WebSockets 443
HTTPS 443

Se a porta de saída estiver bloqueada por um firewall, o dispositivo não poderá conectar:

Screenshot that shows a connection error when the outbound port is blocked.

Verificar conectividade de dispositivo para nuvem

Depois que um dispositivo se conectar, ele poderá enviar dados telemétricos para o seu Hub IoT. Esta seção mostra como é possível verificar se a telemetria enviada pelo dispositivo alcança o hub.

Enviar mensagens do dispositivo para a nuvem

  1. Como redefinimos a cadeia de conexão para seu dispositivo na seção anterior, use o comando az iot hub device-identity connection-string show para recuperar a cadeia de conexão atualizada:

    az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
    
  2. Para executar um dispositivo simulado que envia mensagens, navegue até a pasta iot-hub\Tutorials\ConnectivityTests no código que você baixou.

  3. Na janela de terminal, execute os seguintes comandos para instalar as bibliotecas necessárias e executar o aplicativo de dispositivo simulado:

    npm install
    node SimulatedDevice-3.js "{your_device_connection_string}"
    

    A janela do terminal exibe informações conforme envia a telemetria para o hub:

    Screenshot that shows the simulated device sending messages.

Monitorar as mensagens de entrada

Você pode usar Métricas no portal para verificar se as mensagens de telemetria estão alcançando o hub IoT.

  1. No portal do Azure, selecione o hub IoT na lista suspensa Recursos.

  2. Selecione Métricas na seção Monitoramento do menu de navegação.

  3. Selecione Mensagens de telemetria enviadas como a métrica e defina o intervalo de tempo para Última hora. O gráfico mostra a contagem agregada de mensagens enviadas pelo dispositivo simulado:

    Screenshot showing left pane metrics.

Demora alguns minutos para que as métricas sejam disponibilizadas após o início do dispositivo simulado.

Verificar conectividade de nuvem para dispositivo

Esta seção mostra como é possível fazer uma chamada de método direto de teste a um dispositivo para verificar a conectividade de nuvem para dispositivo. Você executa um dispositivo simulado no computador de desenvolvimento para ouvir chamadas de método direto do hub.

  1. Em uma janela de terminal, use o comando a seguir para executar o aplicativo de dispositivo simulado:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. Em uma janela separada, use o comando az iot hub invoke-device-method para chamar um método direto no dispositivo:

    az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
    

    O dispositivo simulado imprime uma mensagem para o console quando recebe uma chamada de método direto:

    Screenshot that shows the device confirming that the direct method was received.

    Quando o dispositivo simulado recebe com êxito a chamada de método direto, ele envia uma confirmação de volta ao hub:

    Screenshot showing that the device returns a direct method acknowledgment.

Verificar a sincronização gêmea

Os dispositivos usam gêmeos para sincronizar o estado entre o dispositivo e o hub. Nesta seção, você usa os comandos da CLI para enviar propriedades desejadas a um dispositivo e ler as propriedades relatadas enviadas pelo dispositivo.

O dispositivo simulado usado nesta seção envia as propriedades relatadas ao hub sempre que ele é inicializado e imprime as propriedades desejadas no console sempre que elas são recebidas.

  1. Em uma janela de terminal, use o comando a seguir para executar o aplicativo de dispositivo simulado:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. Em uma janela separada, execute o comando az iot hub device-twin show para verificar se o hub recebeu as propriedades relatadas do dispositivo:

    az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    Na saída do comando, é possível ver a propriedade devicelaststarted na seção de propriedades relatadas. Esta propriedade mostra a data e a hora em que você iniciou o dispositivo simulado pela última vez.

    Screenshot showing the reported properties of a device.

  3. Para verificar se o hub pode enviar os valores de propriedade desejados ao dispositivo, use o comando az iot hub device-twin update:

    az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    O dispositivo simulado imprime uma mensagem quando recebe uma atualização de propriedade desejada do hub:

    Screenshot that shows the device confirming that the desired properties update was received.

Além de receber alterações de propriedades desejadas conforme elas são feitas, o dispositivo simulado verifica automaticamente as propriedades desejadas quando é inicializado.

Limpar os recursos

Se você não precisar mais do hub IoT, exclua-o junto com o grupo de recursos no portal. Para isso, selecione o grupo de recursos que contém o Hub IoT e clique em Excluir.

Próximas etapas

Neste tutorial, você aprendeu como verificar as chaves do dispositivo, verificar conectividade de dispositivo para nuvem, verificar conectividade de nuvem para dispositivo e verificar a sincronização de dispositivo gêmeo. Para saber mais sobre como monitorar o Hub IoT, visite o artigo sobre como fazer monitoramento do Hub IoT.