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 como $aws/things/thingName/shadow/#
, ya que el número de temas que coinciden con este filtro de temas puede aumentar a medida que AWS IoT incorpora nuevos temas de sombra. 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 ShadowTopicPrefix |
Tipo de sombra |
---|---|
$aws/things/ |
Sombra sin nombre (clásica) |
$aws/things/ |
Sombra con nombre |
Para crear un tema completo, seleccione el
para el tipo de sombra al que desea hacer referencia, reemplace ShadowTopicPrefix
y thingName
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.shadowName
A continuación se muestran los temas MQTT utilizados para interactuar con las sombras.
Temas
/get
Publique un mensaje vacío en este tema para obtener la sombra de objeto:
ShadowTopicPrefix
/get
AWS IoT responde publicando en /get/accepted o en /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 de sombra de respuesta en este tema cuando devuelve 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 de error en este tema cuando no puede devolver 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 /update/accepted o en /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 en este tema cuando acepta un cambio de la sombra del dispositivo y el documento de estado de solicitud contiene valores distintos para los estados desired
y reported
:
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 seccionesdesired
yreported
. 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 seccionesdesired
yreported
. -
Si un atributo se encuentra en la sección
reported
, pero no tiene equivalente en la seccióndesired
, no se incluye. -
Si un atributo se encuentra en la sección
desired
, pero no tiene equivalente en la secciónreported
, se incluye. -
Si se elimina un atributo de la sección
reported
, pero sigue existiendo en la seccióndesired
, 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 en este tema cuando acepta un cambio de 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 en este tema siempre que se realiza una actualización correcta 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 de error en este tema cuando rechaza un cambio de 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 /delete/accepted o en /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 en 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 de error en 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" ] } ] }