

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

# Tutorial: Invio di una notifica Amazon SNS
<a name="iot-sns-rule"></a>

Questo tutorial dimostra come creare una AWS IoT regola che invii i dati dei messaggi MQTT a un argomento di Amazon SNS in modo che possano essere inviati come messaggio di testo SMS. 

In questo tutorial potrai creare una regola per l'invio dei dati dei messaggi da un sensore meteo a tutti i sottoscrittori di un argomento Amazon SNS, ogni volta che la temperatura supera il valore impostato nella regola. La regola rileva quando la temperatura segnalata supera il valore impostato dalla regola e quindi crea un nuovo payload del messaggio che include solo l'ID del dispositivo, la temperatura segnalata e il limite di temperatura superato. La regola invia il nuovo payload del messaggio come documento JSON a un argomento SNS, che notifica a tutti gli abbonati l'argomento SNS.

**Cosa imparerai in questo tutorial:**
+ Come creare e testare una notifica Amazon SNS
+ Come richiamare una notifica Amazon SNS da una regola AWS IoT 
+ Come utilizzare semplici query SQL e funzioni in un'istruzione di query della regola
+ Come utilizzare il client MQTT per testare una regola AWS IoT 

Questo tutorial dura circa 30 minuti.

**Topics**
+ [Fase 1: creare un argomento Amazon SNS che invii un messaggio di testo SMS](#iot-sns-rule-create-sns-topic)
+ [Passaggio 2: crea una AWS IoT regola per inviare il messaggio di testo](#iot-sns-rule-create-rule)
+ [Fase 3: Verifica la AWS IoT regola e la notifica di Amazon SNS](#iot-sns-rule-test-rule)
+ [Fase 4: Esamina i risultati e i passaggi successivi](#iot-sns-rule-review-results)

**Prima di iniziare questo tutorial, assicurati di disporre di:**
+ 

**[Configurare Account AWS](setting-up.md)**  
Avrai bisogno della tua Account AWS AWS IoT console per completare questo tutorial.
+ 

**Aver rivisto [Visualizza i messaggi MQTT con il AWS IoT client MQTT](view-mqtt-messages.md)**  
Assicurati di poter usare il client MQTT per sottoscrivere e pubblicare un argomento. Utilizzerai il client MQTT per testare la nuova regola in questa procedura.
+ 

**Aver rivisto [Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html)**  
Se non hai mai utilizzato Amazon SNS, consulta [Configurazione degli accessi per Amazon SNS](https://docs.aws.amazon.com//sns/latest/dg/sns-setting-up.html). Se hai già completato altri AWS IoT tutorial, Account AWS dovresti già essere configurato correttamente.

## Fase 1: creare un argomento Amazon SNS che invii un messaggio di testo SMS
<a name="iot-sns-rule-create-sns-topic"></a>

Questa procedura spiega come creare l'argomento Amazon SNS a cui il sensore meteo può inviare i dati dei messaggi. L'argomento Amazon SNS notificherà quindi a tutti i suoi abbonati tramite un messaggio di testo SMS il limite di temperatura superato.

**Per creare un argomento Amazon SNS per l'invio di un SMS di testo**

1. **Creazione di un argomento Amazon SNS.**

   1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com//sns/home).

   1. Nel pannello di navigazione a sinistra, selezionare **Topics (Argomenti)**.

   1. Nella pagina **Topics (Argomenti)**, seleziona **Create topic (Crea argomento)**.

   1. In **Details (Dettagli)**, scegli il tipo **standard**. Per impostazione predefinita, la console crea un argomento FIFO.

   1. In **Name (Nome)**, inserisci il nome dell'argomento SNS. Per questo tutorial, digita **high\$1temp\$1notice**.

   1. Scorri fino alla parte inferiore della pagina e scegli **Crea argomento**.

      La console apre la pagina **Details (Dettagli)** del nuovo argomento.

1. **Creazione di una sottoscrizione Amazon SNS.**
**Nota**  
Il numero di telefono utilizzato in questo abbonamento potrebbe comportare costi di messaggistica di testo per i messaggi inviati in questo tutorial.

   1. Nella pagina dei dettagli dell'argomento **high\$1temp\$1notice**, scegli **Create subscription (Crea sottoscrizione)**.

   1. In **Create subscription (Crea sottoscrizione)**, nella sezione **Details (Dettagli)** nell’elenco **Protocol (Protocollo)**, scegli **SMS**.

   1. In **Endpoint**, inserisci il numero di un telefono che può ricevere messaggi di testo. Assicurati di inserirlo in modo che inizi con un `+`, includa il paese e il prefisso locale e non includa altri caratteri di punteggiatura.

   1. Scegli **Create Subscription** (Crea sottoscrizione).

1. **Testa la notifica di Amazon SNS.**

   1. Nella [console Amazon SNS](https://console.aws.amazon.com//sns/home), nel pannello di navigazione a sinistra, scegli **Topics (Argomenti)**.

   1. Per aprire la pagina dei dettagli dell'argomento, in **Topics (Argomenti)**, nell'elenco degli argomenti, seleziona **high\$1temp\$1notice**.

   1. Per aprire la pagina **Publish message to topic (Pubblica il messaggio nell'argomento)**, nella pagina dei dettagli **high\$1temp\$1notice**, scegli **Publish message (Pubblica messaggio)**.

   1. In **Publish message to topic (Pubblica il messaggio nell'argomento)**, nella sezione ** Message body (Corpo del messaggio)**, in **Message body to send to the endpoint (Corpo del messaggio da inviare all'endpoint)**, inserisci un breve messaggio.

   1. Scorri fino alla parte inferiore della pagina e scegli **Publish message (Pubblica messaggio)**.

   1. Sul telefono con il numero che hai usato in precedenza durante la creazione della sottoscrizione, conferma che il messaggio è stato ricevuto.

   Se non hai ricevuto il messaggio di prova, controlla due volte il numero di telefono e le impostazioni del tuo cellulare.

   Assicurati di poter pubblicare i messaggi di prova dalla [Console Amazon SNS](https://console.aws.amazon.com//sns/home) prima di continuare il tutorial.

## Passaggio 2: crea una AWS IoT regola per inviare il messaggio di testo
<a name="iot-sns-rule-create-rule"></a>

La AWS IoT regola che creerai in questo tutorial riguarda gli argomenti `device/device_id/data` MQTT dove si `device_id` trova l'ID del dispositivo che ha inviato il messaggio. Questi argomenti sono descritti in un filtro argomento come `device/+/data`, dove `+` è un carattere jolly che corrisponde a qualsiasi stringa tra i due caratteri di barra in avanti. Questa regola verifica anche il valore del campo `temperature` nel payload del messaggio.

Quando la regola riceve un messaggio da un argomento corrispondente, prende il `device_id` dal nome dell'argomento, il valore `temperature` dal payload del messaggio, aggiunge un valore costante per il limite che sta testando e invia questi valori come documento JSON a un argomento di notifica Amazon SNS. 

 Ad esempio, un messaggio MQTT dal dispositivo sensore meteo numero 32 utilizza l’argomento `device/32/data` e ha un payload del messaggio simile al seguente: 

```
{
  "temperature": 38,
  "humidity": 80,
  "barometer": 1013,
  "wind": {
    "velocity": 22,
    "bearing": 255
  }
}
```

L'istruzione di query regola della regola accetta il valore `temperature` dal payload del messaggio, il valore `device_id` dal nome dell'argomento e aggiunge il valore costante `max_temperature` per inviare un payload del messaggio simile a questo all'argomento Amazon SNS: 

```
{
  "device_id": "32",
  "reported_temperature": 38,
  "max_temperature": 30
}
```

**Per creare una AWS IoT regola per rilevare un valore di temperatura superiore al limite e creare i dati da inviare all'argomento Amazon SNS**

1. Apri [l'hub **Rules** della console. AWS IoT](https://console.aws.amazon.com//iot/home#/rulehub)

1. Se è la prima regola, scegli **Create (Crea)** oppure **Create a rule (Crea una regola)**.

1. In **Create a rule (Crea una regola)**:

   1. In **Nome**, inserisci **temp\$1limit\$1notify**.

      Ricorda che il nome di una regola deve essere univoco all'interno della tua regione Account AWS e non può avere spazi. Abbiamo usato un carattere di sottolineatura in questo nome per separare le parole nel nome della regola. 

   1. In **Description (Descrizione)**, descrivi la regola.

      Una descrizione significativa ti aiuta a ricordare cosa fa questa regola e perché l'hai creata. La descrizione può essere lunga quanto necessario, quindi sii il più dettagliato possibile. 

1. In **Rule query statement (Istruzione query regola)** di **Create a rule (Crea una regola)**:

   1.  In **Using SQL version (Uso della versione SQL)**, seleziona **23/03/2016**. 

   1. Nella casella di modifica **Rule query statement (Istruzione query regola)**, inserisci l'istruzione: 

      ```
      SELECT topic(2) as device_id, 
          temperature as reported_temperature, 
          30 as max_temperature 
        FROM 'device/+/data' 
        WHERE temperature > 30
      ```

      Questa istruzione:
      + Ascolta i messaggi MQTT con un argomento che corrisponde al filtro dell’argomento `device/+/data` e che hanno un valore `temperature` maggiore di 30. 
      + Seleziona il secondo elemento dalla stringa dell'argomento e lo assegna al campo `device_id`.
      + Seleziona il valore del campo `temperature` dal payload del messaggio e lo assegna al campo `reported_temperature`. 
      + Crea un valore costante `30` per rappresentare il valore limite e lo assegna al campo `max_temperature`. 

1. Per aprire l'elenco delle azioni della regola per questa regola, in **Set one or more actions (Imposta una o più azioni)**, scegli **Add action (Aggiungi operazione)**.

1. In **Select an action (Seleziona un’operazione)**, scegli **Send a message as an SNS push notification (Invia un messaggio come notifica push SNS)**.

1. Per aprire la pagina di configurazione dell'operazione selezionata, nella parte inferiore dell'elenco delle operazioni, scegli **Configure action (Configura operazione)**. 

1. In **Configure action (Configura operazione)**:

   1. In **SNS target (Obiettivo SNS)**, scegli **Select (Seleziona)**, trova l'argomento SNS denominato **high\$1temp\$1notice** e scegli **Select (Seleziona)**.

   1. In **Message format (Formato messaggio)**, scegli **RAW**.

   1. In **Scegli o crea un ruolo a cui concedere AWS IoT l'accesso per eseguire questa azione**, scegli **Crea ruolo**.

   1. In **Create a new role (Crea un nuovo ruolo)**, in **Name (Nome)**, inserisci un nome univoco per il nuovo ruolo. Ai fini di questo tutorial, utilizza **sns\$1rule\$1role**.

   1. Scegli **Crea ruolo**.

   Se si ripete questo tutorial o si riutilizza un ruolo esistente, scegli **Update role (Aggiorna ruolo)** prima di continuare. In questo modo il documento della policy del ruolo viene aggiornato in modo che funzioni con la destinazione SNS.

1. Scegli **Add action (Aggiungi operazione)** e torna alla pagina **Create a rule (Crea una regola)**.

   Nel titolo della nuova operazione, sotto **Send a message as an SNS push notification (Invia un messaggio come notifica push SNS)**, è possibile visualizzare l'argomento SNS che verrà chiamato dalla regola. 

   Questa è l'unica operazione della regola che aggiungerai a questa regola.

1. Per creare la regola e completare questo passaggio, in **Create a rule (Crea una regola)**, scorri verso il basso e scegli **Create a rule (Crea una regola)**.

## Fase 3: Verifica la AWS IoT regola e la notifica di Amazon SNS
<a name="iot-sns-rule-test-rule"></a>

Per testare la nuova regola, utilizza il client MQTT per pubblicare e sottoscrivere i messaggi MQTT utilizzati da questa regola.

Apri il [Client MQTT nella console AWS IoT](https://console.aws.amazon.com//iot/home#/test) in una nuova finestra. In questo modo è possibile modificare la regola senza perdere la configurazione del client MQTT. Se abbandoni il client MQTT per andare su un'altra pagina della console, non conserverà nessuna sottoscrizione o registri di messaggi.

**Utilizzare il client MQTT per testare la regola**

1. Nel [Client MQTT nella console AWS IoT](https://console.aws.amazon.com//iot/home#/test), effettua la sottoscrizione agli argomenti di input, in questo caso, `device/+/data`.

   1. Nel client MQTT, sotto **Subscriptions (Sottoscrizioni)** scegli **Subscribe to a topic (Effettua la sottoscrizione a un argomento)**.

   1. In **Subscription topic (Argomento sottoscrizione)**, inserisci l'argomento del filtro dell’argomento di input, **device/\$1/data**.

   1. Lascia gli altri campi ai valori predefiniti.

   1. Scegli **Subscribe to topic (Effettua sottoscrizione all'argomento)**.

      Nella colonna **Subscriptions (Sottoscrizioni)**, sotto **Publish to a topic (Pubblica un argomento)**, **device/\$1/data** viene visualizzato. 

1. Pubblicazione di un messaggio nell'argomento di input con un ID dispositivo specifico, **device/32/data**. Non è possibile pubblicare su argomenti MQTT che contengono caratteri jolly.

   1. Nel client MQTT, sotto **Subscriptions (Sottoscrizioni)** scegli **Publish to topic (Pubblica in un argomento)**.

   1. Nel campo **Publish (Pubblica)**, inserisci il nome dell'argomento di input, **device/32/data**.

   1. Copia i dati di esempio mostrati qui e, nella casella di modifica sotto il nome dell'argomento, incolla i dati di esempio.

      ```
      {
        "temperature": 38,
        "humidity": 80,
        "barometer": 1013,
        "wind": {
          "velocity": 22,
          "bearing": 255
        }
      }
      ```

   1. Scegli **Publish to topic (Pubblica in un argomento)** per pubblicare il messaggio MQTT.

1. Conferma che il messaggio di testo è stato inviato.

   1. Nel client MQTT, sotto **Subscriptions (Sottoscrizioni)**, accanto all'argomento a cui hai effettuato la sottoscrizione in precedenza è presente un punto verde.

      I punti verdi indicano che uno o più nuovi messaggi sono stati ricevuti dall'ultima volta che li hai visualizzati.

   1. Sotto **Subscriptions (Sottoscrizioni)**, scegli **device/\$1/data (dispositivo/\$1/dati)** per verificare che il payload del messaggio corrisponda a quello che hai appena pubblicato e assomigli a questo:

      ```
      {
        "temperature": 38,
        "humidity": 80,
        "barometer": 1013,
        "wind": {
          "velocity": 22,
          "bearing": 255
        }
      }
      ```

   1. Controlla il telefono che hai usato per effettuare la sottoscrizione all'argomento SNS e conferma che il contenuto del payload del messaggio sia simile al seguente:

      ```
      {"device_id":"32","reported_temperature":38,"max_temperature":30}
      ```

      Nota che il valore `device_id` è una stringa tra virgolette e il valore `temperature` è numerico. Questo perché la funzione [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic) ha estratto la stringa dal nome dell'argomento del messaggio di input mentre il valore `temperature` utilizza il valore numerico dal payload del messaggio di input.

      Se desideri rendere il valore `device_id` un valore numerico, sostituisci `topic(2)` nell'istruzione query della regola con:

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Nota che la trasformazione del valore `topic(2)` in un valore numerico `DECIMAL` funzionerà solo se quella parte dell'argomento contiene solo caratteri numerici.

1. Prova a inviare un messaggio MQTT in cui la temperatura non supera il limite.

   1. Nel client MQTT, sotto **Subscriptions (Sottoscrizioni)**, scegli **Publish to topic (Pubblica in un argomento)**.

   1. Nel campo **Publish (Pubblica)**, inserisci il nome dell'argomento di input, **device/33/data**.

   1. Copia i dati di esempio mostrati qui e, nella casella di modifica sotto il nome dell'argomento, incolla i dati di esempio.

      ```
      {
        "temperature": 28,
        "humidity": 80,
        "barometer": 1013,
        "wind": {
          "velocity": 22,
          "bearing": 255
        }
      }
      ```

   1. Per inviare il messaggio MQTT, scegli **Publish to topic (Pubblica in un argomento)**.

   Dovrebbe essere visualizzato il messaggio inviato nella sottoscrizione **device/\$1/data**. Tuttavia, poiché il valore della temperatura è inferiore alla temperatura massima nell'istruzione di query della regola, non si dovrebbe ricevere un messaggio di testo.

   Se il comportamento non viene visualizzato correttamente, controlla i suggerimenti per la risoluzione dei problemi.

### Risoluzione dei problemi della regola di messaggi SNS
<a name="iot-sns-rule-trouble"></a>

Ecco alcune cose da controllare nel caso in cui non stai vedendo i risultati che ti aspetti.
+ 

**Hai un banner di errore**  
Se viene visualizzato un errore quando è stato pubblicato il messaggio di input, correggilo prima. I seguenti passaggi potrebbero aiutarti a correggere l'errore.
+ 

**Il messaggio di input non viene visualizzato nel client MQTT**  
Ogni volta che pubblichi il tuo messaggio di input nell’argomento `device/22/data`, tale messaggio dovrebbe essere visualizzato nel client MQTT, se hai effettuato la sottoscrizione al filtro dell’argomento `device/+/data` come descritto nella procedura.

**Controlli**
  + 

**Controlla il filtro degli argomenti a cui hai effettuato la sottoscrizione**  
Se hai effettuato la sottoscrizione all'argomento del messaggio di input come descritto nella procedura, visualizzerai una copia del messaggio di input ogni volta che lo pubblichi.

    Se il messaggio non viene visualizzato, controlla il nome dell'argomento sottoscritto e confrontalo con l'argomento in cui è stato pubblicato. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole e l'argomento a cui è stato sottoscritto deve essere identico all'argomento in cui hai pubblicato il payload dei messaggi.
  + 

**Controlla la funzione di pubblicazione dei messaggi**  
Nel client MQTT, sotto **Subscriptions (Sottoscrizioni)**, scegli **device/\$1/data (dispositivo/\$1/dati)**, controlla l'argomento del messaggio di pubblicazione e quindi scegli **Publish to topic (Pubblica in un argomento)**. Dovresti vedere il payload del messaggio dalla casella di modifica sotto l'argomento visualizzato nell'elenco dei messaggi. 
+ 

**Se non ricevi un messaggio SMS**  
Affinché la regola funzioni, deve disporre della policy corretta che la autorizzi a ricevere un messaggio e inviare una notifica SNS e deve ricevere il messaggio.

**Controlli**
  + 

**Controlla il Regione AWS tuo client MQTT e la regola che hai creato**  
La console in cui si esegue il client MQTT deve trovarsi nella stessa regione AWS della regola creata.
  + 

**Verifica che il valore della temperatura nel payload del messaggio superi la soglia di prova**  
Se il valore della temperatura è minore o uguale a 30, come definito nell'istruzione query della regola, la regola non eseguirà alcuna delle operazioni.
  + 

**Controlla l'argomento del messaggio di input nell'istruzione query della regola**  
Affinché la regola funzioni, è necessario che venga visualizzato un messaggio con il nome dell'argomento corrispondente al filtro dell’argomento nella clausola FROM dell'istruzione query della regola.

    Controlla l'ortografia del filtro argomento nell'istruzione query regola con quella dell'argomento nel client MQTT. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole e l'argomento del messaggio deve corrispondere al filtro argomento nell'istruzione query della regola.
  + 

**Controllare il contenuto del payload del messaggio di input**  
Affinché la regola funzioni, è necessario trovare il campo dati nel payload del messaggio dichiarato nell'istruzione SELECT.

    Controlla l'ortografia del campo `temperature` nell'istruzione query della regola con quella del payload del messaggio nel client MQTT. I nomi dei campi fanno distinzione tra maiuscole e minuscole e il campo `temperature`nell'istruzione query della regola deve essere identico a quello del campo `temperature` nel payload del messaggio.

    Assicurati che il documento JSON nel payload del messaggio sia formattato correttamente. Se il JSON presenta errori, come una virgola mancante, la regola non sarà in grado di leggerlo.
  + 

**Controlla l'argomento del messaggio ripubblicato nell'operazione della regola**  
L'argomento a cui l'operazione Ripubblica regola pubblica il nuovo messaggio deve corrispondere all'argomento a cui è stato sottoscritto nel client MQTT.

    Apri la regola creata nella console e controlla l'argomento in cui l'operazione della regola ripubblicherà il messaggio.
  + 

**Controlla il ruolo utilizzato dalla regola**  
L'operazione della regola deve disporre dell'autorizzazione per ricevere l'argomento originale e pubblicare il nuovo argomento. 

    Le policy che autorizzano la regola a ricevere i dati dei messaggi e a ripubblicarli sono specifiche degli argomenti utilizzati. Se si modifica l'argomento utilizzato per ripubblicare i dati del messaggio, è necessario aggiornare il ruolo dell'operazione della regola per aggiornare la policy in modo che corrisponda all'argomento corrente.

    Se si sospetta che questo sia il problema, modificare l'operazione Ripubblica regola e creare un nuovo ruolo. I nuovi ruoli creati dall'operazione della regola ricevono le autorizzazioni necessarie per eseguire queste operazioni.

## Fase 4: Esamina i risultati e i passaggi successivi
<a name="iot-sns-rule-review-results"></a>

**In questo tutorial:**
+ Hai creato e testato un argomento di notifica e una sottoscrizione Amazon SNS.
+ È stata utilizzata una query SQL semplice che funziona in un'istruzione di query della regola per creare un nuovo messaggio per la notifica.
+ Hai creato una AWS IoT regola per inviare una notifica Amazon SNS che utilizza il tuo payload di messaggi personalizzato.
+ Hai usato il client MQTT per testare la tua regola. AWS IoT 

**Fasi successive**  
Dopo aver inviato alcuni messaggi di testo con questa regola, prova a sperimentarla per vedere come la modifica di alcuni aspetti del tutorial influisce sul messaggio e quando viene inviato. Ecco alcune idee per iniziare.
+ *device\$1id*Modificate l'argomento del messaggio di input e osservate l'effetto nel contenuto del messaggio di testo.
+ Modifica i campi selezionati nell'istruzione query della regola e osserva l'effetto nel contenuto del messaggio di testo.
+ Modifica il test nell'istruzione query della regola per verificare una temperatura minima anziché una temperatura massima. Ricordati di cambiare il nome di `max_temperature`\$1
+ Aggiungi un'operazione della regola di ripubblicazione per inviare un messaggio MQTT quando viene inviata una notifica SNS.
+ Prova il prossimo tutorial di questa serie e scopri come [Tutorial: Archiviazione dei dati del dispositivo in una tabella DynamoDB](iot-ddb-rule.md).