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.
Interacción con sombras
En este tema se describen los mensajes asociados a cada uno de los tres métodos que proporciona AWS IoT para trabajar con sombras. Estos métodos incluyen lo siguiente:
UPDATE
-
Crea una sombra si no existe o actualiza el contenido de una sombra existente con la información de estado proporcionada en el cuerpo del mensaje. AWS IoT registra una marca temporal con cada actualización para indicar cuándo se actualizó el estado por última vez. Cuando cambia el estado de la sombra, AWS IoT envía mensajes
/delta
a todos los suscriptores de MQTT con la diferencia entre los estadosdesired
yreported
. Los dispositivos o aplicaciones que reciben un mensaje/delta
pueden realizar acciones en función de la diferencia. Por ejemplo, un dispositivo puede actualizar su estado al estado deseado o una aplicación puede actualizar su interfaz de usuario para mostrar el cambio de estado del dispositivo. GET
-
Recupera un documento de sombra actual que contiene el estado completo de la sombra, incluidos los metadatos.
DELETE
-
Elimina la sombra y todo su contenido. No se puede restaurar una sombra de dispositivo eliminada, pero se puede crear otra con el mismo nombre.
Compatibilidad del protocolo
AWS IoT admite MQTT
Estado de solicitud y notificación
Al diseñar su solución de IoT utilizando AWS IoT y sombras, debe determinar las aplicaciones o dispositivos que solicitarán cambios y los que los implementarán. Normalmente, un dispositivo implementa y notifica los cambios a la sombra y las aplicaciones y los servicios responden y solicitan cambios en la sombra. Su solución podría ser diferente, pero en los ejemplos de este tema se supone que la aplicación cliente o el servicio solicita cambios en la sombra y el dispositivo realiza los cambios y los notifica de nuevo a la sombra.
Actualización de la sombra
La aplicación o el servicio pueden actualizar el estado de una sombra mediante la API UpdateThingShadow o publicando en el tema /update. Las actualizaciones afectan únicamente a los campos especificados en la solicitud.
Actualización de una sombra cuando un cliente solicita un cambio de estado
Cuando un cliente solicita un cambio de estado en una sombra mediante el protocolo MQTT
-
El cliente debe tener un documento de sombra actual para que pueda identificar las propiedades que se van a cambiar. Consulte la acción /get para ver cómo obtener el documento de sombra actual.
-
El cliente se suscribe a los siguientes temas de MQTT:
-
$aws/things/
thingName
/shadow/name/shadowName
/update/accepted -
$aws/things/
thingName
/shadow/name/shadowName
/update/rejected -
$aws/things/
thingName
/shadow/name/shadowName
/update/delta -
$aws/things/
thingName
/shadow/name/shadowName
/update/documents
-
-
El cliente publica un tema de solicitud de
$aws/things/
con un documento de estado que contiene el estado deseado de la sombra. Solo las propiedades que se van a cambiar deben incluirse en el documento. Este es un ejemplo de un documento con el estado deseado.thingName
/shadow/name/shadowName
/update{ "state": { "desired": { "color": { "r": 10 }, "engine": "ON" } } }
-
Si la solicitud de actualización es válida, AWS IoT actualiza el estado deseado en la sombra y publica mensajes sobre estos temas:
-
$aws/things/
thingName
/shadow/name/shadowName
/update/accepted -
$aws/things/
thingName
/shadow/name/shadowName
/update/delta
El mensaje
/update/accepted
contiene un documento de sombra Documento de estado de la respuesta /aceptado y el mensaje/update/delta
contiene un documento de sombra Documento de estado de la respuesta /delta. -
-
Si la solicitud de actualización no es válida, AWS IoT publica un mensaje con el tema
$aws/things/
con un documento de sombra Documento de respuesta de error que describe el error.thingName
/shadow/name/shadowName
/update/rejected
Cuando un cliente solicita un cambio de estado en una sombra mediante el uso de la API
-
El cliente llama a la API
UpdateThingShadow
con un documento de estado Documento de estado de la solicitud como cuerpo del mensaje. -
Si la solicitud fuera válida, AWS IoT devuelve un código de respuesta HTTP correcta y un documento de sombra Documento de estado de la respuesta /aceptado como cuerpo del mensaje de respuesta.
AWS IoT también publicará un mensaje MQTT en el tema
$aws/things/
con un documento de sombra Documento de estado de la respuesta /delta para cualquier dispositivo o cliente que se suscriba a él.thingName
/shadow/name/shadowName
/update/delta -
Si la solicitud no era válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de respuesta de error como cuerpo del mensaje de respuesta.
Cuando el dispositivo recibe el estado /desired
en el tema /update/delta
, realiza los cambios deseados en el dispositivo. A continuación, envía un mensaje
al tema /update
para notificar su estado actual a la sombra.
Actualización de una sombra cuando un dispositivo notifica su estado actual
Cuando un dispositivo notifica su estado actual a la sombra mediante el protocolo MQTT
-
El dispositivo debe suscribirse a estos temas de MQTT antes de actualizar la sombra:
-
$aws/things/
thingName
/shadow/name/shadowName
/update/accepted -
$aws/things/
thingName
/shadow/name/shadowName
/update/rejected -
$aws/things/
thingName
/shadow/name/shadowName
/update/delta -
$aws/things/
thingName
/shadow/name/shadowName
/update/documents
-
-
El dispositivo notifica su estado actual publicando un mensaje en el tema
$aws/things/
que notifica estado actual, como en este ejemplo.thingName
/shadow/name/shadowName
/update{ "state": { "reported" : { "color" : { "r" : 10 }, "engine" : "ON" } } }
-
Si AWS IoT acepta la actualización, publica un mensaje en los temas
$aws/things/
con un documento de sombra Documento de estado de la respuesta /aceptado.thingName
/shadow/name/shadowName
/update/accepted -
Si la solicitud de actualización no es válida, AWS IoT publica un mensaje con el tema
$aws/things/
con un documento de sombra Documento de respuesta de error que describe el error.thingName
/shadow/name/shadowName
/update/rejected
Cuando un dispositivo notifica su estado actual a la sombra mediante la API
-
El dispositivo llama a la API
UpdateThingShadow
con un documento de estado Documento de estado de la solicitud como cuerpo del mensaje. -
Si la solicitud era válida, AWS IoT actualiza la sombra y devuelve un código de respuesta HTTP correcto con un documento de sombra Documento de estado de la respuesta /aceptado como cuerpo del mensaje de respuesta.
AWS IoT también publicará un mensaje MQTT en el tema
$aws/things/
con un documento de sombra Documento de estado de la respuesta /delta para cualquier dispositivo o cliente que se suscriba a él.thingName
/shadow/name/shadowName
/update/delta -
Si la solicitud no era válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de respuesta de error como cuerpo del mensaje de respuesta.
Bloqueo optimista
Puede utilizar la versión del documento de estado para asegurarse de que actualiza la versión más reciente del documento de sombra de un dispositivo. Cuando se suministra una versión con una solicitud de actualización, el servicio rechaza la solicitud con un código de respuesta de conflicto HTTP 409 si la versión actual del documento de estado no coincide con la versión suministrada.
Por ejemplo:
Documento inicial:
{ "state": { "desired": { "colors": [ "RED", "GREEN", "BLUE" ] } }, "version": 10 }
Actualización: (la versión no coincide; se rechazará esta solicitud)
{ "state": { "desired": { "colors": [ "BLUE" ] } }, "version": 9 }
Resultado:
{ "code": 409, "message": "Version conflict", "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }
Actualización: (la versión coincide; esta solicitud se aceptará)
{ "state": { "desired": { "colors": [ "BLUE" ] } }, "version": 10 }
Estado final:
{ "state": { "desired": { "colors": [ "BLUE" ] } }, "version": 11 }
Recuperación de un documento de sombra
Puede recuperar un documento de sombra utilizando la API GetThingShadow o suscribiéndose y publicando en el tema /get. Esto recupera un documento de sombra completo, incluido cualquier delta entre los
estados desired
y reported
. El procedimiento para esta tarea es el mismo si el dispositivo o un cliente está
realizando la solicitud.
Para recuperar un documento de sombra mediante el protocolo MQTT
-
El dispositivo o cliente debe suscribirse a estos temas de MQTT antes de actualizar la sombra:
-
$aws/things/
thingName
/shadow/name/shadowName
/get/accepted -
$aws/things/
thingName
/shadow/name/shadowName
/get/rejected
-
-
El dispositivo o cliente publica un mensaje en el tema
$aws/things/
con un cuerpo de mensaje vacío.thingName
/shadow/name/shadowName
/get -
Si la solicitud se realiza correctamente, AWS IoT publica un mensaje en el tema
$aws/things/
con un Documento de estado de la respuesta /aceptado en el cuerpo del mensaje.thingName
/shadow/name/shadowName
/get/accepted -
Si la solicitud no era válida, AWS IoT publica un mensaje en el tema
$aws/things/
con un Documento de respuesta de error en el cuerpo del mensaje.thingName
/shadow/name/shadowName
/get/rejected
Para recuperar un documento de sombra mediante una API REST
-
El dispositivo o cliente llama a la API
GetThingShadow
con un cuerpo de mensaje vacío. -
Si la solicitud es válida, AWS IoT devuelve un código de respuesta HTTP correcto con un documento de sombra Documento de estado de la respuesta /aceptado como cuerpo del mensaje de respuesta.
-
Si la solicitud no es válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de respuesta de error como cuerpo del mensaje de respuesta.
Eliminación de datos de sombra
Hay dos formas de eliminar datos de sombra: puede eliminar propiedades específicas en el documento de sombra y puede eliminar la sombra por completo.
-
Para eliminar propiedades específicas de una sombra, actualice la sombra; sin embargo, establezca el valor de las propiedades que desea eliminar en
null
. Los campos con un valornull
se eliminan del documento de sombra. -
Para eliminar toda la sombra, use la API DeleteThingShadow o publique en el tema /delete.
Eliminación de una propiedad de un documento de sombra
Para eliminar una propiedad de una sombra mediante el protocolo MQTT
-
El dispositivo o cliente debe tener un documento de sombra actual para que pueda identificar las propiedades que se van a cambiar. Consulte Recuperación de un documento de sombra para obtener información sobre cómo obtener el documento de sombra actual.
-
El dispositivo o cliente se suscribe a estos temas de MQTT:
-
$aws/things/
thingName
/shadow/name/shadowName
/update/accepted -
$aws/things/
thingName
/shadow/name/shadowName
/update/rejected
-
-
El dispositivo o cliente publica un tema de solicitud
$aws/things/
con un documento de estado que asigna valoresthingName
/shadow/name/shadowName
/updatenull
a las propiedades de la sombra que se va a eliminar. Solo las propiedades que se van a cambiar deben incluirse en el documento. Este es un ejemplo de un documento que elimina la propiedadengine
.{ "state": { "desired": { "engine": null } } }
-
Si la solicitud de actualización es válida, AWS IoT elimina las propiedades especificadas en la sombra y publica un mensaje con el tema
$aws/things/
con un documento de sombra Documento de estado de la respuesta /aceptado en el cuerpo del mensaje.thingName
/shadow/name/shadowName
/update/accepted -
Si la solicitud de actualización no es válida, AWS IoT publica un mensaje con el tema
$aws/things/
con un documento de sombra Documento de respuesta de error que describe el error.thingName
/shadow/name/shadowName
/update/rejected
Para eliminar una propiedad de una sombra mediante la API REST
-
El dispositivo o cliente llama a la API
UpdateThingShadow
con un Documento de estado de la solicitud que asigna valoresnull
a las propiedades de la sombra para eliminar. Incluya solo las propiedades que desee eliminar en el documento. Este es un ejemplo de un documento que elimina la propiedadengine
.{ "state": { "desired": { "engine": null } } }
-
Si la solicitud fuera válida, AWS IoT devuelve un código de respuesta HTTP correcta y un documento de sombra Documento de estado de la respuesta /aceptado como cuerpo del mensaje de respuesta.
-
Si la solicitud no era válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de respuesta de error como cuerpo del mensaje de respuesta.
Eliminación de una sombra
Al establecer el estado de sombra del dispositivo en null
no se elimina la sombra. La versión de sombra se incrementará en la próxima actualización.
La eliminación de la sombra de un dispositivo no elimina el objeto. La eliminación de un objeto no elimina la sombra del dispositivo correspondiente.
Para eliminar una sombra mediante el protocolo MQTT
-
El dispositivo o cliente se suscribe a estos temas de MQTT:
-
$aws/things/
thingName
/shadow/name/shadowName
/delete/accepted -
$aws/things/
thingName
/shadow/name/shadowName
/delete/rejected
-
-
El dispositivo o cliente publica un
$aws/things/
con un búfer de mensaje vacío.thingName
/shadow/name/shadowName
/delete -
Si la solicitud de eliminación es válida, AWS IoT elimina la sombra y publica un mensaje con el tema
$aws/things/
y un documento de sombra Documento de estado de la respuesta /aceptado abreviado en el cuerpo del mensaje. Este es un ejemplo del mensaje de eliminación aceptado:thingName
/shadow/name/shadowName
/delete/accepted{ "version": 4, "timestamp": 1591057529 }
-
Si la solicitud de actualización no es válida, AWS IoT publica un mensaje con el tema
$aws/things/
con un documento de sombra Documento de respuesta de error que describe el error.thingName
/shadow/name/shadowName
/delete/rejected
Para eliminar una sombra mediante la API REST
-
El dispositivo o cliente llama a la API
DeleteThingShadow
con un búfer de mensaje vacío. -
Si la solicitud era válida, AWS IoT devuelve un código de respuesta HTTP correcta Documento de estado de la respuesta /aceptado y un documento de sombra Documento de estado de la respuesta /aceptado abreviado en el cuerpo del mensaje. Este es un ejemplo del mensaje de eliminación aceptado:
{ "version": 4, "timestamp": 1591057529 }
-
Si la solicitud no era válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de respuesta de error como cuerpo del mensaje de respuesta.