Compartilhar via


Preparar uma atualização para importar para a Atualização de Dispositivo para Hub IoT

Saiba como obter uma nova atualização e preparar a atualização para importação para a Atualização de Dispositivo para Hub IoT.

Pré-requisitos

Obter uma atualização para seus dispositivos

Agora que você configurou a Atualização de Dispositivo e provisionou seus dispositivos, você precisará dos arquivos de atualização que você implantará nesses dispositivos.

  • Se você tiver comprado dispositivos de um integrador de solução ou OEM (Fabricante Original de Equipamentos), essa organização provavelmente fornecerá arquivos de atualização para você, sem a necessidade de criar as atualizações. Entre em contato com o OEM ou o integrador de soluções para descobrir como eles disponibilizam atualizações.

  • Se sua organização já criar software para os dispositivos que você usa, esse mesmo grupo será aquele que criará as atualizações para esse software.

Ao criar uma atualização a ser implantada usando a Atualização de Dispositivo para Hub IoT, comece com a abordagem baseada em imagem ou em pacote, dependendo do seu cenário.

Criar um manifesto de importação de Atualização de Dispositivo básico

Depois de obter seus arquivos de atualização, crie um manifesto de importação para descrever a atualização. Se você ainda não tiver feito isso, não se esqueça de se familiarizar com os conceitos básicos de importação. Embora seja possível criar manualmente um JSON de manifesto de importação usando um editor de texto, este guia usará o PowerShell como exemplo.

Dica

Experimente os tutoriais baseados em imagem, baseados em pacote ou a atualização de proxy, caso ainda não tenha feito isso. Você também pode apenas exibir arquivos de manifesto de importação de exemplo desses tutoriais para referência.

  1. Clone o Azure/iot-hub-device-update repositório Git.

  2. Navegue até Tools/AduCmdlets no clone local do PowerShell.

  3. Execute os seguintes comandos depois de substituir os seguintes valores de parâmetro de exemplo por seus próprios: Provider, Name, Version, Properties, Handler, Installed Criteria, Files. Confira Esquema de importação e Informações de API para obter detalhes sobre quais valores você pode usar. Em particular, lembre-se de que o mesmo conjunto exato de propriedades de compatibilidade não pode ser usado com mais de uma combinação de provedor e nome.

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
    
    Import-Module ./AduUpdate.psm1
    
    $updateId = New-AduUpdateId -Provider Contoso -Name Toaster -Version 1.0
    
    $compat = New-AduUpdateCompatibility -Properties @{ deviceManufacturer = 'Contoso'; deviceModel = 'Toaster' }
    
    $installStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1'-HandlerProperties @{ installedCriteria = '1.0' } -Files 'path to your update file'
    
    $update = New-AduImportManifest -UpdateId $updateId -Compatibility $compat -InstallationSteps $installStep
    
    # Write the import manifest to a file, ideally next to the update file(s).
    $update | Out-File "./$($updateId.provider).$($updateId.name).$($updateId.version).importmanifest.json" -Encoding utf8
    

Se após criar o manifesto de importação você estiver pronto para importar sua atualização, você poderá fazer a rolagem até o link Próximas etapas na parte inferior desta página.

Criar um manifesto de importação da Atualização de Dispositivo avançado para uma atualização de proxy

Se a atualização for mais complexa, como uma atualização de proxy, talvez seja necessário criar vários manifestos de importação. Você pode usar o mesmo script do PowerShell da seção anterior para criar manifestos de importação pai e filho para atualizações complexas. Execute os comandos a seguir depois de substituir os valores de parâmetro de exemplo pelos seus próprios. Confira Esquema de importação e Informações de API para obter detalhes sobre quais valores você pode usar.

  Import-Module $PSScriptRoot/AduUpdate.psm1 -ErrorAction Stop
  
  # We will use arbitrary files as update payload files.
  $childFile = "$env:TEMP/childFile.bin.txt"
  $parentFile = "$env:TEMP/parentFile.bin.txt"
  "This is a child update payload file." | Out-File $childFile -Force -Encoding utf8
  "This is a parent update payload file." | Out-File $parentFile -Force -Encoding utf8
  
  # ------------------------------
  # Create a child update
  # ------------------------------
  Write-Host 'Preparing child update ...'
  
  $microphoneUpdateId = New-AduUpdateId -Provider Contoso -Name Microphone -Version $UpdateVersion
  $microphoneCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Microphone
  $microphoneInstallStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1' -Files $childFile
  $microphoneUpdate = New-AduImportManifest -UpdateId $microphoneUpdateId `
                                               -IsDeployable $false `
                                               -Compatibility $microphoneCompat `
                                               -InstallationSteps $microphoneInstallStep `
                                               -ErrorAction Stop -Verbose:$VerbosePreference
  
  # ------------------------------
  # Create another child update
  # ------------------------------
  Write-Host 'Preparing another child update ...'
  
  $speakerUpdateId = New-AduUpdateId -Provider Contoso -Name Speaker -Version $UpdateVersion
  $speakerCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Speaker
  $speakerInstallStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1' -Files $childFile
  $speakerUpdate = New-AduImportManifest -UpdateId $speakerUpdateId `
                                            -IsDeployable $false `
                                            -Compatibility $speakerCompat `
                                            -InstallationSteps $speakerInstallStep `
                                            -ErrorAction Stop -Verbose:$VerbosePreference
  
  # ------------------------------------------------------------
  # Create the parent update which parents the child update above
  # ------------------------------------------------------------
  Write-Host 'Preparing parent update ...'
  
  $parentUpdateId = New-AduUpdateId -Provider Contoso -Name Toaster -Version $UpdateVersion
  $parentCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Toaster
  $parentSteps = @()
  $parentSteps += New-AduInstallationStep -Handler 'microsoft/script:1' -Files $parentFile -HandlerProperties @{ 'arguments'='--pre'} -Description 'Pre-install script'
  $parentSteps += New-AduInstallationStep -UpdateId $microphoneUpdateId -Description 'Microphone Firmware'
  $parentSteps += New-AduInstallationStep -UpdateId $speakerUpdateId -Description 'Speaker Firmware'
  $parentSteps += New-AduInstallationStep -Handler 'microsoft/script:1' -Files $parentFile -HandlerProperties @{ 'arguments'='--post'} -Description 'Post-install script'
  
  $parentUpdate = New-AduImportManifest -UpdateId $parentUpdateId `
                                        -Compatibility $parentCompat `
                                        -InstallationSteps $parentSteps `
                                        -ErrorAction Stop -Verbose:$VerbosePreference
  
  # ------------------------------------------------------------
  # Write all to files
  # ------------------------------------------------------------
  Write-Host 'Saving manifest and update files ...'
  
  New-Item $Path -ItemType Directory -Force | Out-Null
  
  $microphoneUpdate | Out-File "$Path/$($microphoneUpdateId.Provider).$($microphoneUpdateId.Name).$($microphoneUpdateId.Version).importmanifest.json" -Encoding utf8
  $speakerUpdate | Out-File "$Path/$($speakerUpdateId.Provider).$($speakerUpdateId.Name).$($speakerUpdateId.Version).importmanifest.json" -Encoding utf8
  $parentUpdate | Out-File "$Path/$($parentUpdateId.Provider).$($parentUpdateId.Name).$($parentUpdateId.Version).importmanifest.json" -Encoding utf8
  
  Copy-Item $parentFile -Destination $Path -Force
  Copy-Item $childFile -Destination $Path -Force
  
  Write-Host "Import manifest JSON files saved to $Path" -ForegroundColor Green
  
  Remove-Item $childFile -Force -ErrorAction SilentlyContinue | Out-Null
  Remove-Item $parentFile -Force -ErrorAction SilentlyContinue | Out-Null

Próximas etapas