Uso de sombras en aplicaciones y servicios - 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.

Uso de sombras en aplicaciones y servicios

En esta sección se describe cómo interactúa una aplicación o un servicio con el servicio AWS IoT Device Shadow. En este ejemplo se supone que la aplicación o el servicio solo interactúan con la sombra y, a través de la sombra, con el dispositivo. Este ejemplo no incluye ninguna acción de administración, como la creación o eliminación de sombras.

En este ejemplo, se utiliza la API REST del servicio AWS IoT Device Shadow para interactuar con las sombras. A diferencia del ejemplo utilizado en Uso de sombras en dispositivos, que utiliza un modelo de comunicaciones de publicación/suscripción, este ejemplo utiliza el modelo de comunicaciones de solicitud/respuesta de la API REST. Esto significa que la aplicación o el servicio deben realizar una solicitud antes de recibir una respuesta AWS IoT. Una desventaja de este modelo, sin embargo, es que no admite notificaciones. Si su aplicación o servicio requiere notificaciones oportunas de cambios en el estado del dispositivo, tenga en cuenta los protocolos MQTT o MQTT sobre WSS, que admiten el modelo de comunicación de publicación/suscripción, tal como se describe en Uso de sombras en dispositivos.

importante

Asegúrese de que el uso de las sombras por parte de la aplicación o servicio sea coherente y compatible con las implementaciones correspondientes en los dispositivos. Tenga en cuenta, por ejemplo, cómo se crean, actualizan y eliminan las sombras, y cómo se tratan las actualizaciones en el dispositivo y en las aplicaciones o servicios que acceden a la sombra. El diseño debe especificar claramente cómo se actualiza y notifica el estado del dispositivo, y cómo interactúan las aplicaciones y los servicios con el dispositivo y sus sombras.

La URL de la API REST para sombras con nombre es:

https://endpoint/things/thingName/shadow?name=shadowName

y para una sombra sin nombre:

https://endpoint/things/thingName/shadow

donde:

punto de conexión

El punto de enlace que devuelve el comando de la CLI:

aws iot describe-endpoint --endpoint-type IOT:Data-ATS
thingName

El nombre del objeto al que pertenece la sombra

shadowName

El nombre de la sombra con nombre. Este parámetro no se utiliza con sombras sin nombre.

Inicializar la aplicación o el servicio al conectarse a AWS IoT

Cuando la aplicación se conecte por primera vez AWS IoT, debería enviar una solicitud HTTP GET a las URL de las sombras que utiliza para obtener el estado actual de las sombras que utiliza. Esto le permite sincronizar la aplicación o el servicio con la sombra.

El estado del procesamiento cambia mientras la aplicación o el servicio están conectados a AWS IoT

Mientras la aplicación o el servicio están conectados AWS IoT, pueden consultar el estado actual de forma periódica enviando una solicitud HTTP GET a las direcciones URL de las sombras que utiliza.

Cuando un usuario final interactúa con la aplicación o el servicio para cambiar el estado del dispositivo, la aplicación o el servicio pueden enviar una solicitud HTTP POST a las URL de las sombras que utiliza para actualizar el estado desired de la sombra. Esta solicitud devuelve el cambio que se aceptó, pero es posible que tenga que sondear la sombra realizando solicitudes HTTP GET hasta que el dispositivo haya actualizado la sombra con su nuevo estado.

Detección de un dispositivo conectado

Para determinar si un dispositivo está conectado actualmente, incluya una propiedad connected en el documento de sombra y use un mensaje MQTT Last Will and Testament (LWT) para establecer la propiedad connected en false si un dispositivo está desconectado debido a un error.

nota

El servicio AWS IoT Device Shadow ignora los mensajes LWT de MQTT enviados a temas AWS IoT reservados (temas que comienzan por $). Sin embargo, los procesan los clientes suscritos y el motor de AWS IoT reglas, por lo que tendrá que crear un mensaje LWT que se envíe a un tema no reservado y una regla que vuelva a publicar el mensaje LWT de MQTT como un mensaje de actualización paralelo para el tema de actualización reservado de la sombra. ShadowTopicPrefix/update

Para enviar al servicio Device Shadow un mensaje LWT
  1. Cree una regla que vuelva a publicar el mensaje MQTT LWT en el tema reservado. El siguiente ejemplo es una regla que escucha mensajes sobre el tema my/things/myLightBulb/update y lo vuelve a publicar en $aws/things/myLightBulb/shadow/update.

    { "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [ { "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish" } } ] } }
  2. Cuando el dispositivo se conecta a AWS IoT, registra un mensaje de LWT en un tema no reservado para que lo reconozca la regla de republicación. En este ejemplo, ese tema es my/things/myLightBulb/update y establece la propiedad conectada en false.

    { "state": { "reported": { "connected":"false" } } }
  3. Después de conectarse, el dispositivo publica un mensaje en su tema de actualización de sombra $aws/things/myLightBulb/shadow/update, para notificar su estado actual, que incluye establecer su propiedad connected en true.

    { "state": { "reported": { "connected":"true" } } }
  4. Antes de que el dispositivo se desconecte correctamente, publica un mensaje en su tema de actualización de sombras $aws/things/myLightBulb/shadow/update, para notificar su estado más reciente, que incluye establecer su propiedad connected en false.

    { "state": { "reported": { "connected":"false" } } }
  5. Si el dispositivo se desconecta debido a un error, el agente de mensajes publica el AWS IoT mensaje LWT del dispositivo en nombre del dispositivo. La regla de republicación detecta este mensaje y publica el mensaje de actualización de sombra para actualizar la propiedad connected de la sombra del dispositivo.