Tutorial: Azure Device Update for IoT Hub mediante una imagen de Raspberry Pi
Device Update for IoT Hub admite actualizaciones basadas en imágenes, en paquetes y en scripts. En este tutorial, se muestra una actualización Device Update for IoT Hub basada en imágenes de un extremo a otro mediante una imagen de Yocto en una placa Raspberry Pi 3 B+.
Las actualizaciones de imágenes proporcionan un alto nivel de confianza en el estado final del dispositivo y no suponen los mismos desafíos de administración de paquetes y dependencias que las actualizaciones basadas en paquetes o en scripts. Es más fácil replicar los resultados de una actualización de imágenes entre un entorno de preproducción y de producción, o adoptar fácilmente un modelo de conmutación por error A/B.
En este tutorial ha:
- Descargar e instalar una actualización de imágenes.
- Asignar una etiqueta al dispositivo IoT.
- Importar la actualización de la imagen.
- Implementar la actualización de la imagen.
- Ver el historial de implementación de actualizaciones.
Requisitos previos
Una cuenta y una instancia de Device Update configuradas con una instancia de IoT Hub.
Una placa Raspberry Pi 3 IoT conectada a través de Ethernet al hardware que puede descargar y extraer los archivos de imagen y controlar el dispositivo.
Nota:
Las actualizaciones de imágenes de este tutorial se han validado en una placa Raspberry Pi B3.
Registrar el dispositivo y obtener de la cadena de conexión
Agregue el dispositivo al registro de dispositivos en su IoT Hub y obtenga la cadena de conexión que IoT Hub genera para el dispositivo.
- En Azure Portal, abra la página de IoT Hub asociada a la instancia de Device Update.
- En el panel de navegación izquierdo, seleccione Administración de dispositivos>Dispositivos.
- En la página Dispositivos, seleccione Agregar dispositivo.
- En Id. de dispositivo, escriba un nombre para el dispositivo. Asegúrese de que la casilla Generar claves automáticamente esté activada.
- Seleccione Guardar. El dispositivo aparece en la lista en la página Dispositivos.
- En la página Dispositivos, seleccione el dispositivo que registró.
- En la página del dispositivo, seleccione el icono Copiar junto a Cadena de conexión (clave principal). Guarde esta cadena de conexión de dispositivo para usarla cuando configure el agente de Device Update.
Nota:
Para fines de demostración, en este tutorial, se usa una cadena de conexión de dispositivo para autenticarse y conectarse con IoT Hub. En escenarios de producción, es mejor usar la identidad de módulo e IoT Identity Service para aprovisionar dispositivos. Para más información, consulte Aprovisionamiento del agente de Device Update.
Configuración de Raspberry Pi
El archivo Tutorial_RaspberryPi3.zip tiene todos los archivos necesarios para el tutorial. Descargue el archivo de la sección Activos de la versión más reciente en la página Versiones de GitHub Device Update y descomprímalo.
En la carpeta Tutorial_RaspberryPi3 extraída, la imagen base que puede grabar en la placa Raspberry Pi es adu-base-image-raspberrypi3.wic. La imagen base usa una compilación de Yocto basada en la versión 3.4.4. La imagen tiene el agente de Device Update y SWUpdate, que habilita la actualización de partición dual de Device Update. Para más información sobre las capas de Yocto, consulte Compilación de un sistema personalizado basado en Linux con el agente de Device Update mediante el proyecto Yocto.
Los archivos de actualización que importe a través de Device Update son:
- Archivo SWUpdate adu-update-image-raspberrypi3-1.2.0.swu
- Script SWUpdate personalizado example-a-b-update.sh
- Manifiesto EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
Uso de bmaptool para grabar en memoria flash la tarjeta SD
Importante
El software de Azure Device Update for IoT Hub está sujeto a los siguientes términos de licencia:
- Licencia de actualización de dispositivos para IoT Hub
- Licencia de cliente de Optimización de distribución
Lea los términos de licencia antes de usar el agente. La instalación y el uso del agente constituyen la aceptación de estos términos. Si no está de acuerdo con los términos de licencia, no use el agente de Device Update.
Utiliza una herramienta de flasheo de sistemas operativos para instalar la imagen base de Device Update en la tarjeta SD que usarás en el dispositivo Raspberry Pi. Las instrucciones siguientes usan bmaptool
para flashear en la tarjeta SD. Reemplace el marcador de posición <device>
por el nombre del dispositivo y el marcador de posición <path to image>
por la ruta de acceso al archivo de imagen descargado.
Instale la utilidad
bmap-tools
si no la tiene.sudo apt-get install bmap-tools
Busque la ruta de acceso de la tarjeta SD en /dev. La ruta de acceso debe tener un aspecto similar a /dev/sd* o /dev/mmcblk*. Puede usar la utilidad
dmesg
para buscar la ruta de acceso correcta.Desmonte todas las particiones montadas antes de escribir la memoria flash.
sudo umount /dev/<device>
Asegúrese de que tiene permisos de escritura en el dispositivo.
sudo chmod a+rw /dev/<device>
Escriba la memoria flash de la tarjeta SD.
sudo bmaptool copy <path to image> /dev/<device>
Sugerencia
Para acelerar la escritura de la memoria flash, puede descargar el archivo bimap y el archivo de la imagen y colóquelos en el mismo directorio.
Configuración del agente de Device Update en el dispositivo Raspberry Pi
Asegúrese de que el dispositivo Raspberry Pi esté conectado a la red.
Secure Shell (SSH) en Raspberry Pi 3 mediante el siguiente comando en una ventana de PowerShell:
ssh raspberrypi3 -l root
Creación de los archivos de configuración de Device Update
Los archivos de configuración du-config.json y du-diagnostics-config.json de Device Update deben estar en el dispositivo. Para crear los archivos, ejecute los siguientes comandos en el terminal que inició sesión en Raspberry Pi.
Para crear el archivo du-config.json o abrirlo para su edición, ejecute el siguiente comando:
nano /adu/du-config.json
El editor abre el archivo du-config.json. Si va a crear el archivo, está vacío. Copie y pegue el código siguiente en el archivo y reemplace los valores de ejemplo por las configuraciones necesarias para el dispositivo. Reemplace la cadena de ejemplo
connectionData
por la cadena de conexión del dispositivo que copió en el paso de registro del 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" } ] }
Presione Ctrl+X para salir del editor y escriba y para guardar los cambios.
Cree el archivo du-diagnostics-config.json mediante comandos similares. Cree y abra el archivo:
nano /adu/du-diagnostics-config.json
Copie y pegue el código du-diagnostics-config.jsonsiguiente en el archivo. Los valores son las ubicaciones de registro predeterminadas de Device Update y solo debe cambiarlos si la configuración difiere del valor predeterminado.
{ "logComponents":[ { "componentName":"adu", "logPath":"/adu/logs/" }, { "componentName":"do", "logPath":"/var/log/deliveryoptimization-agent/" } ], "maxKilobytesToUploadPerLogPath":50 }
Presione Ctrl+X para salir del editor y escriba y para guardar los cambios.
Use el comando siguiente para mostrar los archivos ubicados en el directorio /adu/. Debería ver ambos archivos de configuración.
ls -la /adu/
Use el siguiente comando para reiniciar el demonio del sistema Device Update y asegurarse de que se aplican las configuraciones.
systemctl start deviceupdate-agent
Compruebe que el agente está en funcionamiento con el siguiente comando:
systemctl status deviceupdate-agent
El estado debe aparecer como activo y verde.
Conexión al dispositivo en IoT Hub y adición de una etiqueta de grupo
En la página Azure Portal IoT Hub de la instancia de Device Update, seleccione Administración de dispositivos>Dispositivos en el panel de navegación izquierdo.
En la página Dispositivos, seleccione el nombre del dispositivo.
En la parte superior de la página del dispositivo, seleccione Dispositivo gemelo.
En la página Dispositivo gemelo, en la sección
"reported"
de la sección"properties"
del dispositivo gemelo, busque la versión del kernel de Linux para el dispositivo.Para un nuevo dispositivo que no ha recibido una actualización desde Device Update, el valor de DeviceManagement:DeviceInformation:1.swVersion representa la versión de firmware que se ejecuta en el dispositivo. Una vez aplicado el dispositivo, el valor de la propiedad AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId representa la versión del firmware.
Los nombres de archivo de imagen base y actualización tienen el formato adu-<image type>-image-<machine>-<version number>.<extension>. Tenga en cuenta los números de versión que se usarán al importar la actualización.
Agregar una etiqueta de grupo
Este servicio organiza, de manera automática, los dispositivos por grupos en función de las etiquetas y propiedades de compatibilidad que tienen asignadas. Cada dispositivo puede pertenecer solo a un grupo, pero los grupos pueden tener varios subgrupos para ordenar diferentes clases de dispositivos. Para más información sobre etiquetas y grupos, consulte Administración de grupos de dispositivos.
En el dispositivo gemelo, elimine los valores de etiqueta Device Update existentes al establecerlos en valores nulos y agregue la siguiente etiqueta de grupo Device Update nueva. Si usa una identidad de módulo con el agente de Device Update, agregue la etiqueta en la identidad de módulo gemela en lugar del dispositivo gemelo.
"tags": { "ADUGroup": "<CustomTagValue>" },
En el siguiente recorte de pantalla, se muestra dónde se encuentra en el archivo para agregar la etiqueta.
Seleccione Guardar.
Importación de la actualización
En la página Azure Portal IoT Hub de la instancia de Device Update, seleccione Administración de dispositivos>Actualizaciones en el panel de navegación izquierdo.
En la página Actualizaciones, seleccione Importar una nueva actualización.
En la página Importar actualización, seleccione Seleccionar desde el contenedor de almacenamiento.
En la página Cuentas de almacenamiento, seleccione una cuenta de almacenamiento o elija Cuenta de almacenamiento para crear una nueva.
En la página Contenedores, seleccione un contenedor o elija Contenedor para crear uno nuevo. El contenedor se usa para almacenar provisionalmente los archivos de actualización para la importación.
Sugerencia
Para evitar la importación accidental de archivos de actualizaciones anteriores, use un nuevo contenedor cada vez que importe una actualización. Si no usa un contenedor nuevo, asegúrese de eliminar los archivos del contenedor existente.
En la página de contenedores, seleccione Cargar. Arrastre y coloque, o busque y seleccione los siguientes archivos de actualización de la carpeta Tutorial_RaspberryPi3 que ha descargado:
- adu-update-image-raspberrypi3-1.2.0.swu
- example-a-b-update.sh
- EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
Selecciona Cargar. Después de cargarlos, los archivos aparecen en la página del contenedor.
En la página del contenedor, revise y seleccione los archivos que se van a importar y, a continuación, seleccione Seleccionar.
En la pantalla Importar actualización, seleccione Importar actualización.
El proceso de importación comienza y la pantalla cambia a la pantalla Actualizaciones. Después de que la importación se realice correctamente, aparece en la pestaña Actualizaciones. Para más información sobre el proceso de importación, consulte Importación de una actualización a Device Update.
Selección del grupo de dispositivos
Puede usar la etiqueta de grupo que aplicó al dispositivo para implementar la actualización en el grupo de dispositivos. Seleccione la pestaña Grupos e implementaciones de la parte superior de la página Actualizaciones para ver la lista de grupos e implementaciones y el gráfico de comprobación de actualizaciones.
En el gráfico de Update Compliance se muestra el recuento de dispositivos en los distintos estados de compatibilidad: En la actualización más reciente, Nuevas actualizaciones disponibles y Actualizaciones en curso. Para más información, consulte Cumplimiento de Device Update.
En Nombre de grupo, verá una lista de todos los grupos de dispositivos de los dispositivos conectados a este IoT Hub y sus actualizaciones disponibles, con vínculos para implementar las actualizaciones en Estado. Los dispositivos que no cumplen los requisitos de clase de dispositivo de un grupo aparecen en un grupo no válido correspondiente. Para más información sobre etiquetas y grupos, consulte Administración de grupos de dispositivos.
Debería ver el grupo de dispositivos que contiene el dispositivo que configuró en este tutorial, junto con las actualizaciones disponibles para los dispositivos del grupo. Es posible que tenga que actualizar la página. Para implementar la mejor actualización disponible en un grupo desde esta vista, seleccione Implementar junto al grupo.
Implementación de la actualización
En la página Detalles del grupo, seleccione la pestaña Implementación actual y, a continuación, seleccione Implementar junto a la actualización deseada en la sección Actualizaciones disponibles. La mejor actualización disponible para el grupo se indica con el término Óptima resaltado.
En la página Crear implementación, programe la implementación para que se inicie inmediatamente o en el futuro y, a continuación, seleccione Crear.
Sugerencia
De forma predeterminada, la fecha y hora de inicio es de 24 horas a partir de la hora actual. Asegúrese de seleccionar una fecha y hora diferentes si quiere que la implementación comience más pronto.
En Detalles de implementación, Estado cambia a Activo. En Actualizaciones disponibles, la actualización seleccionada se marca con (implementando).
En la página Actualizaciones, vea el gráfico de cumplimiento para ver que la actualización está en curso. Después de que el dispositivo se actualice correctamente, el gráfico de cumplimiento y los detalles de implementación se actualizan para reflejar ese estado.
Ver el historial de implementación de actualizaciones
Para ver el historial de implementación:
Seleccione la pestaña Historial de implementación de la parte superior de la página Detalles del grupo y seleccione el vínculo detalles junto a la implementación que creó.
En la página Detalles de implementación, seleccione Actualizar para ver los detalles de estado más recientes.
Limpieza de recursos
Cuando ya no necesite los recursos creados en este tutorial, puede eliminarlos.
- En Azure Portal, vaya al grupo de recursos que contiene los recursos.
- Si desea eliminar todos los recursos del grupo, seleccione Eliminar grupo de recursos.
- Si solo desea eliminar algunos recursos, use las casillas para seleccionarlos y, a continuación, elija Eliminar.
Pasos siguientes
- Device Update for IoT Hub con un agente de simulador
- Device Update for IoT Hub mediante un agente de paquete