Uso de sombras en dispositivos - AWS IoT Core

Uso de sombras en dispositivos

En esta sección se describen las comunicaciones de dispositivos con sombras mediante mensajes MQTT, el método preferido para que los dispositivos se comuniquen con el servicio Device Shadow de AWS IoT.

Las comunicaciones de sombra emulan un modelo de solicitud/respuesta utilizando el modelo de comunicación de publicación/suscripción de MQTT. Cada acción de sombra consta de un tema de solicitud, un tema de respuesta correcta (accepted) y un tema de respuesta de error (rejected).

Si desea que las aplicaciones y servicios puedan determinar si un dispositivo está conectado, consulte Detección de un dispositivo conectado.

importante

Dado que MQTT utiliza un modelo de comunicación de publicación/suscripción, debe suscribirse a los temas de respuesta antes de publicar un tema de solicitud. Si no lo hace, es posible que no reciba la respuesta a la solicitud que publique.

Si utiliza un SDK para dispositivos con AWS IoT para llamar a las API del servicio sombra de dispositivo, esto se gestiona automáticamente.

Los ejemplos de esta sección utilizan una forma abreviada del tema, de modo que ShadowTopicPrefix puede hacer referencia a una sombra con nombre o sin nombre, como se describe en esta tabla.

Las sombras pueden ser con nombre o sin nombre (clásico). Los temas utilizados por cada uno solo difieren en el prefijo del tema. Esta tabla muestra el prefijo de tema utilizado por cada tipo de sombra.

Valor ShadowTopicPrefix Tipo de sombra
$aws/things/thingName/shadow Sombra sin nombre (clásica)
$aws/things/thingName/shadow/name/shadowName Sombra con nombre
importante

Asegúrese de que el uso de las sombras por parte de la aplicación o servicio sea coherente y compatible con las implementaciones correspondientes en los dispositivos. Por ejemplo, tenga en cuenta cómo se crean, actualizan y eliminan las sombras. Tenga en cuenta también cómo se tratan las actualizaciones en el dispositivo y en las aplicaciones o servicios que acceden al dispositivo a través de una sombra. El diseño debe ser claro respecto a cómo se actualiza y notifica el estado del dispositivo y cómo interactúan las aplicaciones y los servicios con el dispositivo y sus sombras.

Para crear un tema completo, seleccione el ShadowTopicPrefix para el tipo de sombra al que desea hacer referencia, reemplace thingName y shadowName si procede, con sus valores correspondientes y, a continuación, anexe el código auxiliar del tema como se muestra en la tabla siguiente. Recuerde que los temas distinguen entre mayúsculas y minúsculas.

Consulte Temas de sombra para obtener más información acerca de los temas reservados para las sombras.

Inicialización del dispositivo en la primera conexión a AWS IoT

Después de que un dispositivo se registre con AWS IoT, debe suscribirse a estos mensajes MQTT para las sombras que admite.

Tema Significado Acción que debe realizar un dispositivo cuando se recibe este tema

ShadowTopicPrefix/delete/accepted

Se aceptó la delete solicitud e AWS IoT eliminó la sombra.

Las acciones necesarias para incorporar la sombra eliminada, como detener la publicación de actualizaciones.

ShadowTopicPrefix/delete/rejected

AWS IoT rechazó la solicitud delete y la sombra no se eliminó. El cuerpo del mensaje contiene la información de error.

Responda al mensaje de error en el cuerpo del mensaje.

ShadowTopicPrefix/get/accepted

AWS IoT aceptó la solicitud get y el cuerpo del mensaje contiene el documento de sombra actual.

Las acciones necesarias para procesar el documento de estado en el cuerpo del mensaje.

ShadowTopicPrefix/get/rejected

AWS IoT rechazó la solicitud get y el cuerpo del mensaje contiene la información de error.

Responda al mensaje de error en el cuerpo del mensaje.

ShadowTopicPrefix/update/accepted

AWS IoT aceptó la solicitud update y el cuerpo del mensaje contiene el documento de sombra actual.

Confirme que los datos actualizados en el cuerpo del mensaje coinciden con el estado del dispositivo.

ShadowTopicPrefix/update/rejected

AWS IoT rechazó la solicitud update y el cuerpo del mensaje contiene la información de error.

Responda al mensaje de error en el cuerpo del mensaje.

ShadowTopicPrefix/update/delta

El documento de sombra se actualizó mediante una solicitud a AWS IoT y el cuerpo del mensaje contiene los cambios solicitados.

Actualice el estado del dispositivo para que coincida con el estado deseado en el cuerpo del mensaje.

ShadowTopicPrefix/update/documents

Recientemente se completó una actualización de la sombra y el cuerpo del mensaje contiene el documento de sombra actual.

Confirme que el estado actualizado en el cuerpo del mensaje coincide con el estado del dispositivo.

Después de suscribirse a los mensajes de la tabla anterior para cada sombra, el dispositivo debe probar si las sombras que admite ya se han creado publicando un tema /get en cada sombra. Si se recibe un mensaje /get/accepted, el cuerpo del mensaje contiene el documento de sombra, que el dispositivo puede utilizar para inicializar su estado. Si se recibe un mensaje /get/rejected, la sombra debe crearse publicando un mensaje /update con el estado actual del dispositivo.

Por ejemplo, supongamos que tiene un objeto My_IoT_Thing sin sombras, ni clásicas ni con nombre. Si ahora publica una solicitud /get en el tema reservado $aws/things/My_IoT_Thing/shadow/get, se devolverá un error sobre el tema $aws/things/My_IoT_Thing/shadow/get/rejected, ya que el objeto no tiene sombras. Para resolver este error, publique primero un mensaje /update utilizando el tema $aws/things/My_IoT_Thing/shadow/update con el estado actual del dispositivo, como la siguiente carga.

{ "state": { "reported": { "welcome": "aws-iot", "color": "yellow" } } }

Ahora se creará una sombra clásica para el objeto y el mensaje se publicará en el tema $aws/things/My_IoT_Thing/shadow/update/accepted. Si publica en el tema $aws/things/My_IoT_Thing/shadow/get, se devuelve una respuesta al tema $aws/things/My_IoT_Thing/shadow/get/accepted con el estado del dispositivo.

En el caso de las sombras con nombre, debe crear primero la sombra con nombre o publicar una actualización con el nombre de la sombra antes de utilizar la solicitud get. Por ejemplo, para crear una sombra con nombre namedShadow1, publique primero la información del estado del dispositivo en el tema $aws/things/My_IoT_Thing/shadow/name/namedShadow1/update. Para recuperar la información de estado, use la solicitud /get para la sombra con nombre ($aws/things/My_IoT_Thing/shadow/name/namedShadow1/get).

Procesamiento de mensajes mientras el dispositivo está conectado a AWS IoT

Mientras un dispositivo está conectado a AWS IoT, puede recibir mensajes /update/delta, y el estado del dispositivo debe coincidir siempre con los cambios en sus sombras; para ello debe hacer lo siguiente:

  1. Leer todos los mensajes /update/delta recibidos y sincronizar el estado del dispositivo para que coincida.

  2. Publicando un mensaje /update con un cuerpo de mensaje reported que tenga el estado actual del dispositivo, siempre que cambie el estado del dispositivo.

Mientras un dispositivo está conectado, debe publicar estos mensajes cuando se indique.

Indicación Tema Carga

El estado del dispositivo ha cambiado.

ShadowTopicPrefix/update

Un documento de sombra con la propiedad reported.

Es posible que el dispositivo no esté sincronizado con la sombra.

ShadowTopicPrefix/get

(empty)

Una acción en el dispositivo indica que el dispositivo ya no admite una sombra; por ejemplo, cuando se quita o se reemplaza el dispositivo.

ShadowTopicPrefix/delete

(empty)

Procesamiento de mensajes cuando el dispositivo se vuelve a conectar a AWS IoT

Cuando un dispositivo con una o más sombras se conecta a AWS IoT, debe sincronizar su estado con el de todas las sombras que admite del siguiente modo:

  1. Leer todos los mensajes /update/delta recibidos y sincronizar el estado del dispositivo para que coincida.

  2. Publicando un mensaje /update con un cuerpo de mensaje reported que tenga el estado actual del dispositivo.