AWS IoT Servicio 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.

AWS IoT Servicio Device Shadow

El servicio AWS IoT Device Shadow añade sombras a los objetos de las AWS IoT cosas. Las sombras pueden hacer que el estado de un dispositivo esté disponible para las aplicaciones y otros servicios, independientemente de que el dispositivo esté conectado AWS IoT o no. AWS IoT los objetos de las cosas pueden tener varias sombras con nombre para que su solución de IoT tenga más opciones para conectar sus dispositivos a otras aplicaciones y servicios.

AWS IoT los objetos tipo cosa no tienen sombras hasta que se crean de forma explícita. Las sombras se pueden crear, actualizar y eliminar mediante la AWS IoT consola. Los dispositivos, otros clientes web y los servicios pueden crear, actualizar y eliminar sombras mediante MQTT, y los temas reservados de MQTT, HTTP, con la API de REST de sombra de dispositivo, y AWS CLI para AWS IoT. Como las sombras se almacenan AWS en la nube, pueden recopilar y generar informes sobre el estado del dispositivo desde aplicaciones y otros servicios en la nube, independientemente de que el dispositivo esté conectado o no.

Uso de sombras

Las sombras proporcionan un almacén de datos de confianza para dispositivos, aplicaciones y otros servicios en la nube para compartir datos. Permiten que dispositivos, aplicaciones y otros servicios en la nube se conecten y desconecten sin perder el estado de un dispositivo.

Mientras los dispositivos, las aplicaciones y otros servicios en la nube estén conectados AWS IoT, estos pueden acceder al estado actual de un dispositivo y controlarlo a través de sus sombras. Por ejemplo, una aplicación puede solicitar un cambio en el estado de un dispositivo actualizando una sombra. AWS IoT publica un mensaje que indica el cambio en el dispositivo. El dispositivo recibe este mensaje, actualiza su estado para que coincida y publica un mensaje con su estado actualizado. El servicio Device Shadow refleja este estado actualizado en la sombra correspondiente. La aplicación puede suscribirse a la actualización de la sombra o puede consultar la sombra para conocer su estado actual.

Cuando un dispositivo se desconecta, la aplicación puede seguir comunicándose con el dispositivo AWS IoT y con las sombras de éste. Cuando el dispositivo se vuelve a conectar, recibe el estado actual de sus sombras para que pueda actualizar su estado para que coincida con el de sus sombras y, a continuación, publicar un mensaje con su estado actualizado. Del mismo modo, cuando una aplicación se desconecta y el estado del dispositivo cambia mientras está fuera de línea, el dispositivo mantiene la sombra actualizada para que la aplicación pueda consultar las sombras para conocer su estado actual cuando se vuelva a conectar.

Si sus dispositivos están desconectados con frecuencia y quiere configurarlos para que reciban mensajes delta después de que se vuelvan a conectar, puede usar la característica de sesión persistente. Para obtener más información sobre el periodo de caducidad de la sesión persistente, consulte el Persistent session expiry period.

Elegir utilizar sombras con nombre o sin nombre

El servicio sombra de dispositivo admite sombras con nombre y sin nombre (o clásicas). Un objeto puede tener varias sombras con nombre, pero no más de una sombra sin nombre. El objeto también puede tener una sombra reservada con nombre, que funciona de forma similar a una sombra con nombre, con la diferencia de que no se puede actualizar el nombre. Para obtener más información, consulte Sombra con nombre reservado.

Un objeto puede tener sombras con nombre y sin nombre al mismo tiempo; sin embargo, la API utilizada para acceder a cada una es ligeramente diferente, por lo que podría ser más eficiente decidir qué tipo de sombra funcionaría mejor para su solución y usar solo dicho tipo. Para obtener más información acerca de la API para acceder a las sombras, consulte Temas de sombra.

Mediante las sombras con nombre, puede crear distintas vistas del estado de un objeto. Por ejemplo, podría dividir un objeto con muchas propiedades en sombras con grupos lógicos de propiedades, cada una identificada por su nombre de sombra. También puede limitar el acceso a las propiedades agrupándolas en distintas sombras y utilizando políticas para controlar el acceso. Para obtener más información sobre las políticas que se pueden usar con las sombras de dispositivo, consulte Acciones, recursos y claves de condición para AWS IoT y las políticas de AWS IoT Core.

Las sombras clásicas sin nombre son más sencillas, pero algo más limitadas que las sombras con nombre. Cada AWS IoT objeto puede tener solo una sombra sin nombre. Si espera que la solución de IoT tenga una necesidad limitada de datos de sombra, puede que así sea como desee comenzar a usar sombras. Sin embargo, si cree que es posible que desee agregar sombras adicionales en el futuro, plantéese la posibilidad de utilizar sombras con nombre desde el principio.

La indexación de flota admite de forma distinta las sombras sin nombre y con nombre. Para obtener más información, consulte Manage fleet indexing.

Acceso a sombras

Cada sombra tiene un tema MQTT reservado y una URL HTTP que admite las acciones get, update y delete en la sombra.

Las sombras utilizan documentos de sombra JSON para almacenar y recuperar datos. Un documento de sombra contiene una propiedad de estado que describe estos aspectos del estado del dispositivo:

  • desired

    Las aplicaciones especifican los estados deseados de las propiedades del dispositivo actualizando el objeto desired.

  • reported

    Los dispositivos notifican su estado actual en el objeto reported.

  • delta

    AWS IoT informa de las diferencias entre el estado deseado y el registrado en el delta objeto.

Los datos almacenados en una sombra están determinados por la propiedad de estado del cuerpo del mensaje de la acción de actualización. Las acciones de actualización posteriores pueden modificar los valores de un objeto de datos existente y también agregar y eliminar claves y otros elementos del objeto de estado de la sombra. Para obtener más información sobre cómo acceder a las sombras, consulte Uso de sombras en dispositivos y Uso de sombras en aplicaciones y servicios.

importante

El permiso para realizar solicitudes de actualización debe limitarse a aplicaciones y dispositivos de confianza. Esto evita que la propiedad de estado de la sombra se cambie de forma inesperada; de lo contrario, los dispositivos y aplicaciones que usan la sombra deben diseñarse para esperar que cambien las claves de la propiedad de estado.

Uso de sombras en dispositivos, aplicaciones y otros servicios en la nube

El uso de sombras en dispositivos, aplicaciones y otros servicios en la nube requiere coherencia y coordinación entre todos ellos. El servicio AWS IoT Device Shadow almacena el estado de sombra, envía mensajes cuando el estado de sombra cambia y responde a los mensajes que cambian de estado. Los dispositivos, las aplicaciones y otros servicios en la nube de la solución IoT deben administrar su estado y mantenerlo coherente con el estado de la sombra del dispositivo.

Los datos de estado de sombra son dinámicos y los pueden modificar los dispositivos, las aplicaciones y otros servicios en la nube con permiso para acceder a la sombra. Por esta razón, es importante considerar cómo interactuarán con la sombra cada dispositivo, aplicación y otro servicio en la nube. Por ejemplo:

  • Los dispositivos deben escribir solo en la propiedad reported del estado de la sombra al comunicar datos de estado a la sombra.

  • Las aplicaciones y otros servicios en la nube deben escribir solo en la propiedad desired al comunicar solicitudes de cambio de estado al dispositivo a través de la sombra.

importante

Los datos contenidos en un objeto de datos de sombra son independientes de los de otras sombras y otras propiedades de objetos, como los atributos de un objeto y el contenido de los mensajes MQTT que el dispositivo de un objeto podría publicar. Sin embargo, un dispositivo puede notificar los mismos datos en diferentes temas y sombras de MQTT si es necesario.

Un dispositivo que admita varias sombras debe mantener la coherencia de los datos que notifica en las distintas sombras.

Orden de los mensajes

No se garantiza que los mensajes del AWS IoT servicio lleguen al dispositivo en un orden específico. La siguiente situación muestra lo que sucede en este caso.

Documento de estado inicial:

{ "state": { "reported": { "color": "blue" } }, "version": 9, "timestamp": 123456776 }

Actualización 1:

{ "state": { "desired": { "color": "RED" } }, "version": 10, "timestamp": 123456777 }

Actualización 2:

{ "state": { "desired": { "color": "GREEN" } }, "version": 11, "timestamp": 123456778 }

Documento de estado final:

{ "state": { "reported": { "color": "GREEN" } }, "version": 12, "timestamp": 123456779 }

Se obtienen dos mensajes delta:

{ "state": { "color": "RED" }, "version": 11, "timestamp": 123456778 }
{ "state": { "color": "GREEN" }, "version": 12, "timestamp": 123456779 }

El dispositivo puede recibir estos mensajes de forma desordenada. Dado que el estado de estos mensajes es acumulable, un dispositivo puede descartar con toda seguridad todos los mensajes cuyo número de versión sea anterior a la del mensaje del cual se hace un seguimiento. Si el dispositivo recibe el delta de la versión 12 antes que el de la versión 11, puede descartar sin problemas el mensaje de la versión 11.

Recorte de mensajes de sombra

Para reducir el tamaño de los mensajes de sombra que se envían al dispositivo, defina una regla que seleccione solo los campos que necesita el dispositivo y que después vuelva a publicar el mensaje en un tema MQTT al que el dispositivo esté escuchando.

La regla se especifica en JSON y debe tener el aspecto siguiente:

{ "sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'", "ruleDisabled": false, "actions": [ { "republish": { "topic": "${topic(3)}/delta", "roleArn": "arn:aws:iam:123456789012:role/my-iot-role" } } ] }

La instrucción SELECT determina qué campos del mensaje se volverán a publicar en el tema especificado. Se usa el comodín "+" para seleccionar todos los nombres de sombra. La regla especifica que todos los mensajes coincidentes deben volver a publicarse en el tema especificado. En tal caso, la función "topic()" se utiliza para especificar el tema en el que se vuelve a publicar. topic(3) toma el valor del nombre de objeto del tema original. Para obtener más información sobre la creación de reglas, consulte Reglas para AWS IoT.