Tutorial: Device Update for Azure IoT Hub con la imagen de referencia para Raspberry Pi 3 B+

Device Update for Azure IoT Hub admite actualizaciones mediante imágenes, paquetes y scripts.

Las actualizaciones con imágenes proporcionan un mayor nivel de confianza en el estado final del dispositivo. Normalmente, es más fácil replicar los resultados de una actualización basada en imágenes entre un entorno de preproducción y un entorno de producción, ya que no plantea los mismos desafíos que los paquetes y sus dependencias. Debido a su naturaleza atómica, también se puede adoptar fácilmente un modelo de conmutación por error A/B.

Este tutorial le guiará por los pasos necesarios para completar una actualización basada en imágenes completa mediante Device Update for IoT Hub en una placa Raspberry Pi 3 B+.

En este tutorial, aprenderá a:

  • Descargar una imagen.
  • Agregar una etiqueta al dispositivo IoT.
  • Importar una actualización.
  • Implementar una actualización basada en imágenes.
  • Supervisar la implementación de la actualización.

Nota:

Las actualizaciones de imágenes de este tutorial se han validado en la placa Raspberry Pi B3.

Requisitos previos

Si todavía no lo ha hecho, cree una instancia y una cuenta de Device Update, y configure un centro de IoT. Este tutorial requiere que el dispositivo esté conectado a través de una conexión Ethernet.

Descargue los archivos en Recursos en la página de versiones de GitHub de Device Update. El Tutorial_RaspberryPi.zip tiene todos los archivos necesarios para el tutorial.

Creación de un dispositivo en IoT Hub y obtención de una cadena de conexión

Ahora, agregue el dispositivo a IoT Hub. En IoT Hub, se genera una cadena de conexión para el dispositivo.

  1. Desde Azure Portal, vaya a su centro de IoT.

  2. En el panel izquierdo, seleccione Dispositivos. A continuación, seleccione Nuevo.

  3. En Id. de dispositivo, escriba un nombre para el dispositivo. Asegúrese de que la casilla Generación automática de claves esté activada.

  4. Seleccione Guardar. En la página Dispositivos, debe estar en la lista el dispositivo que creó.

  5. Para obtener la cadena de conexión del dispositivo, vaya a la vista de dispositivo, seleccione el icono Copiar situado junto a Cadena de conexión principal.

  6. Pegue en algún lugar los caracteres copiados para su uso posterior en los pasos siguientes:

    Esta cadena copiada es la cadena de conexión del dispositivo.

Nota

En este tutorial se usa una cadena de conexión de dispositivo para autenticarse y conectarse con IoT Hub para facilitar la configuración. En escenarios de producción, se recomienda usar la identidad del módulo y aprovechar AIS (Servicio de identidad de IoT) para aprovisionar dispositivos. Más información

Configuración de Raspberry Pi

Proporcionamos archivos de imagen base y actualización en Activos en la página de versiones de GitHub de Device Update. El Tutorial_RaspberryPi.zip tiene todos los archivos necesarios para el tutorial. El archivo .wic es la imagen base que puede grabar en memoria flash en una placa Raspberry Pi 3 B+. El archivo swUpdate(.swu), el script swupdate personalizado y el manifiesto son los archivos de actualización que importaría a través de Device Update for IoT Hub.

Esta imagen base usa una compilación de Yocto (basada en la versión 3.4.4) con:

  • SWUpdate, que habilita la actualización de partición dual con DU
  • Agente de Device Update

Para obtener más información sobre las capas de Yocto usadas, consulte Device Update Yocto GitHub.

Puede utilizar su herramienta favorita de escritura en memoria flash del sistema operativo para instalar la imagen base de Device Update (adu-base-image) en la tarjeta SD que se usará en el dispositivo Raspberry Pi 3 B+. A continuación se muestran las instrucciones para usar bmaptool para grabar en memoria flash en la tarjeta SD.

Uso de bmaptool para grabar en memoria flash la tarjeta SD

  1. Instale la utilidad bmaptool, si aún no lo ha hecho.

    sudo apt-get install bmap-tools
    
  2. 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.

  3. Desmonte todas las particiones montadas antes de escribir la memoria flash.

    sudo umount /dev/<device>
    
  4. Asegúrese de que tiene permisos de escritura en el dispositivo.

    sudo chmod a+rw /dev/<device>
    
  5. Opcional: para acelerar la escritura de la memoria flash, descargue el archivo bimap y el archivo de la imagen y colóquelos en el mismo directorio.

  6. Escriba la memoria flash de la tarjeta SD.

    sudo bmaptool copy <path to image> /dev/<device>
    

El software de Device Update para Azure IoT Hub está sujeto a los siguientes términos de licencia:

Lea los términos de licencia antes de usar el agente. La instalación y el uso 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 for IoT Hub.

Configuración del agente de Device Update en el dispositivo Raspberry Pi

  1. Asegúrese de que el dispositivo Raspberry Pi3 esté conectado a la red.

  2. Use SSH en Raspberry Pi 3 mediante el siguiente comando en la ventana de PowerShell:

      ssh raspberrypi3 -l root
    
  3. Los archivos de configuración DU (du-config.json y du-diagnostics-config.json) deben estar en el dispositivo para que Device Update for IoT Hub configure correctamente.

    1. Cree o abra el archivo du-config.json para editarlo mediante:
      nano /adu/du-config.json
    
    1. Después de ejecutar el comando, debería ver un editor abierto con el archivo. Si nunca ha creado el archivo, estará vacío. Ahora copie el contenido de du-config.json siguiente y sustituya las configuraciones necesarias para el dispositivo. A continuación, reemplace la cadena de conexión de ejemplo por la del dispositivo que creó en los pasos anteriores.

      du-config.json

    {
       "schemaVersion": "1.0",
       "aduShellTrustedUsers": [
          "adu",
          "do"
       ],
       "manufacturer": "contoso",
       "model": "virtual-vacuum-v2",
       "agents": [
          {
          "name": "main",
          "runas": "adu",
          "connectionSource": {
             "connectionType": "string",
             "connectionData": "HostName=example-connection-string.azure-devices.net;DeviceId=example-device;SharedAccessKey=M5oK/rOP12aB5678YMWv5vFWHFGJFwE8YU6u0uTnrmU=" 
          },
          "manufacturer": "contoso",
          "model": "virtual-vacuum-v2"
          }
       ]
    }  
    
    1. Cuando termine los cambios, seleccione Ctrl+X para salir del editor. A continuación, escriba y para guardar los cambios.
  4. Ahora, debe crear el archivo du-diagnostics-config.json mediante comandos similares.

    1. Para empezar, cree o abra el archivo du-diagnostics-config.json para editarlo mediante:
      nano /adu/du-diagnostics-config.json
    
    1. Copie el contenido del archivo du-diagnostics-config.json a continuación y sustituya las configuraciones que difieren de la compilación predeterminada. El archivo du-diagnostics-config.json de ejemplo representa las ubicaciones de registro predeterminadas para Device Update for IoT Hub. Solo tiene que cambiar estos valores predeterminados si su implementación es diferente.

    du-diagnostics-config.json

    {
       "logComponents":[
          {
             "componentName":"adu",
             "logPath":"/adu/logs/"
          },
          {
             "componentName":"do",
             "logPath":"/var/log/deliveryoptimization-agent/"
          }
       ],
       "maxKilobytesToUploadPerLogPath":50
    }
    
    1. Cuando termine los cambios, seleccione Ctrl+X para salir del editor. A continuación, escriba y para guardar los cambios.
  5. Use el comando siguiente para mostrar los archivos ubicados en el directorio /adu/. Debería ver ambos archivos de configuración du-diagnostics-config.json para editarlos mediante:

      ls -la /adu/
    
  6. Reinicie el demonio del sistema de Device Update para asegurarse de que se hayan aplicado las configuraciones. Use el siguiente comando en el terminal con el que inició sesión en el dispositivo raspberrypi:

      systemctl start deviceupdate-agent
    
  7. Compruebe que el agente está en funcionamiento con el siguiente comando:

      systemctl status deviceupdate-agent
    

    El estado debería aparecer como activo y verde.

Conexión del dispositivo en Device Update for IoT Hub

  1. En el panel izquierdo, seleccione Dispositivos.

  2. Seleccione el vínculo con el nombre del dispositivo.

  3. En la parte superior de la página, seleccione Dispositivo gemelo.

  4. En la sección reported (Notificado) de las propiedades del dispositivo gemelo, busque la versión del kernel de Linux.

    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 que se haya aplicado una actualización a un dispositivo, Device Update usa el valor de la propiedad AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId para representar la versión de firmware que se ejecuta en el dispositivo.

  5. Los archivos de la imagen base y la de actualización tienen un número de versión en el nombre de archivo.

     adu-<image type>-image-<machine>-<version number>.<extension>
    

    Use ese número de versión en la sección "Importación de la actualización" posterior.

Adición de una etiqueta de grupo de actualización de dispositivos al dispositivo

  1. En Azure Portal, vaya hasta el centro de IoT.

  2. En el panel izquierdo, en Dispositivos, busque el dispositivo IoT y vaya al dispositivo gemelo o módulo gemelo.

  3. En el módulo gemelo del módulo del agente de Device Update, elimine los valores de etiqueta de Device Update existentes; para ello, establézcalos en NULL. Si usa la identidad del dispositivo con el agente de Device Update, realice estos cambios en el dispositivo gemelo.

  4. Agregue un nuevo valor de etiqueta de Device Update como se muestra a continuación:

        "tags": {
                "ADUGroup": "<CustomTagValue>"
                }
    

    Captura de pantalla que muestra el gemelo con la información de la etiqueta.

    En esta captura de pantalla se muestra la sección donde se debe agregar la etiqueta en el gemelo.

Importación de la actualización

  1. Descargue el manifiesto de muestra del tutorial y la muestra de actualización (archivo .swu) y el script de muestra A/B desde Tutorial_RaspberryPi.zip en Recursos de versión del último agente.

  2. Inicie sesión en Azure Portal y vaya a su instancia de IoT Hub con Device Update. En el panel izquierdo, en Administración automática de dispositivos, seleccione Actualizaciones.

  3. Seleccione la pestaña Actualizaciones.

  4. Seleccione + Importar nueva actualización.

  5. Elija + Seleccionar uno del contenedor de almacenamiento. Seleccione una cuenta existente o cree una nueva mediante + Cuenta de almacenamiento. A continuación, seleccione un contenedor existente o cree uno nuevo mediante + Contenedor. Este contenedor se usará para almacenar provisionalmente los archivos de actualización para la importación.

    Nota

    Se recomienda usar un nuevo contenedor cada vez que importe una actualización para evitar la importación accidental de archivos de actualizaciones anteriores. Si no usa un contenedor nuevo, asegúrese de eliminar los archivos del contenedor existente antes de completar este paso.

    Captura de pantalla que muestra las cuentas de almacenamiento y los contenedores.

  6. En el contenedor, seleccione Cargar y vaya hasta los archivos que descargó en el paso 1. Cuando haya seleccionado todos los archivos de actualización, seleccione Cargar. A continuación, seleccione el botón Seleccionar para volver a la página Importar actualización.

    Captura de pantalla que muestra la selección de archivos cargados.

    En esta captura de pantalla se muestra el paso de importación. Es posible que los nombres de archivo no coincidan con los usados en el ejemplo.

  7. En la página Importar actualización, revise los archivos que se importarán. A continuación, seleccione Importar actualización para iniciar el proceso de importación. Para el tutorial, importe el manifiesto del tutorial de ejemplo y la actualización de ejemplo (archivo .swu) y el script A/B de ejemplo descargado anteriormente.

    Captura de pantalla que muestra Importar actualización.

  8. Se inicia el proceso de importación y la pantalla cambia a la sección Historial de importación. Cuando la columna Estado indique que la importación se ha realizado correctamente, seleccione el encabezado Actualizaciones disponibles. Debería ver la actualización importada en la lista.

    Captura de pantalla que muestra el estado de los trabajos.

Para más información sobre el proceso de importación, consulte Importación de una actualización a Device Update.

Visualización de grupos de dispositivos

Device Update usa grupos para organizar los dispositivos. Este servicio ordena automáticamente los dispositivos por grupos en función de las etiquetas y propiedades de compatibilidad que tienen asignadas. Cada dispositivo pertenece solo a un grupo, pero los grupos pueden tener varios subgrupos para ordenar diferentes clases de dispositivos.

  1. Vaya a la pestaña Grupos e implementaciones en la parte superior de la página.

    Captura de pantalla que muestra los dispositivos desagrupados.

  2. Vea la lista de grupos y el gráfico de cumplimiento 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. Obtenga más información sobre Update Compliance.

    Captura de pantalla que muestra la vista de cumplimiento de actualizaciones.

  3. Debería ver un grupo de dispositivos que contiene el dispositivo simulado que ha configurado en este tutorial junto con las actualizaciones disponibles para los dispositivos del nuevo grupo. Si hay dispositivos que no cumplen los requisitos de clase de dispositivo del grupo, se mostrarán en un grupo no válido correspondiente. Para implementar la mejor actualización disponible en el nuevo grupo definido por el usuario desde esta vista, seleccione Implementar junto al grupo.

Para más información sobre etiquetas y grupos, consulte Administración de grupos de dispositivos.

Implementación de la actualización

  1. Una vez creado el grupo, debería ver una nueva actualización disponible para el grupo de dispositivos, con un vínculo a la actualización en Mejor actualización. Puede que tenga que actualizar una vez.

    Para más información sobre el cumplimiento, consulte Cumplimiento de Device Update.

  2. Para elegir el grupo de destino, seleccione el nombre del grupo. Se le dirigirá a los detalles del grupo en Group basics (Conceptos básicos del grupo).

    Captura de pantalla que muestra los detalles de los grupos.

  3. Para iniciar la implementación, vaya a la pestaña Implementación actual. Seleccione el vínculo de implementación situado junto a la actualización deseada en la sección Actualizaciones disponibles. La mejor actualización disponible para un grupo determinado se indica con el término Óptima resaltado.

    Captura de pantalla que muestra la selección de una actualización.

  4. Programe la implementación para que se inicie inmediatamente o en el futuro. 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 antes.

    Captura de pantalla que muestra la creación de una implementación.

  5. En Detalles de implementación, Estado cambia a Activo. La actualización implementada está marcada con (implementando).

    Captura de pantalla que muestra la implementación como activa.

  6. Vea el gráfico de cumplimiento para comprobar que la actualización está en curso.

  7. Una vez que el dispositivo se ha actualizado correctamente, puede ver que el gráfico de cumplimiento y los detalles de la implementación se actualizan para reflejar lo mismo.

    Captura de pantalla que muestra que la actualización se ha realizado correctamente.

Supervisar la implementación de actualizaciones

  1. Seleccione la pestaña Historial de implementación en la parte superior de la página.

    Captura de pantalla que muestra Historial de implementación.

  2. Seleccione el vínculo de detalles junto a la implementación que ha creado.

    Captura de pantalla que muestra los detalles de la implementación.

  3. Seleccione Actualizar para ver los detalles de estado más recientes.

Ahora ha completado una actualización integral correcta de la imagen con Device Update for IoT Hub en un dispositivo Raspberry Pi 3 B+.

Limpieza de recursos

Cuando ya no los necesite, limpie la cuenta de Device Update, la instancia, IoT Hub y el dispositivo IoT.

Pasos siguientes