Tutorial: Interactuar con Device Shadow mediante la aplicación de ejemplo y el cliente de pruebas MQTT - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Interactuar con Device Shadow mediante la aplicación de ejemplo y el cliente de pruebas MQTT

Para interactuar con la aplicación de ejemplo shadow.py, introduzca un valor para el valor en el terminal desired. Por ejemplo, puede especificar colores que se asemejen a los semáforos y AWS IoT responde a la solicitud y actualiza los valores notificados.

En este tutorial, aprenderá a:
  • Usar la aplicación de ejemplo shadow.py para especificar los estados deseados y actualizar el estado actual de la sombra.

  • Editar el documento Shadow para observar los eventos delta y cómo responde a ellos la aplicación de muestra shadow.py.

  • Utilizar el cliente de prueba MQTT para suscribirse a temas sombra y observar las actualizaciones cuando ejecute el programa de ejemplo.

Antes de ejecutar este tutorial, debe disponer de lo siguiente:

Instale su Cuenta de AWS, configure su dispositivo Raspberry Pi y cree una cosa AWS IoT y una política. También debe haber instalado el software necesario, el SDK del dispositivo y los archivos de certificado necesarios y haber ejecutado el programa de muestra en la terminal. Para obtener más información, consulte los tutoriales anteriores Tutorial: Cómo preparar la Raspberry Pi para ejecutar la aplicación shadow y Paso 1: ejecutar la aplicación de ejemplo shadow.py. Si aún no lo ha hecho, debe completar estos tutoriales.

Para completar este tutorial se necesitan aproximadamente 45 minutos.

Paso 1: Actualizar los valores deseados y notificados mediante la aplicación de ejemplo shadow.py

En el tutorial anterior Paso 1: ejecutar la aplicación de ejemplo shadow.py, aprendió a observar un mensaje publicado en el documento Shadow de la consola de AWS IoT al introducir el valor deseado, tal y como se describe en la sección Tutorial: Instalación del SDK del dispositivo y ejecución de la aplicación de ejemplo para Device Shadows.

En el ejemplo anterior, configuramos el color deseado en yellow. Después de introducir cada valor, el terminal le pide que introduzca otro valor desired. Si vuelve a introducir el mismo valor (yellow), la aplicación lo reconoce y le pide que introduzca un nuevo valor desired.

Enter desired value: yellow Local value is already 'yellow'. Enter desired value:

Ahora, supongamos que ha introducido el color green. AWS IoT responde a la solicitud y actualiza el valor reported a green. Así es como se produce la actualización cuando el estado desired es diferente del estado reported, lo que provoca un delta.

Cómo simula la aplicación de ejemplo shadow.py las interacciones de Device Shadow:
  1. Introduzca un valor desired (por ejemployellow) en el terminal para publicar el estado deseado.

  2. Como el estado desired es diferente del estado reported (por ejemplo, el color green), se produce un delta y la aplicación que está suscrita al delta recibe este mensaje.

  3. La aplicación responde al mensaje y actualiza su estado al valor desired, yellow.

  4. A continuación, la aplicación publica un mensaje de actualización con el nuevo valor registrado del estado del dispositivo, yellow.

A continuación se muestran los mensajes que se muestran en el terminal y que muestran cómo se publica la solicitud de actualización.

Enter desired value: green Changed local shadow value to 'green'. Updating reported shadow value to 'green'... Update request published. Finished updating reported shadow value to 'green'.

En la consola de AWS IoT, el documento oculto refleja el valor actualizado green para los campos reported y desired y, además, el número de versión se incrementa en 1. Por ejemplo, si el número de la versión anterior se mostraba como 10, el número de la versión actual aparecerá como 11.

nota

Borrar una sombra no restablece el número de versión a 0. Verá que la versión sombra se incrementa en 1 cuando publique una solicitud de actualización o cree otra sombra con el mismo nombre.

Editar el documento Shadow para observar los eventos delta

La aplicación de ejemplo shadow.py también está suscrita a los eventos delta y responde cuando se produce un cambio en el valor desired. Por ejemplo, puede cambiar el valor desired por el color red. Para ello, en la consola de AWS IoT, edite el documento Shadow haciendo clic en Editar y, a continuación, establezca el valor desired en red en el JSON, manteniendo el valor reported en green. Antes de guardar los cambios, mantén abierto el terminal de la Raspberry Pi, ya que verás mensajes en el terminal cuando se produzca el cambio.

{ "desired": { "welcome": "aws-iot", "color": "red" }, "reported": { "welcome": "aws-iot", "color": "green" } }

Tras guardar el nuevo valor, la aplicación de ejemplo shadow.py responde a este cambio y muestra mensajes en el terminal que indican el delta. A continuación, verá los siguientes mensajes debajo de la solicitud para introducir el valor desired.

Enter desired value: Received shadow delta event. Delta reports that desired value is 'red'. Changing local value... Changed local shadow value to 'red'. Updating reported shadow value to 'red'... Finished updating reported shadow value to 'red'. Enter desired value: Update request published. Finished updating reported shadow value to 'red'.

Paso 2: Ver los mensajes de la aplicación de ejemplo shadow.py en el cliente de prueba MQTT

Puede utilizar el cliente de prueba de MQTT de la consola de AWS IoT para supervisar los mensajes de MQTT que se transmiten a su Cuenta de AWS. Al suscribirse a los temas MQTT reservados utilizados por el servicio Device Shadow, puede observar los mensajes recibidos por los temas al ejecutar la aplicación de ejemplo.

Si aún no ha utilizado el cliente de pruebas de MQTT, puede revisar Vea MQTT los mensajes con el AWS IoT MQTTcliente Esto le ayudará a aprender a utilizar el cliente de prueba de MQTT de la consola de AWS IoT para ver los mensajes MQTT a medida que pasan por el agente de mensajes.

  1. Abra el cliente de prueba MQTT

    Abra el cliente de prueba de MQTT en la consola de AWS IoT en una ventana nueva para poder observar los mensajes recibidos por los temas MQTT sin perder la configuración de su cliente de prueba de MQTT. El cliente de prueba MQTT no conserva las suscripciones ni los registros de mensajes si lo abandona para ir a otra página de la consola. Para esta sección del tutorial, puede tener el documento Sombra de su cosa AWS IoT y el cliente de prueba MQTT abiertos en ventanas separadas para observar más fácilmente la interacción con las Sombras de dispositivos.

  2. Suscribirse a los temas reservados de MQTT Shadow

    Puede utilizar el cliente de pruebas de MQTT para introducir los nombres de los temas reservados de MQTT de Device Shadow y suscribirse a ellos para recibir actualizaciones cuando ejecute la aplicación de ejemplo shadow.py. Para suscribirse al tema:

    1. En el cliente de prueba MQTT de la consola de AWS IoT, seleccione Suscribirse a un tema.

    2. En la sección Filtrar temas, introduzca: $aws/things/thingname/shadow/update/#. Aquí thingname es el nombre del recurso que creó anteriormente (por ejemplo, My_light_bulb).

    3. Mantenga los valores predeterminados para los ajustes de configuración adicionales y, a continuación, seleccione Suscribirse.

    Si utiliza el comodín # en la suscripción al tema, podrá suscribirse a varios temas de MQTT al mismo tiempo y observar todos los mensajes que se intercambian entre el dispositivo y su Shadow en una sola ventana. Para obtener más información sobre los caracteres comodín y su uso, consulte Temas de MQTT.

  3. Ejecute un programa de ejemplo shadow.py y observe los mensajes

    En la ventana de la línea de comandos de la Raspberry Pi, si ha desconectado el programa, vuelva a ejecutar la aplicación de ejemplo y mire los mensajes en el cliente de pruebas MQTT de la consola de AWS IoT.

    1. Ejecute la siguiente orden para reiniciar el programa de muestra. Sustituya your-iot-thing-name y your-iot-endpoint por los nombres de la cosa AWS IoT que creó anteriormente (por ejemplo, My_light_bulb), y el punto de conexión para interactuar con el dispositivo.

      cd ~/aws-iot-device-sdk-python-v2/samples python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name

      A continuación, la aplicación de ejemplo shadow.py se ejecuta y recupera el estado de sombra actual. Si ha eliminado la sombra o borrado los estados actuales, el programa fija el valor actual a off y luego le pide que introduzca un valor desired.

      Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'... Connected! Subscribing to Delta events... Subscribing to Update responses... Subscribing to Get responses... Requesting current shadow state... Launching thread to read user input... Finished getting initial shadow state. Shadow document lacks 'color' property. Setting defaults... Changed local shadow value to 'off'. Updating reported shadow value to 'off'... Update request published. Finished updating reported shadow value to 'off'... Enter desired value:

      Por otro lado, si el programa se estaba ejecutando y lo reiniciaste, verás el último valor de color registrado en la terminal. En el cliente de prueba MQTT, verá una actualización de los temas $aws/things/thingname/shadow/get y $aws/things/thingname/shadow/get/accepted.

      Supongamos que el último color registrado fue green. A continuación se muestra el contenido del archivo JSON $aws/things/thingname/shadow/get/accepted.

      { "state": { "desired": { "welcome": "aws-iot", "color": "green" }, "reported": { "welcome": "aws-iot", "color": "green" } }, "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620161643 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620161643 } } }, "version": 10, "timestamp": 1620173908 }
    2. Introduzca un valor desired en la terminal, por ejemplo yellow. La aplicación de ejemplo shadow.py responde y muestra los siguientes mensajes en el terminal que muestran el cambio en el valor reported a yellow.

      Enter desired value: yellow Changed local shadow value to 'yellow'. Updating reported shadow value to 'yellow'... Update request published. Finished updating reported shadow value to 'yellow'.

      En el cliente de prueba de MQTT de la consola de AWS IoT, en Suscripciones, verá que los siguientes temas han recibido un mensaje:

      • $aws/things/thingname/shadow/update: muestra que ambos valores desired y updated cambian al color yellow.

      • $aws/things/thingname/shadow/update/accepted: muestra los valores actuales de los estados desired y reported y sus metadatos e información sobre la versión.

      • $aws/things/thingname/shadow/update/documents: muestra los valores anteriores y actuales de los estados desired y reported y sus metadatos e información sobre la versión.

      Como el documento $aws/things/thingname/shadow/update/documents también contiene información contenida en los otros dos temas, podemos revisarlo para ver la información de estado. El estado anterior muestra el valor informado establecido en green, sus metadatos e información de versión, y el estado actual, que muestra el valor informado actualizado a yellow.

      { "previous": { "state": { "desired": { "welcome": "aws-iot", "color": "green" }, "reported": { "welcome": "aws-iot", "color": "green" } }, "metadata": { "desired": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297898 } }, "reported": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297898 } } }, "version": 10 }, "current": { "state": { "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }, "metadata": { "desired": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297904 } }, "reported": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297904 } } }, "version": 11 }, "timestamp": 1617297904 }
    3. Ahora, si introduce otro valor desired, verá más cambios en los valores reported y en las actualizaciones de los mensajes que se reciben en estos temas. El número de versión también se incrementa en 1. Por ejemplo, si introduce el valor green, el estado anterior informa del valor yellow y el estado actual informa del valor green.

  4. Editar el documento Shadow para observar los eventos delta

    Para observar los cambios en el tema delta, edite el documento paralelo en la consola de AWS IoT. Por ejemplo, puede cambiar el valor desired por el color red. Para ello, en la consola de AWS IoT, seleccione Editar y, a continuación, establezca el valor desired en rojo en el JSON, manteniendo el valor establecido reported en green. Antes de guardar el cambio, mantenga el terminal abierto ya que verá el mensaje delta informado en el terminal.

    { "desired": { "welcome": "aws-iot", "color": "red" }, "reported": { "welcome": "aws-iot", "color": "green" } }

    La aplicación de ejemplo shadow.py responde a este cambio y muestra mensajes en el terminal que indican el delta. En el cliente de pruebas de MQTT, los temas update habrán recibido un mensaje que muestra los cambios en los valores desired y reported.

    También verá que el tema $aws/things/thingname/shadow/update/delta recibió un mensaje. Para ver el mensaje, seleccione este tema, que aparece en Suscripciones.

    { "version": 13, "timestamp": 1617318480, "state": { "color": "red" }, "metadata": { "color": { "timestamp": 1617318480 } } }

Paso 3: solucionar los errores de las interacciones de Device Shadow

Al ejecutar la aplicación de ejemplo Shadow, es posible que surjan problemas al observar las interacciones con el servicio Device Shadow.

Si el programa se ejecuta correctamente y le pide que introduzca un valor desired, debería poder observar las interacciones de Device Shadow mediante el documento Shadow y el cliente de pruebas MQTT, tal y como se ha descrito anteriormente. Sin embargo, si no puede ver las interacciones, puede comprobar lo siguiente:

  • Comprueba el nombre de la cosa y su sombra en la consola de AWS IoT

    Si no ve los mensajes en el documento Shadow, revise el comando y asegúrese de que coincide con el nombre de la cosa en la consola de AWS IoT. También puede comprobar si tiene una sombra clásica eligiendo su recurso cosa y luego eligiendo Sombras. Este tutorial se centra principalmente en las interacciones con la sombra clásica.

    También puede confirmar que el dispositivo que utilizó está conectado a Internet. En la consola deAWS IoT, elija lo que ha creado anteriormente y, a continuación, seleccione Interactuar. En la página de detalles de la cosa, debería ver un mensaje que dice: This thing already appears to be connected.

  • Compruebe los temas reservados de MQTT a los que se ha suscrito

    Si los mensajes no aparecen en el cliente de prueba de MQTT, compruebe si los temas a los que se ha suscrito tienen el formato correcto. Los temas de Device Shadow de MQTT tienen el formato $aws/things/thingname/shadow/ y pueden tener update, get o delete detrás en función de las acciones que desee realizar en la sombra. En este tutorial se utiliza el tema $aws/things/thingname/shadow/ #, así que asegúrese de haberlo introducido correctamente al suscribirse al tema en la sección de filtrado de temas del cliente de prueba.

    Al introducir el nombre del tema, asegúrese de que el nombre de la cosa es el mismo que el de la cosa AWS IoT que creó anteriormente. También puede suscribirse a otros temas de MQTT para comprobar si la actualización se ha realizado correctamente. Por ejemplo, puede suscribirse al tema $aws/things/thingname/shadow/update/rejected para recibir un mensaje cada vez que falle una solicitud de actualización y así poder depurar los problemas de conexión. Para más información sobre los temas reservados, consulte Temas de sombra y Temas MQTT de sombra de dispositivo.

Paso 4: Revisar los resultados y los siguientes pasos

En este tutorial, ha aprendido a:
  • Usar la aplicación de ejemplo shadow.py para especificar los estados deseados y actualizar el estado actual de la sombra.

  • Editar el documento Shadow para observar los eventos delta y cómo responde a ellos la aplicación de muestra shadow.py.

  • Utilizar el cliente de prueba MQTT para suscribirse a temas sombra y observar las actualizaciones cuando ejecute el programa de ejemplo.

Pasos siguientes

Puede suscribirse a otros temas reservados de MQTT para ver las actualizaciones de la aplicación oculta. Por ejemplo, si solo se suscribe al tema $aws/things/thingname/shadow/update/accepted, solo verá la información sobre el estado actual cuando la actualización se realice correctamente.

También puede suscribirse a temas sombra adicionales para depurar problemas o aprender más sobre las interacciones de la Sombra de Dispositivos y también depurar cualquier problema con las interacciones de la Sombra de Dispositivos. Para obtener más información, consulte Temas de sombra y Temas MQTT de sombra de dispositivo.

También puede optar por ampliar su aplicación utilizando sombras con nombre o utilizando hardware adicional conectado con la Raspberry Pi para los LED y observar los cambios en su estado mediante mensajes enviados desde el terminal.

Para obtener más información sobre el servicio Device Shadow y el uso del servicio en dispositivos, aplicaciones y servicios, consulte AWS IoT Servicio Device Shadow, Uso de sombras en dispositivos, y Uso de sombras en aplicaciones y servicios.