

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

# Mantenimento dello stato del dispositivo mentre il dispositivo è disconnesso da Device Shadows
<a name="iot-shadows-tutorial"></a>

Questi tutorial mostrano come utilizzare il servizio AWS IoT Device Shadow per archiviare e aggiornare le informazioni sullo stato di un dispositivo. Il documento Shadow, che è un documento JSON, mostra la modifica dello stato del dispositivo in base ai messaggi pubblicati da un dispositivo, un'app locale o un servizio. In questo tutorial, il documento Shadow mostra la modifica del colore di una lampadina. Questi tutorial mostrano anche come Shadow archivia queste informazioni anche quando il dispositivo è disconnesso da Internet e trasmette le informazioni più recenti sullo stato al dispositivo quando torna online e richiede queste informazioni.

Ti consigliamo di provare questi tutorial nell'ordine in cui sono mostrati qui, a partire dalle risorse AWS IoT necessarie per creare e la configurazione hardware necessaria, che consente anche di apprendere i concetti in modo incrementale. Questi tutorial mostrano come configurare e connettere un dispositivo Raspberry Pi da utilizzare con. AWS IoT Se non si dispone dell'hardware necessario, è possibile seguire questi tutorial adattandoli a un dispositivo di propria scelta o con la [creazione di un dispositivo virtuale con Amazon EC2](creating-a-virtual-thing.md).

**Panoramica dello scenario tutorial**  
Lo scenario di questi tutorial è un'app o un servizio locale che cambia il colore di una lampadina e che pubblica i dati in argomenti shadow riservati. Questi tutorial sono simili alla funzionalità Device Shadow descritta in [Interactive getting started tutorial (Tutorial interattivo sulle nozioni di base)](interactive-demo.md) e sono implementati su un dispositivo Raspberry Pi. I tutorial in questa sezione si concentrano su una singola shadow classica, mostrando il modo in cui è possibile inserire le shadow o più dispositivi.

I seguenti tutorial ti aiuteranno a imparare a usare il servizio AWS IoT Device Shadow.
+ 

**[Tutorial: Preparazione del Raspberry Pi per eseguire l'applicazione shadow](create-resources-shadow.md)**  
Questo tutorial mostra come configurare un dispositivo Raspberry Pi con cui connettersi. AWS IoT Potrai anche creare un documento di AWS IoT policy e una risorsa, scaricare i certificati e quindi allegare la policy a quella risorsa. Questo tutorial dura circa 30 minuti.
+ 

**[Tutorial: Installare l'SDK di dispositivo ed eseguire l’applicazione di esempio per Device Shadows](lightbulb-shadow-application.md)**  
Questo tutorial mostra come installare gli strumenti, il software e il AWS IoT Device SDK for Python necessari, quindi eseguire l'applicazione shadow di esempio. Questo tutorial si basa sui concetti presentati in [Connettere un Raspberry Pi o altro dispositivo](connecting-to-existing-device.md) e il completamento richiede 20 minuti.
+ 

**[Tutorial: Interagisci con Device Shadow utilizzando l’app di esempio e il client di test MQTT](interact-lights-device-shadows.md)**  
Questo tutorial mostra come utilizzare l'app e la **AWS IoT console** di `shadow.py` esempio per osservare l'interazione tra AWS IoT Device Shadows e i cambiamenti di stato della lampadina. Il tutorial mostra anche come inviare messaggi MQTT agli argomenti riservati di Device Shadow. Questo tutorial dura circa 45 minuti.

**AWS IoT Panoramica di Device Shadow**  
Un Device Shadow è una rappresentazione virtuale persistente di un dispositivo gestito da una [risorsa oggetto](iot-thing-management.md) creata nel AWS IoT registro. Il documento Shadow è un documento JSON o di JavaScript notazione utilizzato per archiviare e recuperare le informazioni sullo stato corrente di un dispositivo. È possibile utilizzare lo shadow per ottenere e impostare lo stato di un dispositivo tramite argomenti MQTT o HTTP REST APIs, indipendentemente dal fatto che il dispositivo sia connesso a Internet.

Il documento di una copia shadow contiene una proprietà `state` che descrive questi aspetti dello stato del dispositivo.
+ `desired`: le app specificano gli stati desiderati delle proprietà del dispositivo aggiornando l'oggetto `desired`.
+ `reported`: i dispositivi segnalano il loro stato corrente nell'oggetto `reported`.
+ `delta`: AWS IoT riporta le differenze tra lo stato desiderato e quello riportato nell'`delta`oggetto.

Di seguito è illustrato un esempio di documento di uno stato Shadow.

```
{
  "state": {
    "desired": {
      "color": "green"
      },
    "reported": {
      "color": "blue"
      },
    "delta": {
      "color": "green"
      }
   }
}
```

Per aggiornare il documento Shadow di un dispositivo, è possibile utilizzare gli [argomenti MQTT riservati](reserved-topics.md#reserved-topics-shadow), il [Device Shadow REST APIs](device-shadow-rest-api.md) che supporta `GET``UPDATE`, `DELETE` le operazioni con HTTP e la [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html).

Nell'esempio precedente, supponiamo che tu voglia modificare il colore `desired` con `yellow`. A tale scopo, invia una richiesta all’API [UpdateThingShadow](device-shadow-rest-api.md#API_UpdateThingShadow) o pubblica un messaggio nell'argomento [Aggiorna](device-shadow-mqtt.md#update-pub-sub-topic), `$aws/things/THING_NAME/shadow/update`.

```
{
  "state": {
    "desired": {
      "color": yellow
    }
  }
}
```

Gli aggiornamenti interessano solo i campi specificati nella richiesta. Dopo aver aggiornato con successo il Device Shadow, AWS IoT pubblica il nuovo `desired` stato sull'`delta`argomento,`$aws/things/THING_NAME/shadow/delta`. Il documento Shadow in questo caso ha il seguente aspetto:

```
{
  "state": {
    "desired": {
      "color": yellow
    },
    "reported": {
      "color": green
    },
    "delta": {
      "color": yellow
      }
  }
}
```

Il nuovo stato viene quindi segnalato al AWS IoT Device Shadow utilizzando l'`Update`argomento `$aws/things/THING_NAME/shadow/update` con il seguente messaggio JSON: 

```
{
  "state": {
    "reported": {
      "color": yellow
    }
  }
}
```

Se desideri ottenere le informazioni sullo stato attuale, invia una richiesta all'API [GetThingShadow](device-shadow-rest-api.md#API_GetThingShadow) o pubblica un messaggio MQTT nell’argomento [Ottieni](device-shadow-mqtt.md#get-pub-sub-topic), `$aws/things/THING_NAME/shadow/get`.

Per ulteriori informazioni sul funzionamento del Servizio Device Shadow, consulta [AWS IoT Servizio Device Shadow](iot-device-shadows.md).

Per ulteriori informazioni sull'utilizzo di Device Shadows su dispositivi, app e servizi, consulta [Utilizzo delle copie shadow nei dispositivi](device-shadow-comms-device.md) e [Utilizzo delle copie shadow in app e servizi](device-shadow-comms-app.md).

Per informazioni sull'interazione con le AWS IoT ombre, consulta. [Interazione con le copia shadow](device-shadow-data-flow.md)

Per informazioni sugli argomenti riservati MQTT e HTTP REST APIs, vedere e. [Argomenti MQTT di Device Shadow](device-shadow-mqtt.md) [API REST del servizio Device Shadow](device-shadow-rest-api.md)

# Tutorial: Preparazione del Raspberry Pi per eseguire l'applicazione shadow
<a name="create-resources-shadow"></a>

Questo tutorial dimostra come impostare e configurare un dispositivo Raspberry Pi e creare le AWS IoT risorse necessarie a un dispositivo per connettersi e scambiare messaggi MQTT.

**Nota**  
Se hai intenzione di [Crea un dispositivo virtuale con Amazon EC2](creating-a-virtual-thing.md), è possibile saltare questa pagina e continuare su [Configurazione del dispositivo](configure-device.md). Creerai queste risorse quando creerai l’oggetto virtuale. Se desideri utilizzare un dispositivo diverso invece di Raspberry Pi, puoi provare a seguire questi tutorial adattandoli a un dispositivo di tua scelta.

**In questo tutorial, imparerai come:**
+ Configura un dispositivo Raspberry Pi e configuralo per l'uso con. AWS IoT
+ Crea un documento di AWS IoT policy che autorizzi il tuo dispositivo a interagire con AWS IoT i servizi.
+ Crea una risorsa nei certificati AWS IoT del dispositivo X.509, quindi allega il documento relativo alla policy.

  L’oggetto è la rappresentazione virtuale del dispositivo nel registro AWS IoT . Il certificato autentica il dispositivo su AWS IoT Core e il documento di policy autorizza il dispositivo a interagire con. AWS IoT

**Come eseguire questo tutorial**  
Per eseguire l’applicazione di esempio `shadow.py` per Device Shadows, avrai bisogno di un dispositivo Raspberry Pi che si connette a AWS IoT. Si consiglia di seguire questo tutorial nell'ordine in cui viene presentato qui, iniziando con la configurazione del Raspberry Pi e dei suoi accessori, e quindi creando una policy e allegando il criterio a una risorsa dell’oggetto che si crea. Puoi quindi seguire questo tutorial utilizzando l'interfaccia utente grafica (GUI) supportata da Raspberry Pi per aprire la AWS IoT console sul browser web del dispositivo, il che semplifica anche il download dei certificati direttamente sul tuo Raspberry Pi per la connessione. AWS IoT

**Prima di iniziare questo tutorial, assicurati di disporre di:**
+ Un. Account AWS Se non disponi dell'account, effettua la procedura descritta in [Configurare Account AWS](setting-up.md), prima di continuare. Avrai bisogno della tua Account AWS AWS IoT console per completare questo tutorial. 
+ Il Raspberry Pi e i suoi accessori necessari. Sarà necessario:
  + Un [modello Raspberry Pi 3 B](https://www.raspberrypi.com/products/) o più recente. Questo tutorial potrebbe funzionare su versioni precedenti del Raspberry Pi, ma non sono state testate.
  + [Sistema operativo Raspberry Pi (32 bit)](https://www.raspberrypi.com/software/operating-systems/) o versione successiva. Ti consigliamo di utilizzare sempre la versione più recente del sistema operativo Raspberry Pi. Le versioni precedenti del sistema operativo potrebbero funzionare, ma non le abbiamo testate.
  + Una connessione Ethernet o Wi-Fi.
  + Tastiera, mouse, monitor, cavi e alimentatori.

Questo tutorial dura circa 30 minuti.

## Fase 1: Imposta e configura il dispositivo Raspberry Pi
<a name="setup-device-shadow"></a>

In questa sezione, configureremo un dispositivo Raspberry Pi da utilizzare con AWS IoT.

**Importante**  
Adattare queste istruzioni ad altri dispositivi e sistemi operativi può essere difficile. Dovrai avere una buona capacità di utilizzare il tuo dispositivo in modo da poter interpretare queste istruzioni e applicarle ad esso. In caso di difficoltà, è possibile provare una delle altre opzioni del dispositivo come alternativa, come [Crea un dispositivo virtuale con Amazon EC2](creating-a-virtual-thing.md) o [Usa il tuo PC o Mac Windows o Linux come dispositivo AWS IoT](using-laptop-as-device.md). 

Dovrai configurare il tuo Raspberry Pi in modo che possa avviare il sistema operativo (OS), connettersi a Internet e consentirti di interagire con esso tramite un'interfaccia a riga di comando. Puoi anche utilizzare l'interfaccia utente grafica (GUI) supportata con Raspberry Pi per aprire la AWS IoT console ed eseguire il resto di questo tutorial.

**Per impostare Raspberry Pi**

1. Inserire la scheda SD nello slot per schede MicroSD nel Raspberry Pi. Alcune schede SD sono precaricate con un gestore di installazione che richiede tramite un menu di installare il sistema operativo dopo l'avvio del modulo. È inoltre possibile utilizzare l'imager Raspberry Pi per installare il sistema operativo sulla scheda.

1. Connetti un televisore HDMI o un monitor al cavo HDMI che si collega alla porta HDMI del Raspberry Pi. 

1. Connetti la tastiera e il mouse alle porte USB del Raspberry Pi, quindi collega l'adattatore di alimentazione per avviare la scheda.

Dopo l'avvio del Raspberry Pi, se la scheda SD è stata precaricata con il gestore di installazione, viene visualizzato un menu per installare il sistema operativo. Se hai problemi nell'installazione del sistema operativo, puoi provare a eseguire la procedura riportata di seguito. Per informazioni sull’impostazione di Raspberry Pi, consulta [Impostazione di Raspberry Pi](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/).

**In caso di problemi nell’impostazione di Raspberry Pi:**
+ Verifica se è stata inserita la scheda SD prima di avviare la scheda. Se si collega la scheda SD dopo l'avvio del modulo, il menu di installazione potrebbe non essere visualizzato.
+ Assicurati che il televisore o il monitor sia acceso e che sia selezionato l'ingresso corretto.
+ Assicurati di utilizzare il software compatibile con Raspberry Pi.

Dopo aver installato e configurato il sistema operativo Raspberry Pi, apri il browser Web di Raspberry Pi e accedi alla AWS IoT Core console per continuare il resto dei passaggi di questo tutorial.

Se riesci ad aprire la AWS IoT Core console, il tuo Raspberry Pi è pronto e puoi continuare a farlo. [Tutorial: Eseguire il provisioning del dispositivo in AWS IoT](shadow-provision-cloud.md)

In caso di problemi o di bisogno di ulteriore assistenza, consulta la sezione [Getting help for your Raspberry Pi (Ottenere assistenza per Raspberry Pi)](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/5).

# Tutorial: Eseguire il provisioning del dispositivo in AWS IoT
<a name="shadow-provision-cloud"></a>

Questa sezione crea le AWS IoT Core risorse che verranno utilizzate dal tutorial.

**Topics**
+ [Fase 1: Creare una AWS IoT policy per il Device Shadow](#create-policy-shadow)
+ [Fase 2: creare una risorsa dell’oggetto e connettere la policy all’oggetto](#create-thing-shadow)
+ [Fase 3: Esamina i risultati e i passaggi successivi](#resources-shadow-review)

## Fase 1: Creare una AWS IoT policy per il Device Shadow
<a name="create-policy-shadow"></a>

I certificati X.509 autenticano il dispositivo con. AWS IoT Core AWS IoT al certificato sono allegate politiche che consentono al dispositivo di eseguire AWS IoT operazioni, come la sottoscrizione o la pubblicazione di argomenti riservati MQTT utilizzati dal servizio Device Shadow. Il dispositivo presenta il certificato quando si connette e invia messaggi a. AWS IoT Core

In questa procedura creerai un policy che consente di eseguire le operazioni AWS IoT necessarie per eseguire il programma di esempio. Ti consigliamo di creare una policy che conceda solo le autorizzazioni richieste per eseguire l'attività. Prima crei la AWS IoT policy e poi la alleghi al certificato del dispositivo che creerai in seguito.

**Per creare una AWS IoT politica**

1. Nel menu di sinistra scegli **Secure (Sicurezza)** e quindi **Policies (Policy)**. Se il tuo account dispone di policy esistenti, scegli **Create (Crea)**; in caso contrario, nella pagina **You don’t have a policy yet (Non hai ancora una policy)** scegli **Create a policy (Crea una policy)**.

1. Nella pagina **Create a policy (Crea una policy)**:

   1. Nel campo **Name (Nome)** inserire un nome per la policy (ad esempio **My\$1Device\$1Shadow\$1policy**). Non utilizzare dati personali identificabili nei nomi delle policy.

   1. Nel documento di policy vengono descritte le operazioni di connessione, sottoscrizione, ricezione e pubblicazione che consentono al dispositivo l’autorizzazione di pubblicare e sottoscrivere gli argomenti riservati MQTT.

      Copia la policy di esempio seguente e incollala nel documento di policy. Sostituiscilo `thingname` con il nome dell'oggetto che creerai (ad esempio,`My_light_bulb`), `region` con la AWS IoT regione in cui utilizzi i servizi e `account` con il tuo Account AWS numero. Per ulteriori informazioni sulle AWS IoT politiche, consulta[AWS IoT Core politiche](iot-policies.md).  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/delta"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/get/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/get/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/delta"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": "iot:Connect",
                  "Resource": "arn:aws:iot:us-east-1:123456789012:client/test-*"
              }
          ]
      }
      ```

## Fase 2: creare una risorsa dell’oggetto e connettere la policy all’oggetto
<a name="create-thing-shadow"></a>

I dispositivi collegati a AWS IoT possono essere rappresentati dalle *risorse* degli oggetti presenti nel AWS IoT registro. Una *risorsa dell’oggetto* rappresenta un dispositivo specifico o un'entità logica, come la lampadina in questo tutorial.

Per imparare a creare un oggetto in AWS IoT, segui i passaggi descritti in[Crea un oggetto](create-iot-resources.md#create-aws-thing). Ecco alcune cose fondamentali da notare mentre segui i passaggi di tale tutorial:

1. Scegli **Create a single thing (Crea un oggetto singolo)**, e nel campo **Name (Nome)** inserisci un nome per l'oggetto che è uguale a quello del `thingname` (ad esempio, `My_light_bulb`) che hai specificato quando hai creato la policy in precedenza.

   Non è possibile modificare il nome di un oggetto dopo averlo creato. Se gli hai dato un nome diverso da `thingname`, crea un nuovo oggetto con nome `thingname` ed elimina il vecchio oggetto.
**Nota**  
Non utilizzare dati personali identificabili nel nome dell’oggetto. Il nome dell’oggetto può essere visualizzato nelle comunicazioni e nei report non crittografati.

1. Si consiglia di scaricare ciascuno dei file di certificato nella pagina **Certificato creato\$1** in una posizione in cui è possibile trovarli facilmente. È necessario installare questi file per eseguire l'applicazione di esempio.

   Ti consigliamo di scaricare i file in una sottodirectory `certs` nella directory `home` sul Raspberry Pi e nominare ciascuno di essi con un nome più semplice come suggerito nella tabella seguente.  
**Nomi dei file dei certificati**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/shadow-provision-cloud.html)

1. Dopo aver attivato il certificato a cui abilitare le connessioni AWS IoT, scegli **Allega una politica** e assicurati di allegare la politica che hai creato in precedenza (ad esempio**My\$1Device\$1Shadow\$1policy**) all'oggetto.

   Dopo aver creato un oggetto, puoi vedere la risorsa relativa all'oggetto visualizzata nell'elenco degli elementi nella AWS IoT console.

## Fase 3: Esamina i risultati e i passaggi successivi
<a name="resources-shadow-review"></a>

**In questo tutorial, hai appreso come:**
+ Impostare e configurare il dispositivo Raspberry Pi.
+ Crea un documento di AWS IoT policy che autorizzi il tuo dispositivo a interagire con AWS IoT i servizi.
+ Creare una risorsa dell’oggetto e il certificato del dispositivo X.509 associato e collegare il documento della policy ad esso.

**Fasi successive**  
Ora puoi installare l'SDK del AWS IoT dispositivo per Python, eseguire `shadow.py` l'applicazione di esempio e utilizzare Device Shadows per controllare lo stato. Per ulteriori informazioni su come eseguire questo tutorial, consulta [Tutorial: Installare l'SDK di dispositivo ed eseguire l’applicazione di esempio per Device Shadows](lightbulb-shadow-application.md).

# Tutorial: Installare l'SDK di dispositivo ed eseguire l’applicazione di esempio per Device Shadows
<a name="lightbulb-shadow-application"></a>

Questa sezione mostra come installare il software richiesto e AWS IoT Device SDK for Python ed eseguire `shadow.py` l'applicazione di esempio per modificare il documento Shadow e controllare lo stato dell'ombra. 

**In questo tutorial, apprenderai come:**
+ Usa il software installato e AWS IoT Device SDK for Python per eseguire l'app di esempio.
+ Scoprire come l'immissione di un valore utilizzando l'app di esempio pubblichi il valore desiderato nella console AWS IoT .
+ Esaminare l’applicazione di esempio `shadow.py` e come utilizzare il protocollo MQTT per aggiornare lo stato di shadow.

**Prima di eseguire questo tutorial:**  
È necessario aver configurato Account AWS, configurato il dispositivo Raspberry Pi e creato una AWS IoT cosa e una politica che consentano al dispositivo le autorizzazioni per pubblicare e sottoscrivere gli argomenti riservati MQTT del servizio Device Shadow. Per ulteriori informazioni, consulta [Tutorial: Preparazione del Raspberry Pi per eseguire l'applicazione shadow](create-resources-shadow.md).

Devi aver installato anche Git, Python e AWS IoT Device SDK for Python. Questo tutorial si basa sui concetti presentati nel tutorial [Connettere un Raspberry Pi o altro dispositivo](connecting-to-existing-device.md). Se non hai provato questo tutorial, ti consigliamo di seguire i passaggi descritti in tale tutorial per installare i file dei certificati e SDK di dispositivo e quindi tornare a questo tutorial per eseguire l’applicazione di esempio `shadow.py`.

**Topics**
+ [Fase 1: eseguire l'app di esempio shadow.py](#run-sample-application-shadows)
+ [Fase 2: Revisione dell'app di esempio shadow.py dell'SDK di dispositivo](#review-shadow-sample-code)
+ [Fase 3: Risolvi i problemi con l’app di esempio `shadow.py`](#shadow-sample-app-troubleshoot)
+ [Fase 4: Esamina i risultati e i passaggi successivi](#sample-app-shadow-review)

Questo tutorial dura circa 20 minuti.

## Fase 1: eseguire l'app di esempio shadow.py
<a name="run-sample-application-shadows"></a>

Prima di eseguire il comando l’app di esempio `shadow.py`, oltre ai nomi e alla posizione dei file di certificato installati, sono necessarie le seguenti informazioni.


**Valori dei parametri dell'applicazione**  

|  Parametro  |  Dove trovare il valore  | 
| --- | --- | 
| your-iot-thing-name |  Nome della AWS IoT cosa che hai creato in precedenza in. [Fase 2: creare una risorsa dell’oggetto e connettere la policy all’oggetto](shadow-provision-cloud.md#create-thing-shadow) Per trovare questo valore, nella [console AWS IoT](https://console.aws.amazon.com/iot/home), scegli **Manage (Gestione)**, quindi scegli **Things (Oggetti)**.  | 
| your-iot-endpoint |   Il *your-iot-endpoint* valore ha un formato di:`endpoint_id-ats.iot.region.amazonaws.com`, ad esempio,`a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`. Per trovare questo valore: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/lightbulb-shadow-application.html)  | 

**Installazione ed esecuzione dell'applicazione di esempio**

1. Passare alla directory dell’applicazione di esempio.

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
   ```

1. Nella finestra della riga di comando, sostituisci *your-iot-endpoint* e *your-iot-thing-name* come indicato ed esegui questo comando.

   ```
   python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name
   ```

1. Osserva che l'applicazione di esempio:

   1. Si connette al servizio AWS IoT per il tuo account.

   1. Effettui la sottoscrizione ad eventi `Delta` e alle risposte `Update` e `Get`.

   1. Richieda di inserire un valore desiderato nel terminale.

   1. L'output sia simile a quello riportato di seguito:

   ```
   Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'...
   Connected!
   Subscribing to Delta events...
   Subscribing to Update responses...
   Subscribing to Get responses...
   Requesting current shadow state...
   Launching thread to read user input...
   Finished getting initial shadow state.
   Shadow contains reported value 'off'.
   Enter desired value:
   ```

**Nota**  
In caso di problemi nell'esecuzione dell’app di esempio `shadow.py`, consulta [Fase 3: Risolvi i problemi con l’app di esempio `shadow.py`](#shadow-sample-app-troubleshoot). Per ottenere ulteriori informazioni che potrebbero essere utili per risolvere il problema, aggiungi il parametro `--verbosity debug` alla riga di comando in modo che l'app di esempio visualizzi messaggi dettagliati su ciò che sta facendo.

**Inserisci i valori e osserva gli aggiornamenti nel documento Shadow**  
È possibile inserire i valori nel terminale per specificare il valore `desired`, che aggiorna anche il valore `reported`. Supponiamo di inserire il colore `yellow` nel terminale. Il valore `reported` viene aggiornato anche al colore `yellow`. Di seguito sono riportati i messaggi visualizzati nel terminale:

```
Enter desired value:
yellow
Changed local shadow value to 'yellow'.
Updating reported shadow value to 'yellow'...
Update request published.
Finished updating reported shadow value to 'yellow'.
```

Quando pubblichi questa richiesta di aggiornamento, AWS IoT crea un'ombra classica predefinita per la risorsa thing. È possibile osservare la richiesta di aggiornamento pubblicata su `reported` e i `desired` valori nella AWS IoT console esaminando il documento Shadow relativo alla risorsa oggetto che è stata creata (ad esempio,`My_light_bulb`). Per visualizzare l'aggiornamento nel documento Shadow:

1. Nella AWS IoT console, scegli **Gestisci**, quindi scegli **Cose**.

1. Nell'elenco di oggetti visualizzati, seleziona l'oggetto che hai creato, scegli **Shadows**, quindi scegli **Classic Shadow (Shadow classico)**.

Il documento Shadow dovrebbe essere simile a quanto riportato di seguito, mostrando i valori `reported` e `desired` impostati sul colore `yellow`. Questi valori vengono visualizzati nello **Stato shadow** del documento.

```
{
"desired": {
  "welcome": "aws-iot",
  "color": "yellow"
},
"reported": {
  "welcome": "aws-iot",
  "color": "yellow"
}
}
```

Viene inoltre visualizzato una sezione **Metadata (Metadati)** che contiene le informazioni sul timestamp e il numero di versione della richiesta.

Puoi usare la versione del documento sullo stato per assicurarti di aggiornare la versione più recente di una copia shadow di un dispositivo. Se invii un'altra richiesta di aggiornamento, il numero di versione aumenta di 1. Quando fornisci una versione con una richiesta di aggiornamento, il servizio rifiuta la richiesta con un codice di risposta di conflitto HTTP 409 se la versione corrente del documento sullo stato non corrisponde alla versione fornita. 

```
{
"metadata": {
  "desired": {
    "welcome": {
      "timestamp": 1620156892
    },
    "color": {
      "timestamp": 1620156893
    }
  },
  "reported": {
    "welcome": {
      "timestamp": 1620156892
    },
    "color": {
      "timestamp": 1620156893
    }
  }
},
"version": 10
}
```

Per saperne di più sul documento Shadow e osservare le modifiche alle informazioni sullo stato, procedi con il tutorial successivo [Tutorial: Interagisci con Device Shadow utilizzando l’app di esempio e il client di test MQTT](interact-lights-device-shadows.md) come descritto nella sezione [Fase 4: Esamina i risultati e i passaggi successivi](#sample-app-shadow-review) di questo tutorial. Eventualmente, si può anche sapere di più sul codice di esempio `shadow.py` e su come utilizza il protocollo MQTT nella sezione seguente.

## Fase 2: Revisione dell'app di esempio shadow.py dell'SDK di dispositivo
<a name="review-shadow-sample-code"></a>

Questa sezione esamina l’app di esempio `shadow.py` dal **SDK di dispositivo v2 AWS IoT per Python**, usata in questo tutorial. Qui esamineremo come si connette AWS IoT Core utilizzando il protocollo MQTT e MQTT su WSS. La libreria [AWS Common Runtime (AWS-CRT)](https://github.com/awslabs/aws-crt-python#aws-crt-python) fornisce il supporto del protocollo di comunicazione di basso livello ed è inclusa in AWS IoT Device SDK v2 for Python.

Sebbene questo tutorial utilizzi MQTT e MQTT su WSS, supporta i dispositivi che pubblicano richieste HTTPS. AWS IoT Per un esempio di un programma Python che invia un messaggio HTTP da un dispositivo, vedi l’[esempio di codice HTTPS](http.md#codeexample) utilizzando la libreria di Python `requests`. 

Per informazioni su come prendere una decisione informata sul protocollo da utilizzare per le comunicazioni del dispositivo, consulta [Scelta di un protocollo applicativo per la comunicazione del dispositivo](protocols.md#protocol-selection).

**MQTT**  
L'esempio `shadow.py` chiama `mtls_from_path` (mostrato qui) in [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py) per stabilire una connessione con AWS IoT Core utilizzando il protocollo MQTT. `mtls_from_path` utilizza i certificati X.509 e TLS v1.2 per autenticare il dispositivo. La libreria AWS-CRT gestisce i dettagli di livello inferiore di quella connessione.

```
mqtt_connection = mqtt_connection_builder.mtls_from_path(
  endpoint=args.endpoint,
  cert_filepath=args.cert,
  pri_key_filepath=args.key,
  ca_filepath=args.ca_file,
  client_bootstrap=client_bootstrap,
  on_connection_interrupted=on_connection_interrupted,
  on_connection_resumed=on_connection_resumed,
  client_id=args.client_id,
  clean_session=False,
  keep_alive_secs=6
)
```
+ `endpoint`è l' AWS IoT endpoint che hai passato dalla riga di comando ed `client_id` è l'ID che identifica in modo univoco questo dispositivo in. Regione AWS
+ `cert_filepath`, `pri_key_filepath` e `ca_filepath` sono i percorsi del certificato e dei file di chiave privata del dispositivo e del file root CA. 
+ `client_bootstrap` è l'oggetto runtime comune che gestisce le attività di comunicazione socket e viene istanziato prima della chiamata a `mqtt_connection_builder.mtls_from_path`.
+ `on_connection_interrupted` e `on_connection_resumed` sono le funzioni di callback da chiamare quando la connessione del dispositivo viene interrotta e ripresa.
+ `clean_session` consente di avviare una nuova sessione persistente o, se è presente, di riconnettersi a una esistente. `keep_alive_secs` è il valore keep alive, in secondi, per inviare la richiesta `CONNECT`. Un ping verrà inviato automaticamente a questo intervallo. Se il server non riceve un ping dopo 1,5 volte questo valore, presuppone che la connessione sia stata persa.

L’esempio `shadow.py` chiama anche `websockets_with_default_aws_signing` in [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py) per stabilire una connessione con AWS IoT Core utilizzando il protocollo MQTT su WSS. MQTT su WSS utilizza anche gli stessi parametri di MQTT e prende questi parametri aggiuntivi:
+ `region`è la regione di AWS firma utilizzata dall'autenticazione Signature V4 e `credentials_provider` sono AWS le credenziali fornite da utilizzare per l'autenticazione. La regione viene passata dalla riga di comando, e l’oggetto `credentials_provider` viene istanziato appena prima della chiamata a `mqtt_connection_builder.websockets_with_default_aws_signing`.
+ `websocket_proxy_options` sono le opzioni proxy HTTP, se si utilizza un host proxy. Nell’app di esempio `shadow.py`, questo valore viene istanziato appena prima della chiamata a `mqtt_connection_builder.websockets_with_default_aws_signing`.

**Iscrizione agli argomenti e agli eventi Shadow**  
L’esempio `shadow.py` cerca di stabilire una connessione e attende di essere completamente connesso. Se non è connesso, i comandi vengono messi in coda. Una volta connesso, l'esempio sottoscrive gli eventi delta e aggiorna e riceve i messaggi e pubblica i messaggi con un livello Quality of Service (QoS) pari a 1 (`mqtt.QoS.AT_LEAST_ONCE`). 

Quando un dispositivo sottoscrive un messaggio con QoS livello 1, il broker di messaggi salva i messaggi a cui il dispositivo è sottoscritto fino a quando non possono essere inviati al dispositivo. Il broker di messaggi restituisce i messaggi fino a quando non riceve una risposta `PUBACK` dal dispositivo. 

Per ulteriori informazioni sul protocollo MQTT, consulta [Esamina il protocollo MQTT](sdk-tutorials.md#sdk-tutorials-mqtt-review) e [MQTT](mqtt.md).

Per ulteriori informazioni su MQTT, MQTT su WSS, sessioni persistenti e i livelli QoS utilizzati in questa esercitazione, consulta [Revisione dell'app di esempio pubsub.py SDK per dispositivi](sdk-tutorials.md#sdk-tutorials-explore-sample).

## Fase 3: Risolvi i problemi con l’app di esempio `shadow.py`
<a name="shadow-sample-app-troubleshoot"></a>

Quando si esegue l’app di esempio `shadow.py`, dovresti vedere alcuni messaggi visualizzati nel terminale e un prompt per inserire un valore `desired`. Se il programma genera un errore, per eseguire il debug dell'errore, puoi iniziare controllando se hai eseguito il comando corretto per il tuo sistema.

In alcuni casi, il messaggio di errore potrebbe indicare problemi di connessione e avere un aspetto simile a: `Host name was invalid for dns resolution` o `Connection was closed unexpectedly`. In questi casi, ecco alcune operazioni disponibili:
+ 

**Controlla l'indirizzo dell'endpoint nel comando**  
Esaminare il parametro `endpoint` nel comando inserito per eseguire l'app di esempio (ad esempio `a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com`) e controllare questo valore nella **console AWS IoT **.

  Per verificare se hai utilizzato il valore corretto:

  1. Nella **console AWS IoT **, scegli **Manage (Gestione)** e poi **Things (Oggetti)**.

  1. Scegli l’oggetto che hai creato per l'app di esempio (ad esempio, **my\$1light\$1lampadina**) e quindi scegli **Interact (Interagisci)**.

  L'endpoint viene visualizzato nella sezione ** HTTPS** della pagina dei dettagli degli oggetti. Dovresti visualizzare anche un messaggio in cui viene indicato: `This thing already appears to be connected.`
+ 

**Verifica l'attivazione del certificato**  
I certificati autenticano il dispositivo con. AWS IoT Core

  Per verificare se il certificato è attivo:

  1. Nella **console AWS IoT **, scegli **Manage (Gestione)** e poi **Things (Oggetti)**.

  1. Scegli l’oggetto che hai creato per l'app di esempio (ad esempio, **my\$1light\$1lampadina**) e quindi scegli **Security (Sicurezza)**.

  1. Seleziona il certificato e quindi, dalla pagina dei dettagli del certificato, scegli Seleziona il certificato e quindi, dalla pagina dei dettagli del certificato, scegli **Actions (Operazioni)**.

  Se nell'elenco a discesa **Activate (Attiva)** non è disponibile e puoi solo scegliere **Deactivate (Disattiva)**, il certificato è attivo. In caso contrario, scegli **Activate (Attiva)** ed esegui di nuovo il programma di esempio.

  Se il programma continua a non essere eseguito, controlla i nomi dei file del certificato nel folder `certs`.
+ 

**Controlla la policy associata alla risorsa dell’oggetto**  
Mentre i certificati autenticano il dispositivo, AWS IoT le policy consentono al dispositivo di eseguire AWS IoT operazioni, come la sottoscrizione o la pubblicazione di argomenti riservati MQTT.

  Per verificare se la policy corretta è allegata:

  1. Individua il certificato come descritto in precedenza, quindi scegli **Policies (Policy)**.

  1. Scegli la policy visualizzata e verifica se descrive le operazioni `connect`, `subscribe`, `receive` e `publish` che consentono al dispositivo l’autorizzazione di pubblicare e sottoscrivere gli argomenti riservati MQTT.

     Consulta [Fase 1: Creare una AWS IoT policy per il Device Shadow](shadow-provision-cloud.md#create-policy-shadow) per una policy di esempio.

  Se visualizzi messaggi di errore che indicano problemi di connessione AWS IoT, ciò potrebbe essere dovuto alle autorizzazioni che stai utilizzando per la politica. In tal caso, ti consigliamo di iniziare con una politica che fornisca l'accesso completo alle AWS IoT risorse e quindi di eseguire nuovamente il programma di esempio. È possibile modificare la policy corrente oppure scegliere la policy corrente. Scegli **Detach (Distacca)** e quindi crea un altra policy che fornisca accesso completo e collegala alla risorsa dell’oggetto. In seguito è possibile limitare la policy solo alle operazioni e alle policy necessarie per eseguire il programma.  
****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:*"
            ],
            "Resource": "*"
        }
    ]
  }
  ```
+ 

**Verifica dell'installazione di SDK di dispositivo**  
Se il programma non viene ancora eseguito, è possibile reinstallare SDK di dispositivo per assicurarsi che l'installazione dell'SDK sia completa e corretta.

## Fase 4: Esamina i risultati e i passaggi successivi
<a name="sample-app-shadow-review"></a>

**In questo tutorial, hai appreso come:**
+ Installa il software, gli strumenti e il AWS IoT Device SDK for Python necessari.
+ Capire come l'applicazione di esempio ,`shadow.py`, che utilizza il protocollo MQTT per recuperare e aggiornare lo stato corrente di shadow.
+ Esegui l'app di esempio per Device Shadows e osserva l'aggiornamento del documento Shadow nella console. AWS IoT Hai anche imparato a risolvere eventuali problemi e correggere gli errori durante l'esecuzione del programma.

**Fasi successive**  
A questo punto è possibile eseguire il l’applicazione di esempio `shadow.py` e utilizzare Device Shadows per controllare lo stato. È possibile osservare gli aggiornamenti del documento Shadow nella console AWS IoT e gli eventi delta a cui risponde l'app di esempio. Utilizzando il client di test MQTT, è possibile iscriversi agli argomenti shadow riservati e osservare i messaggi ricevuti dagli argomenti durante l'esecuzione del programma di esempio. Per ulteriori informazioni su come eseguire questo tutorial, consulta [Tutorial: Interagisci con Device Shadow utilizzando l’app di esempio e il client di test MQTT](interact-lights-device-shadows.md).

# Tutorial: Interagisci con Device Shadow utilizzando l’app di esempio e il client di test MQTT
<a name="interact-lights-device-shadows"></a>

Per interagire con l’applicazione di esempio `shadow.py`, inserisci un valore nel terminale per il valore `desired`. Ad esempio, potete specificare colori simili ai semafori, AWS IoT rispondere alla richiesta e aggiornare i valori riportati.

**In questo tutorial, apprenderai come:**
+ Utilizzare l'app di esempio `shadow.py` per specificare gli stati desiderati e aggiornare lo stato corrente di shadow.
+ Modificare il documento Shadow per osservare gli eventi delta e come l'app di esempio `shadow.py` risponde ad essi.
+ Utilizzare il client di test MQTT per effettuare la sottoscrizione ad argomenti shadow e osservare gli aggiornamenti quando si esegue il programma di esempio.

**Prima di eseguire questo tutorial, è necessario:**  
Configura il tuo Account AWS, configurato il tuo dispositivo Raspberry Pi e creato AWS IoT qualcosa e una politica. È inoltre necessario aver installato il software richiesto, SDK per dispositivo, i file di certificato ed eseguire il programma di esempio nel terminale. Per ulteriori informazioni, consulta i tutorial precedenti [Tutorial: Preparazione del Raspberry Pi per eseguire l'applicazione shadow](create-resources-shadow.md) e [Fase 1: eseguire l'app di esempio shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows). Se non lo hai già fatto, devi completare questi tutorial.

**Topics**
+ [Fase 1: Aggiornare i valori desiderati e segnalati utilizzando l’app di esempio `shadow.py`](#update-desired-shadow-sample)
+ [Fase 2: Visualizzare i messaggi dall’app di esempio `shadow.py` nel client di test MQTT](#shadow-sample-view-msg)
+ [Fase 3: Risoluzione degli errori con le interazioni Device Shadow](#shadow-observe-messages-troubleshoot)
+ [Fase 4: Esamina i risultati e i passaggi successivi](#sample-shadow-review)

Questo tutorial dura circa 45 minuti.

## Fase 1: Aggiornare i valori desiderati e segnalati utilizzando l’app di esempio `shadow.py`
<a name="update-desired-shadow-sample"></a>

Nel tutorial precedente[Fase 1: eseguire l'app di esempio shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows), hai imparato a osservare un messaggio pubblicato nel documento Shadow nella AWS IoT console quando inserisci un valore desiderato, come descritto nella sezione[Tutorial: Installare l'SDK di dispositivo ed eseguire l’applicazione di esempio per Device Shadows](lightbulb-shadow-application.md).

Nell'esempio precedente, abbiamo impostato il colore desiderato su `yellow`. Dopo aver inserito ogni valore, il terminale richiede di immettere un altro valore `desired`. Se si inserisce di nuovo lo stesso valore (`yellow`), l'app lo riconosce e ti chiede di inserire un nuovo valore `desired`.

```
Enter desired value:
yellow
Local value is already 'yellow'.
Enter desired value:
```

Ora, supponiamo che tu inserisca il colore`green`. AWS IoT risponde alla richiesta e aggiorna il `reported` valore a`green`. Questo è il modo in cui si verifica l'aggiornamento quando lo stato `desired` è diverso dal `reported`, causando un delta.

**In che modo l’app di esempio `shadow.py` simula le interazioni Device Shadow:**

1. Inserisci un valore `desired` (ad esempio `yellow`) nel terminale per pubblicare lo stato desiderato.

1. Dato che lo stato `desired` è diverso dallo stato `reported` (ad esempio il colore `green`), si verifica un delta e l'app sottoscritta al delta riceve questo messaggio.

1. L'app risponde al messaggio e aggiorna il suo stato al valore `desired`, `yellow`.

1. L'app pubblica quindi un messaggio di aggiornamento con il nuovo valore dello stato del dispositivo, `yellow`.

Di seguito vengono illustrati i messaggi visualizzati nel terminale che mostrano come viene pubblicata la richiesta di aggiornamento.

```
Enter desired value:
green
Changed local shadow value to 'green'.
Updating reported shadow value to 'green'...
Update request published.
Finished updating reported shadow value to 'green'.
```

Nella AWS IoT console, il documento Shadow riflette il valore aggiornato a `green` per entrambi i `desired` campi `reported` e e il numero di versione viene incrementato di 1. Ad esempio, se il numero della versione precedente è stato visualizzato come 10, il numero della versione corrente verrà visualizzato come 11.

**Nota**  
L'eliminazione di una shadow non reimposta il numero di versione su 0. Si vedrà che la versione shadow viene incrementata di 1 quando si pubblica una richiesta di aggiornamento o si crea un'altra shadow con lo stesso nome.

**Modifica del documento Shadow per osservare gli eventi delta**  
L'app di esempio `shadow.py` è anche sottoscritta agli eventi `delta` e risponde quando c'è una modifica a un valore `desired`. Ad esempio, è possibile modificare il valore `desired` per il colore `red`. Per fare ciò, nella AWS IoT console, modifica il documento Shadow facendo clic su **Modifica**, quindi imposta il `desired` valore su `red` in JSON, mantenendo il `reported` valore su. `green` Prima di salvare le modifiche, tieni aperto il terminale sul Raspberry Pi mentre vedrai i messaggi visualizzati nel terminale quando si verifica la modifica.

```
{
"desired": {
  "welcome": "aws-iot",
  "color": "red"
},
"reported": {
  "welcome": "aws-iot",
  "color": "green"
}
}
```

Dopo aver salvato il nuovo valore, l’app di esempio `shadow.py` risponde a questa modifica e visualizza i messaggi nel terminale che indicano il delta. Si dovrebbero quindi vedere i seguenti messaggi visualizzati sotto il prompt per l'immissione del valore `desired`.

```
Enter desired value:
Received shadow delta event.
Delta reports that desired value is 'red'. Changing local value...
Changed local shadow value to 'red'.
Updating reported shadow value to 'red'...
Finished updating reported shadow value to 'red'.
Enter desired value:
Update request published.
Finished updating reported shadow value to 'red'.
```

## Fase 2: Visualizzare i messaggi dall’app di esempio `shadow.py` nel client di test MQTT
<a name="shadow-sample-view-msg"></a>

Puoi utilizzare il **client di test MQTT** nella **console AWS IoT ** per monitorare i messaggi MQTT che vengono passati in Account AWS. Utilizzando gli argomenti MQTT riservati utilizzati dal servizio Device Shadow, è possibile osservare i messaggi ricevuti dagli argomenti durante l'esecuzione dell'applicazione di esempio.

Se il client di test MQTT non è ancora stato utilizzato, è possibile consultare [Visualizza i messaggi MQTT con il AWS IoT client MQTT](view-mqtt-messages.md). In questo modo si impara come utilizzare il **client di test MQTT** nella **console AWS IoT ** per visualizzare i messaggi MQTT durante il passaggio attraverso il broker di messaggi.

1. 

**Apertura del client di test MQTT**

   Apri il [client di test MQTT nella console AWS IoT](https://console.aws.amazon.com//iot/home#/test) in una nuova finestra in modo da poter osservare i messaggi ricevuti dagli argomenti MQTT senza perdere la configurazione del client di test MQTT. Il client di test MQTT non conserva sottoscrizioni o registri di messaggi se si lascia andare a un'altra pagina della console. In questa sezione del tutorial, potete aprire il documento Shadow corrispondente e il AWS IoT client di test MQTT in finestre separate per osservare più facilmente l'interazione con Device Shadows.

1. 

**Iscrizione agli argomenti Shadow riservati MQTT**

   È possibile utilizzare il client di test MQTT per inserire i nomi degli argomenti riservati MQTT di Device Shadow e sottoscriverli per ricevere gli aggiornamenti durante l'esecuzione dell’app di esempio `shadow.py`. Per effettuare la sottoscrizione agli argomenti:

   1. Nel **client di test MQTT** nella **console AWS IoT **, scegli **Subscribe to a topic (Sottoscrizione a un argomento)**.

   1.  Nella sezione **Filtro argomento**, inserisci: ***thingname*\$1aws/things/** /shadow/update/ \$1. Qui, `thingname` è il nome della risorsa dell’oggetto creata in precedenza (ad esempio, `My_light_bulb`).

   1. Mantieni i valori predefiniti per le impostazioni di configurazione aggiuntive, quindi scegli **Subscribe (Effettua sottoscrizione)**.

   Utilizzando il carattere jolly **\$1** nella sottoscrizione dell'argomento, è possibile sottoscrivere più argomenti MQTT contemporaneamente e osservare tutti i messaggi che vengono scambiati tra il dispositivo e il suo Shadow in un'unica finestra. Per ulteriori informazioni sui caratteri jolly e sul loro utilizzo, consulta [Argomenti MQTT](topics.md).

1. 

**Esegui il programma di esempio `shadow.py` e osserva i messaggi**

   Nella finestra della riga di comando di Raspberry Pi, se hai disconnesso il programma, esegui di nuovo l'app di esempio e guarda i messaggi nel **client di test MQTT** nella **console AWS IoT **.

   1. Esegui il seguente comando per riavviare il programma di esempio. Sostituisci *your-iot-thing-name* e *your-iot-endpoint* con i nomi dell' AWS IoT oggetto che hai creato in precedenza (ad esempio,`My_light_bulb`) e l'endpoint per interagire con il dispositivo. 

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
      python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name
      ```

      L’app di esempio `shadow.py` viene eseguita e recupera lo stato shadow corrente. Se hai eliminato lo shadow o cancellato gli stati correnti, il programma imposta il valore corrente su `off` e richiede di inserire un valore `desired`.

      ```
      Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'...
      Connected!
      Subscribing to Delta events...
      Subscribing to Update responses...
      Subscribing to Get responses...
      Requesting current shadow state...
      Launching thread to read user input...
      Finished getting initial shadow state.
      Shadow document lacks 'color' property. Setting defaults...
      Changed local shadow value to 'off'.
      Updating reported shadow value to 'off'...
      Update request published.
      Finished updating reported shadow value to 'off'...
      Enter desired value:
      ```

      D'altra parte, se il programma era in esecuzione e lo hai riavviato, vedrai il valore di colore più recente riportato nel terminale. **Nel client di test MQTT, vedrai un aggiornamento agli argomenti **\$1aws/things/ /shadow/get e *thingname* \$1aws/things/**/. *thingname* shadow/get/accepted**

      Supponiamo che l'ultimo colore riportato sia `green`. Di seguito viene **mostrato *thingname*** il contenuto del file JSON \$1aws/things/. shadow/get/accepted

      ```
      {
      "state": {
        "desired": {
          "welcome": "aws-iot",
          "color": "green"
        },
        "reported": {
          "welcome": "aws-iot",
          "color": "green"
        }
      },
      "metadata": {
        "desired": {
          "welcome": {
            "timestamp": 1620156892
          },
          "color": {
            "timestamp": 1620161643
          }
        },
        "reported": {
          "welcome": {
            "timestamp": 1620156892
          },
          "color": {
            "timestamp": 1620161643
          }
        }
      },
      "version": 10,
      "timestamp": 1620173908
      }
      ```

   1. Inserisci un valore `desired` nel terminale, come `yellow`. L’app di esempio `shadow.py` risponde e visualizza i seguenti messaggi nel terminale che mostrano la modifica nel valore `reported` a `yellow`.

      ```
      Enter desired value:
      yellow
      Changed local shadow value to 'yellow'.
      Updating reported shadow value to 'yellow'...
      Update request published.
      Finished updating reported shadow value to 'yellow'.
      ```

      In **MQTT test client** (Client MQTT di test) nella **console AWS IoT **, in **Subscriptions** (Sottoscrizioni), viene visualizzato che i seguenti argomenti hanno ricevuto un messaggio:
      + **\$1aws/things/ /shadow/update: mostra che entrambi i valori cambiano in base al *thingname* colore**. `desired` `updated` `yellow`
      + ***thingname*\$1aws/things/ shadow/update/accepted**: mostra i valori correnti degli stati and e e i relativi metadati e informazioni sulla versione. `desired` `reported`
      + ***thingname*\$1aws/things/ shadow/update/documents**: mostra i valori precedenti e correnti degli stati and e e i relativi metadati e informazioni sulla versione. `desired` `reported`

      Poiché il documento **\$1aws/things/*thingname*/**contiene shadow/update/documents anche informazioni contenute negli altri due argomenti, possiamo esaminarlo per vedere le informazioni sullo stato. Lo stato precedente mostra il valore riportato impostato su `green`, i metadati e le informazioni sulla versione e lo stato corrente che mostra il valore riportato aggiornato a `yellow`.

      ```
      {
      "previous": {
        "state": {
          "desired": {
            "welcome": "aws-iot",
            "color": "green"
          },
          "reported": {
            "welcome": "aws-iot",
            "color": "green"
          }
        },
        "metadata": {
          "desired": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297898
            }
          },
          "reported": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297898
            }
          }
        },
        "version": 10
      },
      "current": {
        "state": {
          "desired": {
            "welcome": "aws-iot",
            "color": "yellow"
          },
          "reported": {
            "welcome": "aws-iot",
            "color": "yellow"
          }
        },
        "metadata": {
          "desired": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297904
            }
          },
          "reported": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297904
            }
          }
        },
        "version": 11
      },
      "timestamp": 1617297904
      }
      ```

   1. Ora, se si inserisce un altro valore `desired`, vengono visualizzate ulteriori modifiche ai valori `reported` e agli aggiornamenti dei messaggi ricevuti da questi argomenti. Anche il numero di versione aumenta di 1. Ad esempio, se si inserisce il valore `green`, lo stato precedente riporta il valore `yellow` e lo stato corrente riporta il valore `green`.

1. 

**Modifica del documento Shadow per osservare gli eventi delta**

   Per osservare le modifiche apportate all'argomento delta, modifica il documento Shadow nella console AWS IoT . Ad esempio, è possibile modificare il valore `desired` per il colore `red`. Per fare ciò, nella AWS IoT console, scegli **Modifica**, quindi imposta il `desired` valore su rosso nel file JSON, mantenendo il valore impostato su. `reported` `green` Prima di salvare la modifica, tieni il terminale aperto poiché vedrai il messaggio delta riportato nel terminale.

   ```
   {
   "desired": {
     "welcome": "aws-iot",
     "color": "red"
   },
   "reported": {
     "welcome": "aws-iot",
     "color": "green"
   }
   }
   ```

   L’app di esempio `shadow.py` risponde a questa modifica e visualizza i messaggi nel terminale che indica il delta. Nel client di test MQTT, gli argomenti `update` avranno ricevuto un messaggio che mostra le modifiche apportate ai valori `desired` e `reported`.

   Vedi anche che l'argomento ***thingname*\$1aws/things/**/ha ricevuto un messaggio. shadow/update/delta Per visualizzare il messaggio, scegli questo argomento, elencato in **Subscriptions (Sottoscrizioni)**.

   ```
   {
   "version": 13,
   "timestamp": 1617318480,
   "state": {
     "color": "red"
   },
   "metadata": {
     "color": {
       "timestamp": 1617318480
     }
   }
   }
   ```

## Fase 3: Risoluzione degli errori con le interazioni Device Shadow
<a name="shadow-observe-messages-troubleshoot"></a>

Quando esegui l'app di esempio Shadow, potresti riscontrare problemi con l'osservazione delle interazioni con il servizio Device Shadow. 

Se il programma viene eseguito correttamente e richiede di inserire un valore `desired`, si dovrebbe essere in grado di osservare le interazioni Device Shadow utilizzando il documento Shadow e il client di test MQTT come descritto in precedenza. Tuttavia, se non riesci a visualizzare le interazioni, ecco alcune cose da controllare:
+ 

**Controlla il nome dell'oggetto e la sua ombra nella console AWS IoT**  
Se i messaggi non vengono visualizzati nel documento Shadow, controlla il comando e assicurati che corrisponda al nome dell’oggetto nella **console AWS IoT **. Puoi anche verificare se hai una shadow classica scegliendo la tua risorsa dell’oggetto e quindi scegliendo **Shadows**. Questo tutorial si concentra principalmente sulle interazioni con la shadow classica.

   È inoltre possibile confermare che il dispositivo utilizzato è connesso a Internet. Nella **console AWS IoT **, scegli l'oggetto che hai creato in precedenza, quindi scegli **Interact (Interagisci)**. Nella pagina dei dettagli dell’oggetto, dovresti visualizzare un messaggio con scritto: `This thing already appears to be connected.` 
+ 

**Controlla gli argomenti riservati MQTT che hai sottoscritto**  
Se i messaggi non vengono visualizzati nel client di test MQTT, verifica se gli argomenti sottoscritti sono formattati correttamente. Gli argomenti MQTT Device Shadow hanno il formato **\$1aws/things/ *thingname* /shadow/** e possono averlo `update` o `delete` seguirlo a seconda delle azioni che si desidera eseguire sull'shadow. `get` **Questo tutorial utilizza l'argomento **\$1aws/things/ *thingname* /shadow/ \$1**, quindi assicurati di averlo inserito correttamente quando ti iscrivi all'argomento nella sezione Filtro argomento del client di test.**

  Mentre inserisci il nome dell'argomento, assicurati che sia lo stesso del nome dell'*thingname*oggetto che hai creato in precedenza. AWS IoT È inoltre possibile sottoscrivere altri argomenti MQTT per verificare se un aggiornamento è stato eseguito correttamente. Ad esempio, puoi iscriverti all'argomento ***thingname*\$1aws/things/** per ricevere un messaggio ogni volta che una richiesta shadow/update/rejected di aggiornamento fallisce, in modo da poter risolvere i problemi di connessione. Per ulteriori informazioni sugli argomenti riservati, consulta [Argomenti copie shadow](reserved-topics.md#reserved-topics-shadow) e [Argomenti MQTT di Device Shadow](device-shadow-mqtt.md).

## Fase 4: Esamina i risultati e i passaggi successivi
<a name="sample-shadow-review"></a>

**In questo tutorial, hai appreso come:**
+ Utilizzare l'app di esempio `shadow.py` per specificare gli stati desiderati e aggiornare lo stato corrente di shadow.
+ Modificare il documento Shadow per osservare gli eventi delta e come l'app di esempio `shadow.py` risponde ad essi.
+ Utilizzare il client di test MQTT per effettuare la sottoscrizione ad argomenti shadow e osservare gli aggiornamenti quando si esegue il programma di esempio.

**Fasi successive**  
Puoi iscriverti ad altri argomenti riservati MQTT per osservare gli aggiornamenti dell'applicazione shadow. Ad esempio, se ti iscrivi solo all'argomento ***thingname*\$1aws/things/ shadow/update/accepted**, quando un aggiornamento viene eseguito correttamente, vedrai solo le informazioni sullo stato corrente.

È inoltre possibile sottoscrivere altri argomenti shadow per eseguire il debug dei problemi o per ottenere ulteriori informazioni sulle interazioni Device Shadow e anche eseguire il debug di eventuali problemi con le interazioni Device Shadow. Per ulteriori informazioni, consultare [Argomenti copie shadow](reserved-topics.md#reserved-topics-shadow) e [Argomenti MQTT di Device Shadow](device-shadow-mqtt.md).

Puoi anche scegliere di estendere la tua applicazione utilizzando shadow denominati o utilizzando hardware aggiuntivo collegato al Raspberry Pi LEDs e osservare le modifiche al loro stato utilizzando i messaggi inviati dal terminale.

Per ulteriori informazioni sul servizio Device Shadow e sull'utilizzo del servizio in dispositivi, app e servizi, consulta [AWS IoT Servizio Device Shadow](iot-device-shadows.md), [Utilizzo delle copie shadow nei dispositivi](device-shadow-comms-device.md) e [Utilizzo delle copie shadow in app e servizi](device-shadow-comms-app.md).