Partilhar via


Preparar uma atualização para importação no Hub IoT para a Atualização de Dispositivos

Saiba como obter uma nova atualização e prepará-la para importação para a Atualização de Dispositivo para o Hub IoT.

Pré-requisitos

Obter uma atualização para os seus dispositivos

Agora que você configurou a Atualização de Dispositivo e provisionou seus dispositivos, precisará do(s) arquivo(s) de atualização que implantará nesses dispositivos.

  • Se você comprou dispositivos de um fabricante de equipamento original (OEM) ou integrador de soluções, essa organização provavelmente fornecerá arquivos de atualização para você, sem que você precise criar as atualizações. Entre em contato com o OEM ou integrador de soluções para saber como eles disponibilizam as atualizações.

  • Se a sua organização já cria software para os dispositivos que utiliza, esse mesmo grupo será o único a criar as atualizações para esse software.

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

Criar um manifesto de importação básico para atualização de dispositivos

Depois de ter os arquivos de atualização, crie um manifesto de importação para descrever a atualização. Se ainda não o fez, certifique-se de que se familiariza com os conceitos básicos de importação. Embora seja possível criar um JSON de manifesto de importação manualmente usando um editor de texto, este guia usará o PowerShell como exemplo.

Sugestão

Experimente os tutoriais baseados em imagem, baseado em pacote ou de atualização de proxy, se ainda não tiver feito isso. Você também pode simplesmente ver exemplos de arquivos de manifesto de importação desses tutoriais para referência.

  1. CloneAzure/iot-hub-device-updateRepositório Git.

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

  3. Execute os seguintes comandos depois de substituir os seguintes valores de parâmetro de exemplo pelos seus: Provider, Name, Version, Properties, Handler, Installed Criteria, Files. Consulte Importar informações de esquema e API para obter detalhes sobre quais valores você pode usar. Em particular, esteja ciente 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
    

Depois de criar o manifesto de importação, se estiver pronto para importar a atualização, você poderá rolar até o link Próximas etapas na parte inferior desta página.

Criar um manifesto de importação de Atualização de Dispositivo avançado para uma atualização por 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 seguintes comandos depois de substituir os valores de parâmetro de exemplo pelos seus próprios. Consulte Importar informações de esquema e 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óximos passos