Temas MQTT de sombra de dispositivo - 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.

Temas MQTT de sombra de dispositivo

El servicio Device Shadow utiliza temas MQTT reservados para permitir a los dispositivos y las aplicaciones obtener, actualizar o eliminar 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, evite suscribirse 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.

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

A continuación se muestran los temas MQTT utilizados 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 /get/accepted u otra/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ía un documento de estado de solicitud JSON con la propiedad desired como esta:

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

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

{ "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" ] } ] }