Como conectar dispositivos por meio de um gateway transparente do IoT Edge
Um dispositivo IoT Edge pode atuar como um gateway que fornece uma conexão entre outros dispositivos em uma rede local e seu aplicativo IoT Central. Você usa um gateway quando o dispositivo não pode acessar seu aplicativo IoT Central diretamente.
O IoT Edge suporta os padrões de gateway transparente e de tradução. Este artigo resume como implementar o padrão de gateway transparente. Nesse padrão, o gateway passa mensagens do dispositivo downstream para o ponto de extremidade do Hub IoT em seu aplicativo IoT Central. O gateway não manipula as mensagens à medida que elas passam. No IoT Central, cada dispositivo downstream aparece como filho para o dispositivo de gateway:
Importante
Este artigo inclui etapas para conectar um dispositivo usando uma assinatura de acesso compartilhado, também chamada de autenticação de chave simétrica. Esse método de autenticação é conveniente para testes e avaliações, mas autenticar um dispositivo usando certificados X.509 é uma abordagem mais segura. Para saber mais, consulte Práticas > recomendadas de segurança Segurança de conexão.
Para simplificar, este artigo usa máquinas virtuais para hospedar os dispositivos downstream e gateway. Em um cenário real, o dispositivo downstream e o gateway seriam executados em dispositivos físicos em sua rede local.
Este artigo mostra como implementar o cenário usando o tempo de execução do IoT Edge 1.4.
Pré-requisitos
Para concluir as etapas neste artigo, você precisa:
Uma subscrição ativa do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Um aplicativo IoT Central criado a partir do modelo de aplicativo personalizado. Para saber mais, consulte Criar um aplicativo do IoT Central.
Para seguir os passos descritos neste artigo, transfira os seguintes ficheiros para o computador:
- Modelo de dispositivo de termostato (thermostat-1.json) - este arquivo é o modelo de dispositivo para os dispositivos a jusante.
- Manifesto de gateway transparente (EdgeTransparentGatewayManifest.json) - este arquivo é o manifesto de implantação do IoT Edge para o dispositivo de gateway.
Importar manifesto de implantação
Cada dispositivo IoT Edge precisa de um manifesto de implantação para configurar o tempo de execução do IoT Edge. Para importar um manifesto de implantação para o gateway transparente do IoT Edge:
Navegue até Manifestos de borda.
Selecione + Novo, insira um nome para o manifesto de implantação, como Gateway transparente, e carregue o arquivo de EdgeTransparentGatewayManifest.json baixado anteriormente.
Selecione Criar para salvar o manifesto de implantação em seu aplicativo.
Adicionar modelos de dispositivo
Tanto os dispositivos downstream quanto o dispositivo gateway podem usar modelos de dispositivo no IoT Central. O IoT Central permite modelar a relação entre seus dispositivos downstream e seu gateway para que você possa visualizá-los e gerenciá-los depois que eles estiverem conectados. Um modelo de dispositivo não é necessário para anexar um dispositivo downstream a um gateway.
Para criar um modelo de dispositivo para um dispositivo downstream, crie um modelo de dispositivo padrão que modele os recursos do seu dispositivo. O exemplo mostrado neste artigo usa o modelo de dispositivo de termostato que você baixou.
Para criar um modelo de dispositivo para um dispositivo downstream:
Crie um modelo de dispositivo e escolha dispositivo IoT como o tipo de modelo.
Na página Personalizar do assistente, insira um nome como Termostato para o modelo de dispositivo.
Depois de criar o modelo de dispositivo, selecione Importar um modelo. Selecione um modelo como o arquivo de thermostat-1.json que você baixou anteriormente.
Para gerar algumas vistas predefinidas para o termostato, selecione vistas e, em seguida, selecione Gerar vistas predefinidas.
Publique o modelo de dispositivo.
Para criar um modelo de dispositivo para um dispositivo de gateway transparente do IoT Edge:
Crie um modelo de dispositivo e escolha Azure IoT Edge como o tipo de modelo.
Na página Personalizar do assistente, insira um nome como Edge Gateway para o modelo de dispositivo.
Na página Personalizar do assistente, marque Este é um dispositivo de gateway.
Na página Revisão, selecione Criar.
Na página Criar um modelo, selecione Modelo personalizado.
Adicione uma entrada em Relações ao modelo de dispositivo downstream.
A captura de tela a seguir mostra a página Relações de um dispositivo de gateway IoT Edge com dispositivos downstream que usam o modelo de dispositivo Termostato :
A captura de tela anterior mostra um modelo de dispositivo de gateway IoT Edge sem módulos definidos. Um gateway transparente não requer nenhum módulo porque o tempo de execução do IoT Edge encaminha mensagens dos dispositivos downstream diretamente para o IoT Central. Se o próprio gateway precisar enviar telemetria, sincronizar propriedades ou manipular comandos, você poderá definir esses recursos no componente raiz ou em um módulo.
Adicione todas as propriedades e visualizações de nuvem necessárias antes de publicar o gateway e os modelos de dispositivo downstream.
Adicionar os dispositivos
Ao adicionar os dispositivos ao seu aplicativo IoT Central, você pode definir a relação entre os dispositivos downstream e o gateway transparente.
Para adicionar os dispositivos:
Navegue até a página de dispositivos em seu aplicativo IoT Central.
Adicione uma instância do dispositivo IoT Edge de gateway transparente. Ao adicionar o dispositivo, certifique-se de selecionar o manifesto de implantação de gateway transparente. Neste artigo, o ID do dispositivo de gateway é
edgegateway
.Adicione uma ou mais instâncias do dispositivo downstream. Neste artigo, os dispositivos a jusante são termostatos com IDs
thermostat1
ethermostat2
.Na lista de dispositivos, selecione cada dispositivo downstream e selecione Anexar ao gateway.
A captura de tela a seguir mostra que você pode exibir a lista de dispositivos conectados a um gateway na página Dispositivos downstream :
Em um gateway transparente, os dispositivos downstream se conectam ao próprio gateway, não a um módulo personalizado hospedado pelo gateway.
Antes de implantar os dispositivos, você precisa:
- ID Escopo do seu aplicativo IoT Central.
- Valores de ID do dispositivo para o gateway e dispositivos downstream.
- Valores de chave primária para o gateway e dispositivos downstream.
Para encontrar esses valores, navegue até cada dispositivo na lista de dispositivos e selecione Conectar. Anote esses valores antes de continuar.
Gorjeta
Você pode conectar os dispositivos e estabelecer relacionamentos sem primeiro criar modelos de dispositivo para os dispositivos. Você pode anexar um dispositivo downstream não atribuído a um dispositivo de gateway não atribuído.
Implantar o gateway e os dispositivos
Para permitir que você experimente esse cenário, as etapas a seguir mostram como implantar o gateway e os dispositivos downstream nas máquinas virtuais do Azure.
Gorjeta
Para saber como implantar o tempo de execução do IoT Edge em um dispositivo físico, consulte Criar um dispositivo IoT Edge na documentação do IoT Edge.
Para experimentar o cenário de gateway transparente, selecione o botão a seguir para implantar duas máquinas virtuais Linux. Uma máquina virtual tem o tempo de execução do IoT Edge 1.4 instalado e é o gateway transparente do IoT Edge. A outra máquina virtual é um dispositivo downstream onde você executa código para enviar telemetria de termostato simulada:
Quando as duas máquinas virtuais estiverem implantadas e em execução, verifique se o dispositivo de gateway IoT Edge está em execução na edgegateway
máquina virtual:
Vá para a página Dispositivos em seu aplicativo IoT Central. Se o dispositivo de gateway do IoT Edge estiver conectado ao IoT Central, seu status será Provisionado.
Abra o dispositivo de gateway IoT Edge e verifique o status dos módulos na página Módulos . Se o tempo de execução do IoT Edge tiver sido iniciado com êxito, o status dos módulos $edgeAgent e $edgeHub será Executando:
Gorjeta
Talvez seja necessário aguardar vários minutos enquanto a máquina virtual é iniciada e o dispositivo é provisionado em seu aplicativo IoT Central.
Configurar o gateway
Para que seu dispositivo IoT Edge funcione como um gateway transparente, ele precisa de alguns certificados para provar sua identidade para qualquer dispositivo downstream. Este artigo usa certificados de demonstração. Em um ambiente de produção, use certificados de sua autoridade de certificação.
Para gerar os certificados de demonstração e instalá-los em seu dispositivo de gateway:
Use SSH para se conectar e entrar na máquina virtual do dispositivo gateway.
Execute os seguintes comandos para clonar o repositório do IoT Edge e gerar seus certificados de demonstração:
# Clone the repo cd ~ git clone https://github.com/Azure/iotedge.git # Generate the demo certificates mkdir certs cd certs cp ~/iotedge/tools/CACertificates/*.cnf . cp ~/iotedge/tools/CACertificates/certGen.sh . ./certGen.sh create_root_and_intermediate ./certGen.sh create_edge_device_ca_certificate "mycacert"
Depois de executar os comandos anteriores, os seguintes arquivos estão prontos para uso nas próximas etapas:
- ~/certs/certs/azure-iot-test-only.root.ca.cert.pem - O certificado de CA raiz usado para criar todos os outros certificados de demonstração para testar um cenário do IoT Edge.
- ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem - Um certificado de CA de dispositivo referenciado a partir do arquivo de configuração do IoT Edge. Em um cenário de gateway, esse certificado de CA é como o dispositivo IoT Edge verifica sua identidade para dispositivos downstream.
- ~/certs/private/iot-edge-device-mycacert.key.pem - A chave privada associada ao certificado da autoridade de certificação do dispositivo.
Para saber mais sobre esses certificados de demonstração, consulte Criar certificados de demonstração para testar os recursos do dispositivo IoT Edge.
Abra o arquivo config.toml em um editor de texto. Por exemplo:
sudo nano /etc/aziot/config.toml
Localize as seguintes configurações no arquivo de configuração. Adicione as configurações do certificado da seguinte maneira:
trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem" [edge_ca] cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem" pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
O exemplo anterior pressupõe que você está conectado como AzureUser e criou um certificado de CA de dispositivo chamado "mycacert".
Salve as alterações e reinicie o tempo de execução do IoT Edge:
sudo iotedge config apply
Se o tempo de execução do IoT Edge for iniciado com êxito após as alterações, o status dos módulos $edgeAgent e $edgeHub mudará para Executando na página Módulos do seu dispositivo de gateway no IoT Central.
Se o tempo de execução não iniciar, verifique as alterações feitas no arquivo de configuração do IoT Edge e consulte Solucionar problemas do dispositivo IoT Edge.
Seu gateway transparente agora está configurado e pronto para começar a encaminhar telemetria de dispositivos downstream.
Provisionar um dispositivo a jusante
O IoT Central depende do Device Provisioning Service (DPS) para provisionar dispositivos no IoT Central. Atualmente, o IoT Edge não pode usar o DPS provisionar um dispositivo downstream para seu aplicativo IoT Central. As etapas a seguir mostram como provisionar o thermostat1
dispositivo manualmente. Para concluir essas etapas, você precisa de um ambiente com Python instalado e conectividade com a Internet. Verifique o SDK do Python do Azure IoT para obter os requisitos de versão atuais do Python. O Azure Cloud Shell tem Python pré-instalado:
Execute o seguinte comando para instalar o
azure.iot.device
módulo:pip install azure.iot.device
Execute o seguinte comando para baixar o script Python que faz o provisionamento do dispositivo:
wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
Para provisionar o
thermostat1
dispositivo downstream em seu aplicativo IoT Central, execute os seguintes comandos, substituindo{your application id scope}
e{your device primary key}
. Você anotou esses valores quando adicionou os dispositivos ao seu aplicativo IoT Central:export IOTHUB_DEVICE_DPS_DEVICE_ID=thermostat1 export IOTHUB_DEVICE_DPS_ID_SCOPE={your application id scope} export IOTHUB_DEVICE_DPS_DEVICE_KEY={your device primary key} python provision_device.py
Em seu aplicativo IoT Central, verifique se o status do dispositivo para o thermostat1
dispositivo agora é Provisionado.
Configurar um dispositivo downstream
Na seção anterior, você configurou a edgegateway
máquina virtual com os certificados de demonstração para permitir que ela seja executada como gateway. A leafdevice
máquina virtual está pronta para você instalar um simulador de termostato que usa o gateway para se conectar ao IoT Central.
A leafdevice
máquina virtual precisa de uma cópia do certificado de autoridade de certificação raiz que você criou na edgegateway
máquina virtual. Copie o arquivo /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem da máquina virtual para seu edgegateway
diretório base na leafdevice
máquina virtual. Você pode usar o comando scp para copiar arquivos entre máquinas virtuais Linux. Por exemplo, da leafdevice
máquina:
scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .
Para saber como verificar a conexão do dispositivo downstream com o gateway, consulte Testar a conexão do gateway.
Para executar o simulador de termostato na leafdevice
máquina virtual:
Use SSH para se conectar e entrar em sua
leafdevice
máquina virtual.Faça o download do exemplo Python para o seu diretório inicial:
cd ~ wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
Instale o módulo Python do dispositivo Azure IoT:
sudo apt update sudo apt install python3-pip pip3 install azure.iot.device
Defina as variáveis de ambiente para configurar o exemplo. Substitua
{your device shared key}
pela chave primária dathermostat1
anotação anterior. Essas variáveis assumem que o nome da máquina virtual do gateway éedgegateway
e o ID do dispositivo de termostato éthermostat1
:export IOTHUB_DEVICE_SECURITY_TYPE=connectionString export IOTHUB_DEVICE_CONNECTION_STRING="HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}" export IOTEDGE_ROOT_CA_CERT_PATH=~/azure-iot-test-only.root.ca.cert.pem
Observe como a cadeia de conexão usa o nome do dispositivo de gateway e não o nome de um hub IoT.
Para executar o código, use o seguinte comando:
python3 simple_thermostat.py
A saída deste comando tem a seguinte aparência:
Connecting using Connection String HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key} Listening for command requests and property updates Press Q to quit Sending telemetry for temperature Sent message Sent message Sent message ...
Gorjeta
Se vir um erro quando o dispositivo a jusante tentar ligar. Tente executar novamente as etapas de provisionamento do dispositivo.
Para ver a telemetria no IoT Central, navegue até a página Visão geral do dispositivo termostato1 :
Na página Sobre, você pode exibir valores de propriedade enviados do dispositivo downstream e, na página Comando, pode chamar comandos no dispositivo downstream.