Tutorial: Atualização de dispositivo do Azure para o Hub IoT usando uma imagem do Raspberry Pi
A Atualização de Dispositivo para o Hub IoT do Azure dá suporte a atualizações baseadas em imagem, pacote e script. Este tutorial demonstra uma atualização de dispositivo baseada em imagem de ponta a ponta para atualização do Hub IoT usando uma imagem Yocto em uma placa Raspberry Pi 3 B+.
As atualizações de imagem fornecem um alto nível de confiança no estado final do dispositivo e não representam os mesmos desafios de gerenciamento de pacotes e dependências que as atualizações baseadas em pacotes ou scripts. É mais fácil replicar os resultados de uma atualização de imagem entre um ambiente de pré-produção e de produção ou adotar facilmente um modelo de failover A/B.
Neste tutorial:
- Transfira e instale uma atualização de imagem.
- Atribua uma tag ao seu dispositivo IoT.
- Importe a atualização da imagem.
- Implante a atualização de imagem.
- Exiba o histórico de implantação da atualização.
Pré-requisitos
Uma conta e instância de Atualização de Dispositivo configuradas com um hub IoT.
Uma placa IoT Raspberry Pi 3 conectada via Ethernet ao hardware que pode baixar e extrair os arquivos de imagem e controlar o dispositivo.
Nota
As atualizações de imagem neste tutorial foram validadas em uma placa Raspberry Pi B3.
Registrar o dispositivo e obter a cadeia de conexão
Adicione seu dispositivo ao registro do dispositivo em seu hub IoT e obtenha a cadeia de conexão que o Hub IoT gera para o dispositivo.
- No portal do Azure, abra a página do hub IoT associada à sua instância de Atualização de Dispositivo.
- No painel de navegação esquerdo, selecione Dispositivos de gerenciamento de>dispositivos.
- Na página Dispositivos, selecione Adicionar dispositivo.
- Em ID do dispositivo, insira um nome para o dispositivo. Verifique se a caixa de seleção Gerar chaves automaticamente está marcada.
- Selecione Guardar. O dispositivo aparece na lista na página Dispositivos .
- Na página Dispositivos, selecione o dispositivo que registou.
- Na página do dispositivo, selecione o ícone Copiar ao lado de Cadeia de conexão (chave primária). Salve esta cadeia de conexão de dispositivo para usar ao configurar o agente de Atualização de Dispositivo.
Nota
Para fins de demonstração, este tutorial usa uma cadeia de conexão de dispositivo para autenticar e se conectar ao hub IoT. Para cenários de produção, é melhor usar a identidade do módulo e o IoT Identity Service para provisionar dispositivos. Para obter mais informações, consulte Provisionamento do agente de Atualização de Dispositivo.
Configurar o Raspberry Pi
O arquivo Tutorial_RaspberryPi3.zip tem todos os arquivos necessários para o tutorial. Baixe o arquivo na seção Ativos da versão mais recente na página Lançamentos de Atualização de Dispositivo do GitHub e descompacte-o.
Na pasta Tutorial_RaspberryPi3 extraída, a imagem base que você pode piscar na placa do Raspberry Pi é adu-base-image-raspberrypi3.wic. A imagem base usa uma compilação Yocto baseada na versão 3.4.4. A imagem tem o agente de Atualização de Dispositivo e SWUpdate, que habilita a atualização de partição dupla de Atualização de Dispositivo. Para obter mais informações sobre as camadas Yocto, consulte Construir um sistema baseado em Linux personalizado com o agente de Atualização de Dispositivo usando o Projeto Yocto.
Os ficheiros de atualização importados através da Atualização de Dispositivo são:
- Arquivo SWUpdate adu-update-image-raspberrypi3-1.2.0.swu
- Script SWUpdate personalizado example-a-b-update.sh
- Manifesto EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
Use bmaptool para piscar o cartão SD
Importante
O software Azure Device Update for IoT Hub está sujeito aos seguintes termos de licença:
Leia os termos de licença antes de usar o agente. A instalação e utilização do agente constituem a aceitação destes termos. Se você não concordar com os termos de licença, não use o agente de Atualização de Dispositivo.
Use uma ferramenta de piscamento do sistema operacional para instalar a imagem base de Atualização de dispositivo no cartão SD que você usa no dispositivo Raspberry Pi. As instruções a seguir usam bmaptool
para piscar para o cartão SD. Substitua o espaço reservado pelo nome do <device>
dispositivo e o espaço reservado <path to image>
pelo caminho para o arquivo de imagem baixado.
Instale o
bmap-tools
utilitário se não o tiver.sudo apt-get install bmap-tools
Localize o caminho do cartão SD em /dev. O caminho deve ser algo como /dev/sd* ou /dev/mmcblk*. Você pode usar o
dmesg
utilitário para ajudar a localizar o caminho correto.Desmonte todas as partições montadas antes de piscar.
sudo umount /dev/<device>
Certifique-se de que tem permissões de escrita para o dispositivo.
sudo chmod a+rw /dev/<device>
Atualize o cartão SD.
sudo bmaptool copy <path to image> /dev/<device>
Gorjeta
Para piscar mais rápido, você pode baixar o arquivo bimap e o arquivo de imagem e colocá-los no mesmo diretório.
Configurar o agente de Atualização de Dispositivo no Raspberry Pi
Certifique-se de que o Raspberry Pi está conectado à rede.
Proteja o shell (SSH) no Raspberry Pi usando o seguinte comando em uma janela do PowerShell:
ssh raspberrypi3 -l root
Criar os arquivos de configuração da Atualização de Dispositivo
O du-config.json de Atualização de Dispositivo e os arquivos de configuração du-diagnostics-config.json devem estar no dispositivo. Para criar os arquivos, execute os seguintes comandos no terminal conectado ao Raspberry Pi.
Para criar o arquivo du-config.json ou abri-lo para edição, execute o seguinte comando:
nano /adu/du-config.json
O editor abre o arquivo du-config.json . Se você estiver criando o arquivo, ele estará vazio. Copie e cole o código a seguir no arquivo, substituindo os valores de exemplo por quaisquer configurações necessárias para seu dispositivo. Substitua a cadeia de caracteres de exemplo
connectionData
pela cadeia de conexão do dispositivo copiada na etapa de registro do dispositivo.{ "schemaVersion": "1.0", "aduShellTrustedUsers": [ "adu", "do" ], "manufacturer": "contoso", "model": "virtual-vacuum-v2", "agents": [ { "name": "main", "runas": "adu", "connectionSource": { "connectionType": "string", "connectionData": "HostName=<hub_name>.azure-devices.net;DeviceId=<device_id>;SharedAccessKey=<device_key>" }, "manufacturer": "contoso", "model": "virtual-vacuum-v2" } ] }
Pressione Ctrl+X para sair do editor e digite y para salvar as alterações.
Crie o arquivo du-diagnostics-config.json usando comandos semelhantes. Crie e abra o arquivo:
nano /adu/du-diagnostics-config.json
Copie e cole o seguinte código du-diagnostics-config.json no arquivo. Os valores são os locais de log de Atualização de Dispositivo padrão e você precisará alterá-los somente se sua configuração for diferente do padrão.
{ "logComponents":[ { "componentName":"adu", "logPath":"/adu/logs/" }, { "componentName":"do", "logPath":"/var/log/deliveryoptimization-agent/" } ], "maxKilobytesToUploadPerLogPath":50 }
Pressione Ctrl+X para sair do editor e digite y para salvar as alterações.
Use o comando a seguir para mostrar os arquivos localizados no diretório /adu/ . Você deve ver ambos os arquivos de configuração.
ls -la /adu/
Use o comando a seguir para reiniciar o daemon do sistema de Atualização de Dispositivo e garantir que as configurações sejam aplicadas.
systemctl start deviceupdate-agent
Verifique se o agente está ativo executando o seguinte comando:
systemctl status deviceupdate-agent
O status deve aparecer como vivo e verde.
Conectar-se ao dispositivo no Hub IoT e adicionar uma tag de grupo
Na página do hub IoT do portal do Azure para sua instância de Atualização de Dispositivo, selecione Dispositivos de gerenciamento>de dispositivos na navegação à esquerda.
Na página Dispositivos, selecione o nome do dispositivo.
Na parte superior da página do dispositivo, selecione Dispositivo gêmeo.
Na página Dispositivo gêmeo, na
"reported"
seção da seção gêmeo"properties"
dispositivo, procure a versão do kernel Linux para seu dispositivo.Para um novo dispositivo que não recebeu uma atualização da Atualização de Dispositivo, o valor da propriedade DeviceManagement:DeviceInformation:1.swVersion representa a versão de firmware em execução no dispositivo. Depois que o dispositivo tiver uma atualização aplicada, o valor da propriedade AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId representa a versão do firmware.
Os nomes dos arquivos de imagem base e atualização têm o formato adu-image type-image-machine-version<>>< number.<><extensão>. Observe os números de versão a serem usados ao importar a atualização.
Adicionar uma etiqueta de grupo
A Atualização de Dispositivo organiza automaticamente os dispositivos em grupos com base nas etiquetas atribuídas e nas propriedades de compatibilidade. Cada dispositivo pode pertencer a apenas um grupo, mas os grupos podem ter vários subgrupos para classificar diferentes classes de dispositivo. Para obter mais informações sobre tags e grupos, consulte Gerenciar grupos de dispositivos.
No gêmeo de dispositivo, exclua todos os valores de tag de Atualização de Dispositivo existentes definindo-os como nulos e adicione a nova tag de grupo de Atualização de Dispositivo a seguir. Se você estiver usando uma Identidade de Módulo com o agente de Atualização de Dispositivo, adicione a tag no Gêmeo de Identidade de Módulo em vez do gêmeo de dispositivo.
"tags": { "ADUGroup": "<CustomTagValue>" },
A captura de tela a seguir mostra onde no arquivo para adicionar a tag.
Selecione Guardar.
Importar a atualização
Na página do hub IoT do portal do Azure para sua instância de Atualização de Dispositivo, selecione Atualizações de Gerenciamento>de Dispositivos na navegação à esquerda.
Na página Atualizações, selecione Importar uma nova atualização.
Na página Importar atualização, selecione Selecionar do contêiner de armazenamento.
Na página Contas de armazenamento, selecione uma conta de armazenamento existente ou crie uma nova conta selecionando Conta de armazenamento.
Na página Contêineres, selecione um contêiner existente ou crie um novo contêiner selecionando Contêiner. Use o contêiner para preparar os arquivos de atualização para importação.
Gorjeta
Para evitar a importação acidental de arquivos de atualizações anteriores, use um novo contêiner sempre que importar uma atualização. Se você não usar um novo contêiner, certifique-se de excluir todos os arquivos do contêiner existente.
Na página do contêiner, selecione Carregar. Arraste e solte, ou procure e selecione, os seguintes arquivos de atualização da pasta Tutorial_RaspberryPi3 que você baixou:
- adu-update-image-raspberrypi3-1.2.0.swu
- example-a-b-update.sh
- EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
Selecione Carregar. Após o upload, os arquivos aparecem na página do contêiner.
Na página de contêiner, revise e selecione os arquivos a serem importados e, em seguida, selecione Selecionar.
Na tela Importar atualização, selecione Importar atualização.
O processo de importação começa e a tela alterna para a tela Atualizações . Depois que a importação for bem-sucedida, ela aparecerá na guia Atualizações . Para obter mais informações sobre o processo de importação, consulte Importar uma atualização para a Atualização de dispositivo.
Selecione o grupo de dispositivos
Você pode usar a tag de grupo aplicada ao seu dispositivo para implantar a atualização no grupo de dispositivos. Selecione a guia Grupos e implantações na parte superior da página Atualizações para exibir a lista de grupos e implantações e o gráfico de conformidade de atualizações.
O gráfico de conformidade de atualização mostra a contagem de dispositivos em vários estados de conformidade: Na última atualização, Novas atualizações disponíveis e Atualizações em andamento. Para obter mais informações, consulte Conformidade com a Atualização de Dispositivo.
Em Nome do grupo, você verá uma lista de todos os grupos de dispositivos conectados a esse hub IoT e suas atualizações disponíveis, com links para implantar as atualizações em Status. Todos os dispositivos que não atendem aos requisitos de classe de dispositivo de um grupo aparecem em um grupo inválido correspondente. Para obter mais informações sobre tags e grupos, consulte Gerenciar grupos de dispositivos.
Você deve ver o grupo de dispositivos que contém o dispositivo configurado neste tutorial, juntamente com as atualizações disponíveis para os dispositivos no grupo. Poderá ter de atualizar a página. Para implantar a melhor atualização disponível em um grupo a partir desse modo de exibição, selecione Implantar ao lado do grupo.
Implantar a atualização
Na página Detalhes do grupo, selecione a guia Implantação atual e, em seguida, selecione Implantar ao lado da atualização desejada na seção Atualizações disponíveis. A melhor atualização disponível para o grupo é indicada com um destaque Best .
Na página Criar implantação, agende sua implantação para iniciar imediatamente ou no futuro e selecione Criar.
Gorjeta
Por padrão, a data e a hora de início são 24 horas a partir da hora atual. Certifique-se de selecionar uma data e hora diferentes se quiser que a implantação comece mais cedo.
Em Detalhes da implantação, Status se transforma em Ativo. Em Atualizações disponíveis, a atualização selecionada é marcada com (implantação).
Na página Atualizações, exiba o gráfico de conformidade para ver se a atualização está em andamento. Após a atualização bem-sucedida do dispositivo, o gráfico de conformidade e os detalhes de implantação são atualizados para refletir esse status.
Exibir histórico de implantação de atualizações
Para exibir o histórico de implantação:
Selecione a guia Histórico de implantação na parte superior da página Detalhes do grupo e selecione o link de detalhes ao lado da implantação que você criou.
Na página Detalhes da implantação, selecione Atualizar para exibir os detalhes de status mais recentes.
Clean up resources (Limpar recursos)
Quando não precisar mais dos recursos criados para este tutorial, você poderá excluí-los.
- No portal do Azure, navegue até o grupo de recursos que contém os recursos.
- Se quiser excluir todos os recursos do grupo, selecione Excluir grupo de recursos.
- Se pretender eliminar apenas alguns dos recursos, utilize as caixas de verificação para selecionar os recursos e, em seguida, selecione Eliminar.
Próximos passos
- Atualização de dispositivo para o Hub IoT usando um agente de simulador
- Atualização de dispositivo para o Hub IoT usando um agente de pacote