

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
<a name="life-cycle-events"></a>

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.  
`thingName` solo se incluirá si el cliente se conecta mediante la característica [objeto exclusivo](exclusive-thing.md).

**Topics**
+ [Eventos de conexión/desconexión](#connect-disconnect)
+ [Evento de error de intento de conexión](#connect-authfailure-event)
+ [Eventos de suscripción/cancelación de suscripción](#subscribe-unsubscribe-events)

## Eventos de conexión/desconexión
<a name="connect-disconnect"></a>

**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 eventos de cosas Connect/Disconnect . Para obtener más información, consulte [Indexación de flotas](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html).

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.

La siguiente es una lista de los elementos de JSON que se incluyen en los connection/disconnection mensajes publicados en el `$aws/events/presence/connected/{{clientId}}` tema.

**clientId**  
El ID del cliente que se conecta o se desconecta.  
Los clientes IDs que contienen \# o \+ no reciben eventos del ciclo de vida.

**thingName**  
El nombre del objeto de IoT. `thingName` solo se incluirá si el cliente se conecta mediante la característica [objeto exclusivo](exclusive-thing.md).

**clientInitiatedDisconnect**  
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)](mqtt.md#mqtt-lwt) cuando se produzca la desconexión.      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/life-cycle-events.html)
1Si el dispositivo tiene una conexión activa antes de recibir este error.  
2Para evitar los mensajes de Last Will and Testament (LWT), establezca `preventWillMessage=true` para anular el comportamiento de envío de LWT predeterminado de la API `DeleteConnection`.

**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 IPv6 formato IPv4 o. 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.

**timestamp**  
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.  
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 del tiempo configurado time-to-live (TTL) para la sesión persistente.

Un mensaje de conexión tiene la siguiente estructura.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002230757,
    "eventType": "connected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "ipAddress": "192.0.2.0",
    "versionNumber": 0
}
```

Un mensaje de desconexión tiene la siguiente estructura.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002340451,
    "eventType": "disconnected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "clientInitiatedDisconnect": true,
    "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
    "versionNumber": 0
}
```

### Gestión de desconexiones del cliente
<a name="reconnect"></a>

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)](mqtt.md). 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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). 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.

## Evento de error de intento de conexión
<a name="connect-authfailure-event"></a>

AWS IoT publica un mensaje sobre el siguiente tema de MQTT cuando un cliente no está autorizado a conectarse o cuando se ha configurado un testamento y testamento y el cliente no está autorizado a publicar en ese tema de último testamento.

```
$aws/events/presence/connect_failed/{{clientId}}
```

A continuación, se muestra una lista de elementos JSON que se incluyen en los mensajes de autorización de conexión publicados en el tema de `$aws/events/presence/connect_failed/{{clientId}}`.

**clientId**  
El ID de cliente que intentó conectarse y que no pudo hacerlo.  
Los clientes IDs que contienen \# o \+ no reciben eventos del ciclo de vida.

**thingName**  
El nombre del objeto de IoT. `thingName` solo se incluirá si el cliente se conecta mediante la característica [objeto exclusivo](exclusive-thing.md).

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

**eventType**  
El tipo de evento. El valor válido es `connect_failed`.

**connectFailureReason**  
El motivo por el que se produce un error en la conexión. El valor válido es `AUTHORIZATION_FAILED`.

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

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

Un mensaje de error de conexión tiene la siguiente estructura.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "connect_failed",
    "connectFailureReason": "AUTHORIZATION_FAILED",
    "principalIdentifier": "12345678901234567890123456789012",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "ipAddress" : "192.0.2.0"
}
```

## Eventos de suscripción/cancelación de suscripción
<a name="subscribe-unsubscribe-events"></a>

AWS IoT publica un mensaje sobre 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",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "subscribed" | "unsubscribed",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "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.  
Los clientes IDs que contienen \# o \+ no reciben eventos del ciclo de vida.

thingName  
El nombre del objeto de IoT. `thingName` solo se incluirá si el cliente se conecta mediante la característica [objeto exclusivo](exclusive-thing.md).

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.

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