Eventi del ciclo di vita - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Eventi del ciclo di vita

AWS IoT può pubblicare eventi del ciclo di vita sugli argomenti MQTT. Questi eventi sono disponibili per impostazione predefinita e non possono essere disabilitati.

Nota

È possibile che i messaggi del ciclo di vita non vengano inviati in ordine. Potresti anche ricevere messaggi duplicati.

Eventi di connessione/disconnessione

Nota

Con l'indicizzazione del parco veicoli di AWS IoT Device Management, puoi cercare elementi, eseguire query aggregate e creare gruppi dinamici basati su eventi Thing Connect/Disconnect. Per ulteriori informazioni, consulta Indicizzazione del parco istanze.

AWS IoT pubblica un messaggio sui seguenti argomenti MQTT quando un client si connette o si disconnette:

  • $aws/events/presence/connected/clientId - Client connesso al broker di messaggi.

  • $aws/events/presence/disconnected/clientId - Client disconnesso dal broker di messaggi.

Di seguito è riportato un elenco di elementi JSON contenuti nei messaggi di connessione/disconnessione pubblicati nell'argomento $aws/events/presence/connected/clientId.

clientId

ID del client che si connette o si disconnette.

Nota

Gli ID client che contengono # o + non ricevono eventi del ciclo di vita.

cliente InitiatedDisconnect

True se il client ha avviato la disconnessione. In caso contrario, false. Presente solo nei messaggi di disconnessione.

disconnectReason

Il motivo per cui il client viene disconnesso. Presente solo nei messaggi di disconnessione. La tabella seguente contiene valori validi e indica se il broker invierà Messaggi Last Will and Testament (LWT) quando si verifica la disconnessione.

Motivo di disconnessione Descrizione Il broker invierà i messaggi LWT
AUTH_ERROR Il client non è riuscito a eseguire l'autenticazione oppure l'autorizzazione non è riuscita. Sì. Se il dispositivo ha una connessione attiva prima di ricevere questo errore.
CLIENT_INITIATED_DISCONNECT Il client indica che si disconnette. Il client può farlo inviando un pacchetto di DISCONNECT controllo MQTT o un Close frame se il client utilizza una WebSocket connessione. No.
CLIENT_ERROR Il client ha rilevato un errore che causa la disconnessione. Ad esempio, il client viene disconnesso per l'invio di più di 1 pacchetto CONNECT MQTT sulla stessa connessione o se tenta di pubblicare con un payload che supera il limite del payload. Sì.
CONNECTION_LOST La connessione client-server viene interrotta. Ciò può verificarsi durante un periodo di alta latenza di rete o quando la connessione Internet viene persa. Sì.
DUPLICATE_CLIENTID Il client utilizza un ID client già in uso. In questo caso, il client già connesso verrà disconnesso con questo motivo di disconnessione. Sì.
FORBIDDEN_ACCESS Il client non è autorizzato alla connessione. Ad esempio, un client con un indirizzo IP negato non riesce a connettersi. Sì. Se il dispositivo ha una connessione attiva prima di ricevere questo errore.
MQTT_KEEP_ALIVE_TIMEOUT Se non viene rilevata alcuna comunicazione client-server per 1,5x del tempo keep-alive del client, il client viene disconnesso. Sì.
SERVER_ERROR Disconnesso a causa di problemi imprevisti del server. Sì.
SERVER_INITIATED_DISCONNECT Il server disconnette intenzionalmente un client per motivi operativi. Sì.
THROTTLED Il client viene disconnesso per il superamento di un limite di throttling. Sì.
WEBSOCKET_TTL_EXPIRATION Il client è disconnesso perché a è WebSocket stato connesso più a lungo del suo valore. time-to-live Sì.
CUSTOMAUTH_TTL_EXPIRATION Il client è disconnesso perché è stato connesso più a lungo del time-to-live valore del relativo autorizzatore personalizzato. Sì.
eventType

Tipo di evento. I valori validi sono connected e disconnected.

ipAddress

L'indirizzo IP del client di connessione. Questo può essere in formato IPv4 o IPv6. Presente solo nei messaggi di connessione.

principalIdentifier

Credenziale usata per l'autenticazione. Per i certificati di autenticazione reciproca TLS, si tratta dell'ID certificato. Per altre connessioni, si tratta delle credenziali IAM.

sessionIdentifier

Un identificatore univoco globale AWS IoT che esiste per tutta la durata della sessione.

timestamp

Un'approssimazione del momento in cui si è verificato l'evento.

versionNumber

Numero di versione per l'evento del ciclo di vita. Consiste nell'aumentare in maniera monotona un valore intero lungo per ogni connessione dell'ID client. Il numero di versione può essere utilizzato da un sottoscrittore per dedurre l'ordine degli eventi del ciclo di vita.

Nota

I messaggi di connessione e disconnessione per una connessione client hanno lo stesso numero di versione.

Il numero di versione potrebbe ignorare valori e non è garantito che aumenti di 1 in modo costante per ogni evento.

Se un client non è connesso per circa un'ora, il numero di versione viene reimpostato su 0. Per le sessioni persistenti, il numero di versione viene reimpostato su 0 dopo che un client è stato disconnesso più a lungo del periodo configurato time-to-live (TTL) per la sessione persistente.

Un messaggio di connessione ha la seguente struttura.

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

Un messaggio di disconnessione ha la seguente struttura.

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

Gestione delle disconnessioni client

Secondo le best practice, occorre sempre avere uno stato di attesa implementato per gli eventi del ciclo di vita, inclusi i messaggi Last Will and Testament (LWT). Quando si riceve un messaggio di disconnessione, il codice deve attendere un periodo di tempo e verificare che un dispositivo è ancora offline prima di effettuare operazioni. A questo scopo, è possibile utilizzare Code di ritardo Amazon SQS. Quando un client riceve un LWT o un evento del ciclo di vita, è possibile accodare un messaggio, ad esempio per 5 secondi. Quando il messaggio diventa disponibile e viene elaborato (da Lambda o da un altro servizio), è possibile controllare innanzitutto se il dispositivo è ancora realmente offline prima di effettuare ulteriori operazioni.

Eventi di sottoscrizione/annullamento della sottoscrizione

AWS IoT pubblica un messaggio sul seguente argomento MQTT quando un client sottoscrive o annulla l'iscrizione a un argomento MQTT:

$aws/events/subscriptions/subscribed/clientId

oppure

$aws/events/subscriptions/unsubscribed/clientId

Dove clientId è l'ID client MQTT che si connette al broker di messaggi AWS IoT .

Il messaggio pubblicato in questo argomento ha la struttura seguente:

{ "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"] }

Di seguito è riportato un elenco di elementi JSON contenuti nei messaggi di cui è stata eseguita o annullata la sottoscrizione pubblicati negli argomenti $aws/events/subscriptions/subscribed/clientId e $aws/events/subscriptions/unsubscribed/clientId.

clientId

ID del client che esegue la sottoscrizione o l'annullamento della sottoscrizione.

Nota

Gli ID client che contengono # o + non ricevono eventi del ciclo di vita.

eventType

Tipo di evento. I valori validi sono subscribed e unsubscribed.

principalIdentifier

Credenziale usata per l'autenticazione. Per i certificati di autenticazione reciproca TLS, si tratta dell'ID certificato. Per altre connessioni, si tratta delle credenziali IAM.

sessionIdentifier

Un identificatore univoco globale AWS IoT che esiste per tutta la durata della sessione.

timestamp

Un'approssimazione del momento in cui si è verificato l'evento.

topics

Matrice degli argomenti MQTT sottoscritti dal client.

Nota

È possibile che i messaggi del ciclo di vita non vengano inviati in ordine. Potresti anche ricevere messaggi duplicati.