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:

Diagrama que mostra o IoT Edge como um gateway transparente.

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:

Para seguir os passos descritos neste artigo, transfira os seguintes ficheiros para o computador:

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:

  1. Navegue até Manifestos de borda.

  2. Selecione + Novo, insira um nome para o manifesto de implantação, como Gateway transparente, e carregue o arquivo de EdgeTransparentGatewayManifest.json baixado anteriormente.

  3. 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:

  1. Crie um modelo de dispositivo e escolha dispositivo IoT como o tipo de modelo.

  2. Na página Personalizar do assistente, insira um nome como Termostato para o modelo de dispositivo.

  3. 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.

  4. Para gerar algumas vistas predefinidas para o termostato, selecione vistas e, em seguida, selecione Gerar vistas predefinidas.

  5. Publique o modelo de dispositivo.

Para criar um modelo de dispositivo para um dispositivo de gateway transparente do IoT Edge:

  1. Crie um modelo de dispositivo e escolha Azure IoT Edge como o tipo de modelo.

  2. Na página Personalizar do assistente, insira um nome como Edge Gateway para o modelo de dispositivo.

  3. Na página Personalizar do assistente, marque Este é um dispositivo de gateway.

  4. Na página Revisão, selecione Criar.

  5. Na página Criar um modelo, selecione Modelo personalizado.

  6. 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 :

Captura de tela mostrando a relação do modelo de dispositivo do gateway IoT Edge com um modelo de dispositivo downstream do 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:

  1. Navegue até a página de dispositivos em seu aplicativo IoT Central.

  2. 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.

  3. Adicione uma ou mais instâncias do dispositivo downstream. Neste artigo, os dispositivos a jusante são termostatos com IDs thermostat1 e thermostat2.

  4. 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 :

Captura de tela que mostra a lista de dispositivos downstream conectados a um gateway transparente.

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:

Botão Implantar no Azure

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:

  1. 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.

  2. 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:

    Captura de tela mostrando os módulos $edgeAgent e $edgeHub versão 1.4 em execução no gateway IoT Edge.

    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:

  1. Use SSH para se conectar e entrar na máquina virtual do dispositivo gateway.

  2. 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.

  3. Abra o arquivo config.toml em um editor de texto. Por exemplo:

    sudo nano /etc/aziot/config.toml
    
  4. 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".

  5. 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:

  1. Execute o seguinte comando para instalar o azure.iot.device módulo:

    pip install azure.iot.device
    
  2. 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
    
  3. 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:

  1. Use SSH para se conectar e entrar em sua leafdevice máquina virtual.

  2. 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
    
  3. Instale o módulo Python do dispositivo Azure IoT:

    sudo apt update
    sudo apt install python3-pip
    pip3 install azure.iot.device
    
  4. Defina as variáveis de ambiente para configurar o exemplo. Substitua {your device shared key} pela chave primária da thermostat1 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.

  5. 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.

  6. Para ver a telemetria no IoT Central, navegue até a página Visão geral do dispositivo termostato1 :

    Captura de ecrã a mostrar a telemetria do dispositivo a jusante.

    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.