Eventos del ciclo de vida - 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.

Eventos del ciclo de vida

AWS IoT puede publicar eventos del ciclo de vida sobre los temas de MQTT. Estos eventos están disponibles de forma predeterminada y no se pueden desactivar.

nota

Es posible que los mensajes de ciclo de vida se envíen de forma desordenada. Puede que reciba mensajes duplicados.

Eventos de conexión/desconexión

nota

Con la indexación de flotas de AWS IoT Device Management, puede buscar cosas, ejecutar consultas agregadas y crear grupos dinámicos basados en los eventos de conexión o desconexión de cosas. Para obtener más información, consulte Indexación de flotas.

AWS IoT publica un mensaje sobre los siguientes temas de MQTT cuando un cliente se conecta o se desconecta:

  • $aws/events/presence/connected/clientId: un cliente se ha conectado al agente de mensajes.

  • $aws/events/presence/disconnected/clientId: un cliente se ha desconectado del agente de mensajes.

A continuación, se muestra una lista de elementos JSON que se encuentran en los mensajes de conexión/desconexión publicados en el tema $aws/events/presence/connected/clientId.

clientId

El ID del cliente que se conecta o se desconecta.

nota

Los ID de cliente que contienen los símbolos # o + no recibirán eventos del ciclo de vida.

cliente InitiatedDisconnect

True si el cliente inició la desconexión. De lo contrario, devuelve false. Sólo se encuentra en mensajes de desconexión.

disconnectReason

La razón por la que el cliente se está desconectando. Sólo se encuentra en mensajes de desconexión. La siguiente tabla contiene valores válidos e indica si el agente de mensajes enviará mensajes Last Will and Testament (LWT) cuando se produzca la desconexión.

Motivo de desconexión Descripción El agente de mensajes enviará los mensajes LWT
AUTH_ERROR El cliente no pudo autenticarse o la autorización devolvió un error. Sí. Si el dispositivo tiene una conexión activa antes de recibir este error.
CLIENT_INITIATED_DISCONNECT El cliente indica que se desconectará. El cliente puede hacerlo enviando un paquete de DISCONNECT control MQTT o un paquete Close frame si el cliente utiliza una WebSocket conexión. No.
CLIENT_ERROR El cliente hizo algo mal que provocó su desconexión. Por ejemplo, un cliente se desconectará por enviar más de un paquete CONNECT de MQTT en la misma conexión o si el cliente intenta publicar con una carga útil que supera el límite de carga útil. Sí.
CONNECTION_LOST La conexión cliente-servidor está cortada. Esto puede ocurrir durante un período de alta latencia de red o cuando se pierde la conexión a Internet. Sí.
DUPLICATE_CLIENTID El cliente está utilizando un ID de cliente que ya está en uso. En este caso, el cliente que ya está conectado se desconectará con esta razón de desconexión. Sí.
FORBIDDEN_ACCESS No se permite la conexión del cliente. Por ejemplo, un cliente con una dirección IP denegada no podrá conectarse. Sí. Si el dispositivo tiene una conexión activa antes de recibir este error.
MQTT_KEEP_ALIVE_TIMEOUT Si no hay comunicación cliente-servidor para 1,5 veces el tiempo de mantenimiento del cliente, el cliente se desconecta. Sí.
SERVER_ERROR Desconectado debido a problemas inesperados del servidor. Sí.
SERVER_INITIATED_DISCONNECT El servidor desconecta de forma intencionada un cliente por razones operativas. Sí.
THROTTLED El cliente se desconecta por exceder una limitación controlada. Sí.
WEBSOCKET_TTL_EXPIRATION El cliente está desconectado porque a WebSocket lleva más tiempo conectado que su time-to-live valor. Sí.
CUSTOMAUTH_TTL_EXPIRATION El cliente está desconectado porque lleva más tiempo conectado que el time-to-live valor de su autorizador personalizado. Sí.
eventType

El tipo de evento. Los valores válidos son connected o disconnected.

ipAddress

La dirección IP del cliente que se conecta. Puede estar en formato IPv4 o IPv6. Sólo se encuentra en los mensajes de conexión.

principalIdentifier

Las credenciales que se utilizan para la autenticación. En el caso de los certificados de autenticación mutua de TLS, se trata del ID de certificado. En cuanto a las demás conexiones, se trata de las credenciales de IAM.

sessionIdentifier

Un identificador único a nivel mundial AWS IoT que existe durante toda la sesión.

Marca de tiempo

Una aproximación de cuándo se produjo el evento.

versionNumber

El número de versión del evento del ciclo de vida. Se trata de un valor entero largo que aumenta de forma monótona para cada conexión de un ID de cliente. El número de versión puede utilizarlo un suscriptor para deducir el orden de los eventos del ciclo de vida.

nota

Los mensajes de conexión y desconexión de una conexión de cliente tienen el mismo número de versión.

El número de versión podría saltarse algunos valores y no se garantiza que se vaya a incrementar de forma coherente en 1 para cada evento.

Si un cliente no se conecta durante aproximadamente una hora, el número de versión se restablece a 0. En el caso de las sesiones persistentes, el número de versión se restablece a 0 después de que un cliente haya estado desconectado durante más tiempo que el tiempo configurado time-to-live (TTL) para la sesión persistente.

Un mensaje de conexión tiene la siguiente estructura.

{ "clientId": "186b5", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }

Un mensaje de desconexión tiene la siguiente estructura.

{ "clientId": "186b5", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }

Gestión de desconexiones del cliente

La práctica recomendada consiste siempre en tener implementado un estado de espera para los eventos del ciclo de vida, incluidos los mensajes Last Will and Testament (LWT). Cuando se recibe un mensaje de desconexión, el código debe esperar un periodo de tiempo y verificar que un dispositivo sigue sin conexión antes de tomar cualquier medida. Una forma de hacerlo consiste en utilizar colas con retraso de SQS. Cuando un cliente recibe un evento de ciclo de vida o un mensaje LWT, se puede poner en cola un mensaje (por ejemplo, durante 5 segundos). Cuando dicho mensaje está disponible y se procesa (por parte de Lambda u otro servicio), primero se puede comprobar si el dispositivo sigue sin conexión antes de tomar otras medidas.

Eventos de suscripción/cancelación de suscripción

AWS IoT publica un mensaje en el siguiente tema de MQTT cuando un cliente se suscribe o cancela la suscripción a un tema de MQTT:

$aws/events/subscriptions/subscribed/clientId

o

$aws/events/subscriptions/unsubscribed/clientId

Donde clientId es el ID de cliente MQTT que se conecta con el agente de mensajes de AWS IoT .

El mensaje publicado en este tema tiene la estructura siguiente:

{ "clientId": "186b5", "timestamp": 1460065214626, "eventType": "subscribed" | "unsubscribed", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "000000000000/ABCDEFGHIJKLMNOPQRSTU:some-user/ABCDEFGHIJKLMNOPQRSTU:some-user", "topics" : ["foo/bar","device/data","dog/cat"] }

A continuación, se ofrece una lista de elementos JSON que se encuentran en los mensajes suscritos y no suscritos publicados en los temas $aws/events/subscriptions/subscribed/clientId y $aws/events/subscriptions/unsubscribed/clientId.

clientId

El ID del cliente que se suscribe o cancela su suscripción.

nota

Los ID de cliente que contienen los símbolos # o + no recibirán eventos del ciclo de vida.

eventType

El tipo de evento. Los valores válidos son subscribed o unsubscribed.

principalIdentifier

Las credenciales que se utilizan para la autenticación. En el caso de los certificados de autenticación mutua de TLS, se trata del ID de certificado. En cuanto a las demás conexiones, se trata de las credenciales de IAM.

sessionIdentifier

Un identificador único a nivel mundial AWS IoT que existe durante toda la sesión.

Marca de tiempo

Una aproximación de cuándo se produjo el evento.

temas

Una matriz de los temas MQTT a los que se ha suscrito el cliente.

nota

Es posible que los mensajes de ciclo de vida se envíen de forma desordenada. Puede que reciba mensajes duplicados.