Preparación de una actualización para importarla a Device Update for IoT Hub
Obtenga información sobre cómo obtener una nueva actualización y preparar la actualización para importarla a Device Update for IoT Hub.
Prerrequisitos
- Acceso a una instancia de IoT Hub con Device Update para IoT Hub habilitado.
- Un dispositivo IoT (o simulador) aprovisionado para Device Update en IoT Hub.
- PowerShell 5 o posterior (incluye las instalaciones de Linux, macOS y Windows).
- Exploradores compatibles:
- Microsoft Edge
- Google Chrome
Obtención de una actualización para sus dispositivos
Ahora que ha configurado Device Update y aprovisionado los dispositivos, necesitará los archivos de actualización que va a implementar en esos dispositivos.
Si ha adquirido dispositivos de un fabricante de equipos original (OEM) o un integrador de soluciones, es muy probable que esa organización le proporcione archivos de actualización, por lo que no necesitará crear las actualizaciones. Póngase en contacto con el OEM o el integrador de soluciones para saber cómo facilitan sus actualizaciones.
Si su organización ya crea software para los dispositivos que usa, ese mismo grupo será el que cree las actualizaciones de ese software.
Al crear una actualización para implementarla con Device Update for IoT Hub, empiece con el enfoque basado en imágenes o basado en paquetes, en función de su escenario.
Creación de un manifiesto de importación básico de Device Update
Una vez que tenga los archivos de actualización, cree un manifiesto de importación para describir la actualización. Si aún no lo ha hecho, asegúrese de familiarizarse con los conceptos de importación básicos. Aunque es posible crear manualmente un JSON de manifiesto de importación mediante un editor de texto, esta guía usará PowerShell como ejemplo.
Sugerencia
Pruebe los tutoriales de actualizaciones basadas en imágenes, paquetes o proxy si aún no lo ha hecho. También puede consultar solo los archivos de manifiesto de importación de ejemplo de los tutoriales como referencia.
Clonación del
Azure/iot-hub-device-update
repositorio de Git.Vaya a
Tools/AduCmdlets
en el clon local desde PowerShell.Ejecute los siguientes comandos después de reemplazar los siguientes valores de parámetro de ejemplo por los suyos propios: Proveedor, Nombre, Versión, Propiedades, Controlador, Criterios instalados, Archivos. Consulte Importación de esquema e información de API para más información sobre los valores que puede usar. En concreto, tenga en cuenta que no se puede usar el mismo conjunto exacto de propiedades de compatibilidad con más de una combinación de proveedor y nombre.
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
Una vez que haya creado el manifiesto de importación, si está listo para importar la actualización, puede desplazarse hasta el vínculo Pasos siguientes en la parte inferior de esta página.
Creación de un manifiesto de importación avanzada de Device Update para una actualización de proxy
Si la actualización es más compleja, como una actualización de proxy, es posible que tenga que crear varios manifiestos de importación. Puede usar el mismo script de PowerShell de la sección anterior para crear los manifiestos de importación primarios y secundarios para las actualizaciones complejas. Ejecute los comandos siguientes después de reemplazar los valores de parámetro de ejemplo por los suyos propios. Consulte Importación de esquema e información de API para más información sobre los valores que puede 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