

# Gestione della comunicazione tra i dispositivi LoRaWAN e AWS IoT
<a name="lorawan-device-cloud-communication"></a>

Dopo aver collegato il tuo dispositivo LoRaWAN a AWS IoT Core per LoRaWAN, i dispositivi possono iniziare a inviare messaggi al cloud. Si definiscono messaggi di uplink i messaggi inviati dal dispositivo e ricevuti da AWS IoT Core per LoRaWAN. I dispositivi LoRaWAN possono inviare in qualsiasi momento messaggi di uplink, che vengono successivamente inoltrati ad altri Servizio AWS e applicazioni ospitate nel cloud. I messaggi inviati da AWS IoT Core per LoRaWAN e altri applicazioni e Servizio AWS ai tuoi dispositivi sono chiamati messaggi di downlink.

Di seguito viene illustrato come visualizzare e gestire i messaggi di uplink e downlink inviati tra i dispositivi e il Cloud. Puoi mantenere una coda dei messaggi di downlink e inviare questi messaggi ai dispositivi nell'ordine in cui sono stati aggiunti alla coda.

**Topics**
+ [Visualizza il formato dei messaggi di uplink inviati dai dispositivi LoRaWAN](lorawan-uplink-metadata-format.md)
+ [Accodamento dei messaggi di downlink da inviare ai dispositivi LoRaWAN](lorawan-downlink-queue.md)

# Visualizza il formato dei messaggi di uplink inviati dai dispositivi LoRaWAN
<a name="lorawan-uplink-metadata-format"></a>

Dopo aver collegato il dispositivo LoRaWAN ad AWS IoT Core per LoRaWAN, potrai visualizzare il formato del messaggio di uplink che riceverai dal tuo dispositivo wireless.

## Prima di poter visualizzare i messaggi di uplink
<a name="lorawan-uplink-metadata-prerequisites"></a>

È necessario aver inserito il dispositivo wireless e collegato il dispositivo ad AWS IoT in modo che possa trasmettere e ricevere dati. Per informazioni su come eseguire l'onboarding del dispositivo per AWS IoT Core per LoRaWAN, consulta [Integra i tuoi dispositivi su AWS IoT Core per LoRaWAN](lorawan-onboard-end-devices.md).

## Cosa contengono i messaggi di uplink?
<a name="lorawan-uplink-metadata-contains"></a>

Dispositivi LoRaWAN connessi ad AWS IoT Core per LoRaWAN attraverso i gateway LoRaWAN. Il messaggio di uplink ricevuto dal dispositivo conterrà le seguenti informazioni.
+ Dati di payload corrispondenti al messaggio di payload crittografato inviato dal dispositivo wireless.
+ Metadati wireless che includono:
  + Informazioni sul dispositivo, ad esempio DevEui, la velocità dati e il canale di frequenza in cui il dispositivo è in funzione.
  + Parametri aggiuntivi opzionali e informazioni sul gateway per i gateway connessi al dispositivo. I parametri del gateway includono EUI del gateway, SNR e RSSi.

  Utilizzando i metadati wireless, è possibile ottenere informazioni utili sul dispositivo wireless e sui dati trasmessi tra il dispositivo e AWS IoT. Ad esempio, puoi utilizzare il parametro `AckedMessageId` per verificare se l'ultimo messaggio downlink confermato è stato ricevuto dal dispositivo. Facoltativamente, se si sceglie di includere le informazioni sul gateway, è possibile stabilire se si desidera passare a un canale gateway più potente e più vicino al dispositivo.

## Come visualizzare i messaggi di uplink?
<a name="lorawan-uplink-metadata-observe"></a>

Dopo aver effettuato l'onboarding del dispositivo, è possibile utilizzare il [Client di prova MQTT](https://console.aws.amazon.com/iot/home#/test) sulla pagina **Test** della console AWS IoT per sottoscrivere l'argomento specificato durante la creazione della destinazione. Potrai iniziare a visualizzare messaggi dopo che il dispositivo sarà connesso e avrà iniziato ad inviare i dati di payload.

Questo diagramma individua gli elementi chiave di un sistema LoRaWAN connesso ad AWS IoT Core per LoRaWAN, che mostra il piano dati primario e il modo in cui i dati fluiscono attraverso il sistema.

![\[Immagine che mostra come i dati AWS IoT Core per LoRaWAN vengano passati da un dispositivo wireless ad AWS IoT e altri servizi.\]](http://docs.aws.amazon.com/it_it/iot-wireless/latest/developerguide/images/iot-lorawan-data-flow.png)


Quando il dispositivo wireless inizia a inviare dati di uplink, AWS IoT Core per LoRaWAN avvolge le informazioni dei metadati wireless con il payload, inviandole quindi alle tue applicazioni AWS.

## Esempio di messaggio di uplink
<a name="lorawan-uplink-metadata-example"></a>

Nell'esempio seguente viene illustrato il formato del messaggio di uplink ricevuto dal dispositivo.

```
{
    "WirelessDeviceId": "5b58245e-146c-4c30-9703-0ca942e3ff35", 
    "PayloadData": "Cc48AAAAAAAAAAA=",    
    "WirelessMetadata":
    {
        "LoRaWAN":
        {
            "ADR": false,
            "Bandwidth": 125,
            "ClassB": false,
            "CodeRate": "4/5",
            "DataRate": "0",
            "DevAddr": "00b96cd4",
            "DevEui": "58a0cb000202c99",            
            "FOptLen": 2,
            "FCnt": 1,
            "Fport": 136,   
            "Frequency": "868100000",     
            "Gateways": [
             {
                    "GatewayEui": "80029cfffe5cf1cc",      
                    "Snr": -29,
                    "Rssi": 9.75
             }
             ],  
            "MIC": "7255cb07",  
            "MType": "UnconfirmedDataUp",
            "Major": "LoRaWANR1",
            "Modulation": "LORA", 
            "PolarizationInversion": false,    
            "SpreadingFactor": 12,                         
            "Timestamp": "2021-05-03T03:24:29Z"
            
        }
    }
}
```

### Esclusione dei metadati gateway dai metadati uplink
<a name="lorawan-uplink-metadata-example2"></a>

Se desideri escludere le informazioni relative ai metadati del gateway dai metadati dell'uplink, disabilita il parametro **AddGwMetadata** quando crei il profilo di servizio. Per informazioni sulla disattivazione di questo parametro, consulta [Aggiungi profili di servizio](lorawan-define-profiles.md#lorawan-service-profiles).

In questo caso, non verrà visualizzata la sezione `Gateways` nei metadati uplink, come illustrato nell'esempio seguente.

```
{  
    "WirelessDeviceId": "0d9a439b-e77a-4573-a791-49d5c0f4db95",
    "PayloadData": "AAAAAAAA//8=",
    "WirelessMetadata": {
        "LoRaWAN": {
            "ClassB": false,
            "CodeRate": "4/5",
            "DataRate": "1",
            "DevAddr": "01920f27",
            "DevEui": "ffffff10000163b0",
            "FCnt": 1,
            "FPort": 5,
            "Timestamp": "2021-04-29T05:19:43.646Z"
    }
  }
}
```

# Accodamento dei messaggi di downlink da inviare ai dispositivi LoRaWAN
<a name="lorawan-downlink-queue"></a>

Le applicazioni ospitate su cloud e altri Servizio AWS possono inviare messaggi di downlink ai tuoi dispositivi wireless. Si definiscono messaggi di downlink i messaggi inviati da AWS IoT Core per LoRaWAN sul tuo dispositivo wireless. Puoi pianificare e inviare i messaggi di downlink per ogni dispositivo che hai inserito in AWS IoT Core per LoRaWAN.

Se vuoi inviare un messaggio di downlink a molteplici dispositivi, puoi utilizzare un gruppo multicast. I dispositivi di un gruppo multicast condividono lo stesso indirizzo multicast, che viene quindi distribuito a un intero gruppo di dispositivi destinatari. Per ulteriori informazioni, consultare [Creazione di gruppi multicast per inviare un payload di downlink a più dispositivi](lorawan-multicast-groups.md). 

## Come funziona una coda di messaggi di downlink
<a name="lorawan-how-downlink-works"></a>

La classe del dispositivo LoRaWAN determina il modo in cui i messaggi nella coda vengono inviati al dispositivo. I dispositivi di classe A inviano un messaggio di uplink a AWS IoT Core per LoRaWAN per indicare che il dispositivo è disponibile alla ricezione di messaggi di downlink. I dispositivi di classe B possono ricevere messaggi negli slot di downlink pianificati. I dispositivi di classe C possono ricevere messaggi di downlink in qualsiasi momento. Per ulteriori informazioni sulle classi dei dispositivi, consulta la sezione [Classi di dispositivi](lorawan-manage-end-devices.md#lorawan-device-classes).

Di seguito viene illustrato come i messaggi vengono accodati e inviati ai dispositivi di classe A.

1. AWS IoT Core per LoRaWAN esegue il buffer del messaggio di downlink aggiunto alla coda con la porta frame, i dati di payload e i parametri della modalità di ricevuta specificati utilizzando la console AWS IoT o l'API Wireless AWS IoT.

1. Il dispositivo LoRaWAN invia un messaggio di uplink per indicare che è online e può iniziare a ricevere messaggi di downlink.

1. Se hai aggiunto più di un messaggio di downlink alla coda, AWS IoT Core per LoRaWAN invia il primo messaggio di downlink presente nella coda al dispositivo con il flag di ricevuta (ACK) impostato.

1. Il dispositivo invia un messaggio di uplink a AWS IoT Core per LoRaWAN immediatamente oppure rimane in sospeso fino al successivo messaggio di uplink e include il flag ACK nel messaggio.

1. Quando riceve il messaggio di uplink con il flag ACK, AWS IoT Core per LoRaWAN cancella il messaggio di downlink dalla coda, indicando che il dispositivo ha ricevuto correttamente il messaggio di downlink. Se dopo tre verifiche il flag ACK non è presente nel messaggio di uplink, il messaggio viene eliminato.

## Eseguire operazioni di accodamento dei messaggi di downlink utilizzando la console
<a name="lorawan-downlink-queue-console"></a>

Puoi utilizzare la Console di gestione AWS per accodare i messaggi di downlink e cancellare i singoli messaggi o l'intera coda, secondo necessità. Per i dispositivi di classe A, dopo che il dispositivo invia un messaggio di uplink per indicare che è online, i messaggi in coda vengono inviati al dispositivo. Dopo l'invio, il messaggio viene automaticamente cancellato dalla coda.

**Accodamento dei messaggi di downlink**  
Per creare una coda di messaggi di downlink

1. Accedi all'[hub dei dispositivi della console AWS IoT](https://console.aws.amazon.com/iot/home#/wireless/devices) e scegli il dispositivo per il quale desideri accodare i messaggi di downlink.

1. Nella sezione **Downlink messages** (Messaggi di downlink) della pagina dei dettagli del dispositivo, scegli **Queue downlink messages** (Accoda messaggi di downlink).

1. Per configurare il messaggio di downlink, specifica i seguenti parametri:
   + **FPort**: scegli la porta frame per la comunicazione tra il dispositivo e AWS IoT Core per LoRaWAN.
   + **Payload**: specifica il messaggio di payload che desideri inviare al dispositivo. La dimensione massima del payload è di 242 byte. Se la velocità dati adattiva (ADR) è abilitata, AWS IoT Core per LoRaWAN la utilizza per scegliere la velocità dati ottimale per le dimensioni del payload. Puoi ottimizzare ulteriormente la velocità dati in base alle tue esigenze.
   + **Modalità ricevuta**: conferma se il dispositivo ha ricevuto il messaggio di downlink. Se un messaggio richiede questa modalità, verrà visualizzato un messaggio di uplink con il flag ACK nel flusso dei dati e il messaggio verrà cancellato dalla coda.

1. Per aggiungere il messaggio di downlink alla coda, scegli **Submit** (Invia).

Ora il messaggio di downlink è stato aggiunto alla coda. Se non visualizzi il messaggio o si verifica un errore, puoi risolvere il problema come descritto in [Risoluzione dei problemi relativi alla coda dei messaggi di downlink](#lorawan-downlink-queue-troubleshoot). 

**Nota**  
Dopo che il messaggio di downlink è stato aggiunto alla coda, i parametri **FPort**, **Payload** e **Acknowledge mode** (Modalità ricevuta) non possono più essere modificati. Se vuoi inviare un messaggio di downlink con valori diversi per questi parametri, devi eliminare il messaggio e accodare un nuovo messaggio di downlink con i valori dei parametri aggiornati.

La coda elenca i messaggi di downlink aggiunti. Per visualizzare il payload per i messaggi di uplink e downlink scambiati tra i dispositivi e AWS IoT Core per LoRaWAN, puoi utilizzare l'analizzatore di rete. Per ulteriori informazioni, consultare [Monitoraggio del parco istanze di risorse wireless in tempo reale utilizzando l'analizzatore di rete](network-analyzer-overview.md).

**Elenco dei messaggi di downlink in coda**  
Il messaggio di downlink che hai creato viene aggiunto alla coda. Ogni successivo messaggio di downlink viene aggiunto alla coda dopo questo messaggio. Puoi visualizzare un elenco dei messaggi di downlink nella sezione **Downlink messages** (Messaggi di downlink) della pagina dei dettagli del dispositivo. Dopo avere ricevuto un messaggio di uplink, i messaggi vengono inviati al dispositivo. Dopo che un messaggio di downlink è stato ricevuto dal dispositivo, verrà rimosso dalla coda. Il messaggio successivo si sposta quindi verso l'alto nella coda dei messaggi da inviare al dispositivo.

**Eliminazione di singoli messaggi di downlink o cancellazione dell'intera coda**  
Ogni messaggio di downlink viene cancellato automaticamente dalla coda dopo che è stato inviato al dispositivo. Puoi anche eliminare singoli messaggi o cancellare l'intera coda dei messaggi di downlink. Queste operazioni non possono essere annullate.
+ Se nella coda trovi messaggi che non vuoi inviare, selezionali e scegli **Delete** (Elimina).
+ Se non vuoi inviare alcuno dei messaggi in coda al tuo dispositivo, puoi cancellare l'intera coda scegliendo **Clear downlink queue** (Cancella coda di downlink).

## Eseguire operazioni di accodamento dei messaggi di downlink utilizzando l'API
<a name="lorawan-downlink-queue-api"></a>

Puoi utilizzare l'API Wireless AWS IoT per accodare i messaggi di downlink e cancellare i singoli messaggi o l'intera coda, secondo necessità.

**Accodamento dei messaggi di downlink**  
Per creare una coda di messaggi di downlink tramite l'API, utilizza l'operazione API [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_SendDataToWirelessDevice.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_SendDataToWirelessDevice.html) o il comando della CLI [cli/latest/reference/iotwireless/send-data-to-wireless-device.html](cli/latest/reference/iotwireless/send-data-to-wireless-device.html).

```
aws iotwireless send-data-to-wireless-device \
    --id "11aa5eae-2f56-4b8e-a023-b28d98494e49" \
    --transmit-mode "1" \
    --payload-data "SGVsbG8gVG8gRGV2c2lt" \
    --wireless-metadata LoRaWAN={FPort=1}
```

L'output dell'esecuzione di questo comando genera un `MessageId` per il messaggio di downlink. In alcuni casi, anche se ricevi il `MessageId`, i pacchetti possono essere eliminati. Per ulteriori informazioni su come risolvere l'errore, consulta la sezione [Risoluzione dei problemi relativi alla coda dei messaggi di downlink](#lorawan-downlink-queue-troubleshoot).

```
{
    MessageId: "6011dd36-0043d6eb-0072-0008"
}
```

**Elenco dei messaggi di downlink in coda**  
Per elencare tutti i messaggi di downlink presenti nella coda, utilizza l'operazione API [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListQueuedMessages.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListQueuedMessages.html) o il comando della CLI [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-queued-messages.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-queued-messages.html).

```
aws iotwireless list-queued-messages
```

Per impostazione predefinita, durante l'esecuzione di questo comando vengono visualizzati un massimo di 10 messaggi di downlink.

**Rimozione di singoli messaggi di downlink o cancellazione dell'intera coda**  
Per rimuovere singoli messaggi dalla coda o per cancellare l'intera coda, utilizza l'operazione API [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteQueuedMessages.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteQueuedMessages.html) o il comando della CLI [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-queued-messages.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-queued-messages.html).
+ Per rimuovere i singoli messaggi, fornisci il `messageID` dei messaggi che desideri rimuovere per il dispositivo wireless, specificato dal `wirelessDeviceId`.
+ Per cancellare l'intera coda di downlink, specifica il `messageID` come `*` per il dispositivo wireless, specificato dal `wirelessDeviceId`.

## Risoluzione dei problemi relativi alla coda dei messaggi di downlink
<a name="lorawan-downlink-queue-troubleshoot"></a>

Ecco alcune cose da controllare se i risultati che vedi sono diversi da quelli che ti aspetti.
+ 

**I messaggi di downlink non vengono visualizzati nella console AWS IoT**  
Se non visualizzi un messaggio di downlink nella coda dopo averlo aggiunto come descritto in [Eseguire operazioni di accodamento dei messaggi di downlink utilizzando la console](#lorawan-downlink-queue-console), potrebbe dipendere dal fatto che il dispositivo non ha completato un processo chiamato *procedura di attivazione* o *congiungimento*. Questa procedura viene completata quando il dispositivo viene inserito in AWS IoT Core per LoRaWAN. Per ulteriori informazioni, consultare [Aggiungi le specifiche del dispositivo wireless ad AWS IoT Core per LoRaWAN utilizzando la console](lorawan-end-devices-add.md#lorawan-end-device-spec-console).

  Dopo avere inserito il dispositivo in AWS IoT Core per LoRaWAN, puoi monitorarlo per verificare se l'accesso e il congiungimento sono riusciti utilizzando l'analizzatore di rete o Amazon CloudWatch. Per ulteriori informazioni, consultare [Strumenti di monitoraggio](monitoring-cloudwatch.md#monitoring-tools).
+ 

**Pacchetti di messaggi di downlink mancanti quando si utilizza l'API**  
Quando utilizzi l'operazione API `SendDataToWirelessDevice`, l'API restituisce un `MessageId` univoco. Tuttavia, non puoi verificare se il dispositivo LoRaWAN abbia ricevuto il messaggio di downlink. I pacchetti di downlink possono essere eliminati se, ad esempio, il dispositivo non ha completato la procedura di congiungimento. Per ulteriori informazioni su come risolvere questo errore, consulta la sezione precedente.
+ 

**Errore ARN mancante durante l'invio del messaggio di downlink**  
Quando invii un messaggio di downlink dalla coda al dispositivo, potresti ricevere un errore di Amazon Resource Name (ARN) mancante. L'errore potrebbe verificarsi perché non è stata specificata correttamente la destinazione per il dispositivo che riceve il messaggio di downlink. Per risolvere questo errore, controlla i dettagli di destinazione del dispositivo.