MQTTTemas sobre Device Shadow - 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.

MQTTTemas sobre Device Shadow

El servicio Device Shadow utiliza MQTT temas reservados para permitir que los dispositivos y las aplicaciones obtengan, actualicen o eliminen la información de estado de un dispositivo (sombra).

La publicación y suscripción de temas de sombra requiere una autorización basada en temas. AWS IoT se reserva el derecho a añadir nuevos temas a la estructura de temas existente. Por este motivo, le recomendamos que evite las suscripciones de tipo comodín a los temas de sombra. Por ejemplo, evita suscribirte a filtros de temas, $aws/things/thingName/shadow/# ya que el número de temas que coinciden con este filtro podría aumentar a medida que se AWS IoT introduzcan nuevos temas ocultos. Para consultar ejemplos de mensajes publicados en estos temas vaya a Interacción con sombras.

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 de ShadowTopicPrefix Tipo de sombra
$aws/things/thingName/shadow Sombra sin nombre (clásica)
$aws/things/thingName/shadow/name/shadowName Sombra con nombre

Para crear un tema completo, seleccione el ShadowTopicPrefix para el tipo de sombra al que desea hacer referencia, reemplace thingName y shadowName si procede, por sus valores correspondientes y, a continuación, anéxelo al código auxiliar del tema como se muestra en las secciones siguientes.

Los siguientes son los MQTT temas que se utilizan para interactuar con las sombras.

/get

Publique un mensaje vacío en este tema para obtener la sombra de objeto:

ShadowTopicPrefix/get

AWS IoT responde publicando en una de las /get/accepted dos/get/rejected.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get" ] } ] }

/get/accepted

AWS IoT publica un documento paralelo de respuesta sobre este tema al devolver la sombra del dispositivo:

ShadowTopicPrefix/get/accepted

Para obtener más información, consulte Documentos de estado de la respuesta.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get/accepted" ] } ] }

/get/rejected

AWS IoT publica un documento de respuesta a errores sobre este tema cuando no puede mostrar la sombra del dispositivo:

ShadowTopicPrefix/get/rejected

Para obtener más información, consulte Documento de respuesta de error.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/get/rejected" ] }, { "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get/rejected" ] } ] }

/update

Publique un documento de estado de solicitud en este tema para actualizar la sombra del dispositivo:

ShadowTopicPrefix/update

El cuerpo del mensaje contiene un documento de estado de solicitud parcial.

Un cliente que intente actualizar el estado de un dispositivo enviará una JSON solicitud de documento de estado con la siguiente desired propiedad:

{ "state": { "desired": { "color": "red", "power": "on" } } }

Un dispositivo que actualice su sombra enviaría un documento de estado de JSON solicitud con la reported propiedad, como este:

{ "state": { "reported": { "color": "red", "power": "on" } } }

AWS IoT responde publicando en una de las /update/accepted dos/update/rejected.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update" ] } ] }

/update/delta

AWS IoT publica un documento de estado de respuesta sobre este tema cuando acepta un cambio en la sombra del dispositivo, y el documento de estado de la solicitud contiene valores desired y reported estados diferentes para:

ShadowTopicPrefix/update/delta

El búfer del mensaje contiene un Documento de estado de la respuesta /delta.

Detalles del cuerpo del mensaje

  • Un mensaje publicado en update/delta incluye únicamente los atributos deseados que difieren entre las secciones desired y reported. Contiene todos estos atributos, independientemente de si se encuentran en el mensaje de actualización actual o si ya estaban almacenados en AWS IoT. No se incluyen los atributos que no difieren entre las secciones desired y reported.

  • Si un atributo se encuentra en la sección reported, pero no tiene equivalente en la sección desired, no se incluye.

  • Si un atributo se encuentra en la sección desired, pero no tiene equivalente en la sección reported, se incluye.

  • Si se elimina un atributo de la sección reported, pero sigue existiendo en la sección desired, se incluye.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/delta" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/delta" ] } ] }

/update/accepted

AWS IoT publica un documento de estado de respuesta sobre este tema cuando acepta un cambio en la sombra del dispositivo:

ShadowTopicPrefix/update/accepted

El búfer del mensaje contiene un Documento de estado de la respuesta /aceptado.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/accepted" ] } ] }

/update/documents

AWS IoT publica un documento de estado sobre este tema cada vez que se realiza correctamente una actualización de la sombra:

ShadowTopicPrefix/update/documents

El cuerpo del mensaje contiene un Documento de estado de respuesta /documentos.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/documents" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/documents" ] } ] }

/update/rejected

AWS IoT publica un documento de respuesta a errores sobre este tema cuando rechaza un cambio en la sombra del dispositivo:

ShadowTopicPrefix/update/rejected

El cuerpo del mensaje contiene un Documento de respuesta de error.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/rejected" ] } ] }

/delete

Para eliminar la sombra de un dispositivo, publique un mensaje vacío para eliminar el tema:

ShadowTopicPrefix/delete

El contenido del mensaje no se tiene en cuenta.

Tenga en cuenta que, al eliminar una sombra, no se restablece su número de versión a 0.

AWS IoT responde publicando en una de las /delete/accepted dos/delete/rejected.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete" ] } ] }

/delete/accepted

AWS IoT publica un mensaje sobre este tema cuando se elimina la sombra de un dispositivo:

ShadowTopicPrefix/delete/accepted

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/delete/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete/accepted" ] } ] }

/delete/rejected

AWS IoT publica un documento de respuesta a errores sobre este tema cuando no puede eliminar la sombra del dispositivo:

ShadowTopicPrefix/delete/rejected

El cuerpo del mensaje contiene un Documento de respuesta de error.

Ejemplo de política de

A continuación, mostramos un ejemplo de la política requerida:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/delete/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete/rejected" ] } ] }