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:
Use o ambiente Bash no Azure Cloud Shell. Para saber mais, confira Início rápido do Azure Cloud Shell – Bash.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para saber mais, confira Como executar a CLI do Azure em um contêiner do Docker.
- Entre na CLI do Azure usando o comando az login.
- Quando solicitado, instale as extensões da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
- Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
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-seazure-cli-iot-ext
. Você deve ter apenas uma versão instalada por vez. Use o comandoaz 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:
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.
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
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
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:
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}
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>
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.
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.
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:
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.
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}
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:
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.
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}
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
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.
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:
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:
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
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}
Para executar um dispositivo simulado que envia mensagens, navegue até a pasta iot-hub\Tutorials\ConnectivityTests no código que você baixou.
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:
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.
No portal do Azure, selecione o hub IoT na lista suspensa Recursos.
Selecione Métricas na seção Monitoramento do menu de navegação.
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:
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.
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}"
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:
Quando o dispositivo simulado recebe com êxito a chamada de método direto, ele envia uma confirmação de volta ao hub:
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.
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}"
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.
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:
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.