

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
<a name="interact-lights-device-shadows"></a>

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 parezcan a los semáforos AWS IoT y responder a la solicitud y actualizar los valores informados.

**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:**  
Configura tu Cuenta de AWS, configura tu dispositivo Raspberry Pi y crea una AWS IoT cosa 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](create-resources-shadow.md) y [Paso 1: ejecutar la aplicación de ejemplo shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows). Si aún no lo ha hecho, debe completar estos tutoriales.

**Topics**
+ [Paso 1: Actualizar los valores deseados y notificados mediante la aplicación de ejemplo `shadow.py`](#update-desired-shadow-sample)
+ [Paso 2: Ver los mensajes de la aplicación de ejemplo `shadow.py` en el cliente de prueba MQTT](#shadow-sample-view-msg)
+ [Paso 3: solucionar los errores de las interacciones de Device Shadow](#shadow-observe-messages-troubleshoot)
+ [Paso 4: Revisar los resultados y los siguientes pasos](#sample-shadow-review)

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`
<a name="update-desired-shadow-sample"></a>

En el tutorial anterior[Paso 1: ejecutar la aplicación de ejemplo shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows), aprendió a observar un mensaje publicado en el documento Shadow de la AWS IoT consola 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](lightbulb-shadow-application.md).

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 has introducido el color`green`. AWS IoT responde a la solicitud y actualiza el `reported` valor 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 ejemplo`yellow`) en el terminal para publicar el estado deseado.

1. 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.

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

1. 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 AWS IoT consola, el documento oculto refleja el valor actualizado `green` para los `desired` campos `reported` 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 AWS IoT consola, edite el documento oculto haciendo clic en **Editar** y, a continuación, establezca el `desired` valor `red` en en el JSON, manteniendo el `reported` valor 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
<a name="shadow-sample-view-msg"></a>

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 los mensajes MQTT con el cliente AWS IoT MQTT](view-mqtt-messages.md) 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](https://console.aws.amazon.com//iot/home#/test) 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, puedes hacer que el documento Shadow que AWS IoT prefieras y el cliente de pruebas de MQTT se abran en ventanas separadas para observar más fácilmente la interacción con Device Shadows.

1. 

**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**.

   1.  En la sección de **filtros de temas**, introduzca: ***thingname*\$1aws/things/** /shadow/update/ \$1. Aquí `thingname` es el nombre del recurso que creó anteriormente (por ejemplo, `My_light_bulb`).

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

   Si utiliza el comodín **\$1** 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](topics.md).

1. 

**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 por *your-iot-endpoint* los nombres de AWS IoT lo que creó anteriormente (por ejemplo,`My_light_bulb`) y del punto final para interactuar con el dispositivo. 

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
      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 pruebas de MQTT, verá una actualización de los temas **\$1aws/things/ /shadow/get y *thingname* \$1aws/things/**/. *thingname* shadow/get/accepted**

      Supongamos que el último color registrado fue `green`. **A continuación se muestra el contenido del archivo \$1aws/things//JSON. *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
      }
      ```

   1. 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 la opción **Cliente de prueba de MQTT** de la **consola de AWS IoT **, en **Suscripciones**, verá que los siguientes temas han recibido un mensaje:
      + **\$1aws/things/ *thingname* /shadow/update**: muestra que ambos valores cambian de color. `desired` `updated` `yellow`
      + **\$1aws/things/*thingname*/shadow/update/accepted: muestra los valores actuales de los estados y y sus** metadatos e información de versión. `desired` `reported`
      + **\$1aws/things/*thingname*/shadow/update/documents**: muestra los valores anteriores y actuales de los estados y sus metadatos e información de versión. `desired` `reported`

      Como el documento **\$1aws/things/*thingname*/shadow/update/documents**también contiene información incluida en los otros dos temas, podemos revisarla para ver la información sobre el 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
      }
      ```

   1. 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`.

1. 

**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 AWS IoT consola, selecciona **Editar** y, a continuación, establece el `desired` valor en rojo en el JSON, manteniendo el valor establecido en. `reported` `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ás que el tema **\$1aws/things//*thingname***ha recibido un mensaje. shadow/update/delta 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
<a name="shadow-observe-messages-troubleshoot"></a>

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 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 de AWS 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 **\$1aws/things/ *thingname* /shadow/** y pueden tener `update``get`, o `delete` seguir este formato en función de las acciones que desee realizar en la sombra. **En este tutorial se utiliza el tema **\$1aws/things/ *thingname* /shadow/ \$1**, así que asegúrese de haberlo introducido correctamente al suscribirse al tema en la sección de filtro de temas del cliente de prueba.**

  Al introducir el nombre del tema, asegúrate de que *thingname* es el mismo que el nombre del tema que has creado anteriormente. AWS IoT También puede suscribirse a otros temas de MQTT para comprobar si la actualización se ha realizado correctamente. Por ejemplo, puedes suscribirte al tema **\$1aws/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](reserved-topics.md#reserved-topics-shadow) y [Temas MQTT de sombra de dispositivo](device-shadow-mqtt.md).

## Paso 4: Revisar los resultados y los siguientes pasos
<a name="sample-shadow-review"></a>

**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.

**Siguientes pasos**  
Puede suscribirse a otros temas reservados de MQTT para ver las actualizaciones de la aplicación oculta. Por ejemplo, si solo te suscribes al tema **\$1aws/things/*thingname*/shadow/update/accepted**, solo verás 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](reserved-topics.md#reserved-topics-shadow) y [Temas MQTT de sombra de dispositivo](device-shadow-mqtt.md).

También puedes optar por ampliar tu aplicación utilizando sombras con nombre o utilizando hardware adicional conectado a la Raspberry Pi para observar los cambios en su estado mediante los mensajes enviados desde el LEDs 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](iot-device-shadows.md), [Uso de sombras en dispositivos](device-shadow-comms-device.md), y [Uso de sombras en aplicaciones y servicios](device-shadow-comms-app.md).