

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: monitoraggio dell'umidità del suolo con AWS IoT Raspberry Pi
<a name="iot-moisture-tutorial"></a>

Questo tutorial mostra come utilizzare un [Raspberry Pi](https://www.raspberrypi.org/), un sensore di umidità e come AWS IoT monitorare il livello di umidità del suolo per una pianta da appartamento o un giardino. Il Raspberry Pi esegue un codice che legge il livello di umidità e la temperatura dal sensore e quindi invia i dati a. AWS IoT Crei una regola AWS IoT che invia un'e-mail a un indirizzo abbonato a un argomento di Amazon SNS quando il livello di umidità scende al di sotto di una soglia.

**Nota**  
Questo tutorial potrebbe non essere aggiornato. Alcuni riferimenti potrebbero essere stati sostituiti dalla pubblicazione di questo argomento.

**Contents**
+ [Prerequisiti](#iot-moisture-prereqs)
+ [Configurazione AWS IoT](iot-moisture-setup.md)
  + [Fase 1: Creare la AWS IoT politica](iot-moisture-policy.md)
  + [Fase 2: Creare l' AWS IoT oggetto, il certificato e la chiave privata](iot-moisture-create-thing.md)
  + [Fase 3: Creazione e sottoscrizione a un argomento Amazon SNS](iot-moisture-create-sns-topic.md)
  + [Passaggio 4: Crea una AWS IoT regola per inviare un'email](iot-moisture-create-rule.md)
+ [Configurazione del Raspberry Pi e del sensore di umidità](iot-moisture-raspi-setup.md)

## Prerequisiti
<a name="iot-moisture-prereqs"></a>

Per completare questo tutorial, è necessario quanto segue:
+ Un. Account AWS
+ Un utente IAM con autorizzazioni da amministratore.
+ Un computer di sviluppo che esegue Windows, macOS, Linux o Unix per accedere alla [console AWS IoT](https://console.aws.amazon.com/iot/home).
+ Un [Raspberry Pi 3B o 4B](https://www.raspberrypi.com/products/) con l'ultimo sistema operativo [Raspberry Pi](https://www.raspberrypi.com/software/operating-systems/). Per le istruzioni di installazione, consulta [Installazione di un sistema operativo](https://www.raspberrypi.com/documentation/computers/getting-started.html#installing-the-operating-system) sul sito Web di Raspberry Pi. 
+ Un monitor, una tastiera, un mouse e una rete Wi-Fi o una connessione Ethernet per il Raspberry Pi.
+ Un sensore di umidità compatibile con Raspberry Pi. Il sensore utilizzato in questo tutorial è un [sensore di umidità capacitivo Adafruit STEMMA I2C](https://www.adafruit.com/product/4026) con [connettore femmina su un'estremità e JST a 4 pin all'estremità opposta](https://www.adafruit.com/product/3950). 

# Configurazione AWS IoT
<a name="iot-moisture-setup"></a>

Per completare questo tutorial, è necessario creare le seguenti risorse. Per connettere un dispositivo AWS IoT, crei un oggetto IoT, un certificato del dispositivo e una AWS IoT policy. 
+ Qualsiasi AWS IoT cosa.

  Un oggetto rappresenta un dispositivo fisico (in questo caso, il Raspberry Pi) e contiene metadati statici relativi al dispositivo. 
+ Un certificato del dispositivo.

  Tutti i dispositivi devono disporre di un certificato del dispositivo per connettersi a AWS IoT ed eseguire l'autenticazione.
+ Una AWS IoT politica.

  A ogni certificato del dispositivo sono associate una o più AWS IoT politiche. Queste politiche determinano a quali AWS IoT risorse può accedere il dispositivo. 
+ Un certificato CA AWS IoT principale.

  I dispositivi e gli altri client utilizzano un certificato CA AWS IoT principale per autenticare il AWS IoT server con cui comunicano. Per ulteriori informazioni, consulta [Autenticazione del server](server-authentication.md).
+ Una AWS IoT regola.

  Una regola contiene una query e una o più operazioni di regola. La query estrae i dati dai messaggi del dispositivo per determinare se i dati del messaggio devono essere elaborati. L'operazione della regola specifica cosa fare se i dati corrispondono alla query.
+ Un argomento Amazon SNS e una sottoscrizione di un argomento.

  La regola ascolta i dati di umidità dal Raspberry Pi. Se il valore è inferiore a una soglia, invia un messaggio all'argomento Amazon SNS. Amazon SNS invia tale messaggio a tutti gli indirizzi e-mail che hanno effettuato la sottoscrizione all'argomento.

 



# Fase 1: Creare la AWS IoT politica
<a name="iot-moisture-policy"></a>

Crea una AWS IoT policy che consenta al tuo Raspberry Pi di connettersi e inviare messaggi a AWS IoT.

1. Se nella [console AWS IoT](https://console.aws.amazon.com/iot) è presente un pulsante **Get started (Inizia)**, selezionarlo. In caso contrario, nel riquadro di navigazione del servizio espandere **Security** (Sicurezza), quindi selezionare **Policies** (Policy).

1. Se viene visualizzata la finestra di dialogo**You don’t have any policies yet (Non hai ancora policy)**, selezionare **Create a policy (Crea una policy)**. In caso contrario, scegliere **Create** (Crea).

1. Inserisci un nome per la AWS IoT politica (ad esempio,**MoistureSensorPolicy**).

1. Nella sezione **Add statements (Aggiungi istruzioni)**, sostituire la policy esistente con il seguente JSON. Sostituisci «*region*e» *account* con il tuo Account AWS numero Regione AWS e.  
****  

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

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

# Fase 2: Creare l' AWS IoT oggetto, il certificato e la chiave privata
<a name="iot-moisture-create-thing"></a>

Crea un elemento nel AWS IoT registro per rappresentare il tuo Raspberry Pi.

1. Nel riquadro di navigazione della [console AWS IoT](https://console.aws.amazon.com/iot/home) scegliere **Manage (Gestisci)**, quindi scegliere **Things (Oggetti)**.

1. Se è visibile la finestra di dialogo **You don’t have any things yet (Non hai ancora oggetti)**, selezionare **Register a thing (Registra un oggetto)**. In caso contrario, scegliere **Create** (Crea).

1. Nella pagina **Creazione di AWS IoT oggetti**, scegli **Crea una singola cosa**.

1. Nella pagina **Add your device to the device registry (Aggiungi il tuo dispositivo al registro dei dispositivi)**, immettere un nome per l'oggetto IoT, ad esempio **RaspberryPi**, quindi scegliere **Next (Avanti)**. Non puoi modificare il nome di un oggetto dopo averlo creato. Per cambiare il nome di un oggetto, devi creare un nuovo oggetto, dargli il nuovo nome e quindi eliminare il vecchio oggetto.

1. Nella pagina **Add a certificate for your thing (Aggiungi un certificato per l'oggetto)**, scegli **Create certificate (Crea certificato)**.

1. Scegliere i collegamenti **Download (Scarica)** per scaricare il certificato, la chiave privata e il certificato CA root.
**Importante**  
Questa è l'unico momento in cui è possibile scaricare il certificato e la chiave privata.

1. Scegli **Activate (Attiva)** per attivare il certificato. Il certificato deve essere attivo affinché un dispositivo possa connettersi a AWS IoT.

1. Scegliere **Attach a policy (Collega policy)**.

1. Per **Aggiungi una politica per il tuo oggetto**, scegli **MoistureSensorPolicy**, quindi scegli **Registra oggetto**.

# Fase 3: Creazione e sottoscrizione a un argomento Amazon SNS
<a name="iot-moisture-create-sns-topic"></a>

Creazione e sottoscrizione di un argomento Amazon SNS.

1. Dalla [console AWS SNS](https://console.aws.amazon.com/sns/home), nel riquadro di navigazione, scegli **Topics (Argomenti)** e quindi scegli **Create topic (Crea argomento)**.

1. Scegli Tipo come **Standard** e inserisci un nome per l'argomento (ad esempio,**MoistureSensorTopic**).

1. Immettere un nome visualizzato per l'argomento, ad esempio **Moisture Sensor Topic**. Questo è il nome visualizzato per l'argomento nella console Amazon SNS.

1. Scegli **Create topic** (Crea argomento).

1. Nella pagina dei dettagli dell'argomento Amazon SNS, scegli **Create Subscription (Crea sottoscrizione)**.

1. Per **Protocollo**, scegli **E-mail**.

1. Per **Endpoint**, immettere il proprio indirizzo e-mail.

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

1. Aprire il client e-mail e cercare un messaggio con l'oggetto **MoistureSensorTopic**. Aprire l'e-mail e selezionare il collegamento **Confirm subscription (Conferma sottoscrizione)**.
**Importante**  
Non riceverai avvisi e-mail da questo argomento Amazon SNS finché non confermi la sottoscrizione.

Dovresti ricevere un messaggio di posta elettronica con il testo che hai digitato.

# Passaggio 4: Crea una AWS IoT regola per inviare un'email
<a name="iot-moisture-create-rule"></a>

Una AWS IoT regola definisce una query e una o più azioni da eseguire quando si riceve un messaggio da un dispositivo. Il motore AWS IoT delle regole ascolta i messaggi inviati dai dispositivi e utilizza i dati contenuti nei messaggi per determinare se è necessario intraprendere un'azione. Per ulteriori informazioni, consulta [Regole per AWS IoT](iot-rules.md). 

In questo tutorial, il Raspberry Pi pubblica messaggi su `aws/things/RaspberryPi/shadow/update`. Si tratta di un argomento MQTT interno utilizzato dai dispositivi e dal servizio Thing Shadow. Il Raspberry Pi pubblica messaggi nel formato seguente:

```
{
    "reported": {
        "moisture" : moisture-reading,
        "temp" : temperature-reading
    }
}
```

È necessario creare una query che estrae i dati relativi a umidità e temperatura dal messaggio in entrata. È necessario inoltre creare un'azione Amazon SNS che acquisisce i dati e li invia agli iscritti dell'argomento se la lettura dell'umidità è inferiore a un valore di soglia.

**Creazione di una regola Amazon SNS.**

1. **Nella [AWS IoT console](https://console.aws.amazon.com/iot/home), scegli **Routing dei messaggi**, quindi scegli Regole.** Se viene visualizzata la finestra di dialogo**You don’t have any rules yet (Non hai ancora regole)**, selezionare **Create a rule (Crea una regola)**. Altrimenti, scegli **Crea regola**.

1. Nella pagina delle **proprietà della regola**, inserisci un **nome per la regola**, ad esempio**MoistureSensorRule**, e fornisci una breve **descrizione della regola**, ad esempio**Sends an alert when soil moisture level readings are too low**.

1. Scegliete **Avanti** e configurate l'istruzione SQL. Scegli la **versione SQL** come **23/03/2016** e inserisci la seguente AWS IoT istruzione di query SQL:

   ```
   SELECT * FROM '$aws/things/RaspberryPi/shadow/update/accepted' WHERE state.reported.moisture < 400
   ```

   Questa istruzione attiva l'operazione della regola quando la lettura `moisture` è inferiore a `400`.
**Nota**  
Potrebbe essere necessario utilizzare un valore diverso. Quando il codice è in esecuzione sul Raspberry Pi, è possibile visualizzare i valori ottenuti dal sensore toccando il sensore, immergendolo in acqua o posizionandolo in una fioriera. 

1. Scegli **Avanti** e allega le azioni delle regole. Per **l'azione 1**, scegli **Simple Notification Service**. La descrizione di questa azione della regola è **Invia un messaggio come notifica push SNS**.

1. **Per l'**argomento SNS**, scegli l'argomento in [Fase 3: Creazione e sottoscrizione a un argomento Amazon SNS](iot-moisture-create-sns-topic.md) cui hai creato e lascia il **formato del messaggio** come RAW. **MoistureSensorTopic**** Per **Ruolo IAM**, scegli **Crea un nuovo ruolo**. Inserisci un nome per il ruolo, ad esempio**LowMoistureTopicRole**, e quindi scegli **Crea ruolo**.

1. Scegli **Avanti** per rivedere, quindi scegli **Crea** per creare la regola.

# Configurazione del Raspberry Pi e del sensore di umidità
<a name="iot-moisture-raspi-setup"></a>



Inserire la scheda micro SD nel Raspberry Pi, connettere il monitor, la tastiera, il mouse e, se non si utilizza la rete Wi-Fi, il cavo Ethernet. Non collegare il cavo di alimentazione per il momento.

Collegare il cavo jumper JST al sensore di umidità. L'estremità opposta del jumper presenta quattro fili:
+ Verde: I2C SCL
+ Bianco: I2C SDA
+ Rosso: alimentazione (3,5 V)
+ Nero: terra

Tieni il Raspberry Pi con il connettore Ethernet a destra. In questo orientamento, ci sono due file di pin GPIO nella parte superiore. Collega i fili dal sensore di umidità alla fila inferiore di pin nel seguente ordine. Partendo dal pin più a sinistra, collega il rosso (alimentazione), bianco (SDA) e verde (SCL). Salta un pin, quindi collega il file nero (terra). Per ulteriori informazioni, consulta la pagina relativa al [cablaggio per i computer Python](https://learn.adafruit.com/adafruit-stemma-soil-sensor-i2c-capacitive-moisture-sensor/python-circuitpython-test).

Collega il cavo di alimentazione al Raspberry Pi e collega l'estremità opposta a una presa di corrente per accenderlo.

**Configurare il Raspberry Pi**

1. In **Welcome to Raspberry Pi (Benvenuto in Raspberry Pi)**, scegliere **Next (Avanti)**.

1. Scegliere il paese, la lingua, il fuso orario e il layout della tastiera. Scegli **Next (Successivo)**.

1. Immettere una password per il Raspberry Pi, quindi scegliere **Next (Avanti)**.

1. Scegliere la rete Wi-Fi, quindi scegliere **Next (Avanti)**. Se non si utilizza una rete Wi-Fi, scegliere **Skip (Ignora)**.

1. Scegliere **Next (Avanti)** per verificare la presenza di aggiornamenti software. Al termine degli aggiornamenti, scegliere **Restart (Riavvia)** per riavviare il Raspberry Pi.

Dopo l'avvio del Raspberry Pi, abilitare l'interfaccia I2C.

1. Nell'angolo in alto a sinistra del desktop Raspbian, fare clic sull'icona Raspberry, scegliere **Preferences (Preferenze)**, quindi scegliere **Raspberry Pi Configuration (Configurazione Raspberry Pi)**.

1. Nella scheda **Interfaces (Interfacce)**, per **I2C**, scegliere **Enable (Abilita)**.

1. Scegli **OK**.

Le librerie per il sensore di umidità Adafruit STEMMA sono state scritte per. CircuitPython Per eseguirle su un Raspberry Pi, è necessario installare la versione più recente di Python 3.

1. Eseguire i comandi seguenti da un prompt dei comandi per aggiornare il software Raspberry Pi:

   `sudo apt-get update`

   `sudo apt-get upgrade`

1. Eseguire il comando seguente per aggiornare l'installazione di Python 3:

   `sudo pip3 install --upgrade setuptools`

1. Eseguire il comando seguente per installare le librerie GPIO di Raspberry Pi:

   `pip3 install RPI.GPIO`

1. Eseguire il comando seguente per installare le librerie Adafruit Blinka:

   `pip3 install adafruit-blinka`

   Per ulteriori informazioni, consulta [Installazione delle CircuitPython librerie su Raspberry](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi) Pi.

1. Eseguire il comando seguente per installare le librerie Adafruit Seesaw:

   `sudo pip3 install adafruit-circuitpython-seesaw`

1. Esegui il seguente comando per installare AWS IoT Device SDK per Python:

   `pip3 install AWSIoTPythonSDK`

Il Raspberry Pi ora dispone di tutte le librerie necessarie. Crea un file denominato **moistureSensor.py** e copia il seguente codice Python nel file:

```
from adafruit_seesaw.seesaw import Seesaw
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient
from board import SCL, SDA

import logging
import time
import json
import argparse
import busio

# Shadow JSON schema:
#
# {
#   "state": {
#       "desired":{
#           "moisture":<INT VALUE>,
#           "temp":<INT VALUE>            
#       }
#   }
# }

# Function called when a shadow is updated
def customShadowCallback_Update(payload, responseStatus, token):

    # Display status and data from update request
    if responseStatus == "timeout":
        print("Update request " + token + " time out!")

    if responseStatus == "accepted":
        payloadDict = json.loads(payload)
        print("~~~~~~~~~~~~~~~~~~~~~~~")
        print("Update request with token: " + token + " accepted!")
        print("moisture: " + str(payloadDict["state"]["reported"]["moisture"]))
        print("temperature: " + str(payloadDict["state"]["reported"]["temp"]))
        print("~~~~~~~~~~~~~~~~~~~~~~~\n\n")

    if responseStatus == "rejected":
        print("Update request " + token + " rejected!")

# Function called when a shadow is deleted
def customShadowCallback_Delete(payload, responseStatus, token):

     # Display status and data from delete request
    if responseStatus == "timeout":
        print("Delete request " + token + " time out!")

    if responseStatus == "accepted":
        print("~~~~~~~~~~~~~~~~~~~~~~~")
        print("Delete request with token: " + token + " accepted!")
        print("~~~~~~~~~~~~~~~~~~~~~~~\n\n")

    if responseStatus == "rejected":
        print("Delete request " + token + " rejected!")


# Read in command-line parameters
def parseArgs():

    parser = argparse.ArgumentParser()
    parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host", help="Your device data endpoint")
    parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path")
    parser.add_argument("-c", "--cert", action="store", dest="certificatePath", help="Certificate file path")
    parser.add_argument("-k", "--key", action="store", dest="privateKeyPath", help="Private key file path")
    parser.add_argument("-p", "--port", action="store", dest="port", type=int, help="Port number override")
    parser.add_argument("-n", "--thingName", action="store", dest="thingName", default="Bot", help="Targeted thing name")
    parser.add_argument("-id", "--clientId", action="store", dest="clientId", default="basicShadowUpdater", help="Targeted client id")

    args = parser.parse_args()
    return args


# Configure logging
# AWSIoTMQTTShadowClient writes data to the log
def configureLogging():

    logger = logging.getLogger("AWSIoTPythonSDK.core")
    logger.setLevel(logging.DEBUG)
    streamHandler = logging.StreamHandler()
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    streamHandler.setFormatter(formatter)
    logger.addHandler(streamHandler)


# Parse command line arguments
args = parseArgs()

if not args.certificatePath or not args.privateKeyPath:
    parser.error("Missing credentials for authentication.")
    exit(2)

# If no --port argument is passed, default to 8883
if not args.port: 
    args.port = 8883


# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = None
myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient(args.clientId)
myAWSIoTMQTTShadowClient.configureEndpoint(args.host, args.port)
myAWSIoTMQTTShadowClient.configureCredentials(args.rootCAPath, args.privateKeyPath, args.certificatePath)

# AWSIoTMQTTShadowClient connection configuration
myAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime(1, 32, 20)
myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout(10) # 10 sec
myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 sec

# Initialize Raspberry Pi's I2C interface
i2c_bus = busio.I2C(SCL, SDA)

# Intialize SeeSaw, Adafruit's Circuit Python library
ss = Seesaw(i2c_bus, addr=0x36)

# Connect to AWS IoT
myAWSIoTMQTTShadowClient.connect()

# Create a device shadow handler, use this to update and delete shadow document
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName(args.thingName, True)

# Delete current shadow JSON doc
deviceShadowHandler.shadowDelete(customShadowCallback_Delete, 5)

# Read data from moisture sensor and update shadow
while True:

    # read moisture level through capacitive touch pad
    moistureLevel = ss.moisture_read()

    # read temperature from the temperature sensor
    temp = ss.get_temp()

    # Display moisture and temp readings
    print("Moisture Level: {}".format(moistureLevel))
    print("Temperature: {}".format(temp))
    
    # Create message payload
    payload = {"state":{"reported":{"moisture":str(moistureLevel),"temp":str(temp)}}}

    # Update shadow
    deviceShadowHandler.shadowUpdate(json.dumps(payload), customShadowCallback_Update, 5)
    time.sleep(1)
```

Salva il file nella posizione che preferisci. Esegui `moistureSensor.py` dalla riga di comando con i parametri seguenti:

endpoint  
Il tuo endpoint personalizzato AWS IoT . Per ulteriori informazioni, consulta [API REST del servizio Device Shadow](device-shadow-rest-api.md).

rootCA  
Il percorso completo del certificato CA AWS IoT root.

cert  
Il percorso completo del certificato AWS IoT del dispositivo.

Chiave  
Il percorso completo della chiave privata AWS IoT del certificato del dispositivo.

thingName  
Nome dell'oggetto, in questo caso `RaspberryPi`.

clientId  
ID client MQTT. Utilizza `RaspberryPi`.

La riga di comando dovrebbe essere simile alla seguente:

`python3 moistureSensor.py --endpoint your-endpoint --rootCA ~/certs/AmazonRootCA1.pem --cert ~/certs/raspberrypi-certificate.pem.crt --key ~/certs/raspberrypi-private.pem.key --thingName RaspberryPi --clientId RaspberryPi`

Prova a toccare il sensore, a inserirlo in una fioriera o a immergerlo in un bicchiere d'acqua per vedere come risponde a vari livelli di umidità. Se necessario, puoi modificare il valore di soglia in `MoistureSensorRule`. Quando la lettura del sensore di umidità scende al di sotto del valore specificato nell'istruzione di query SQL della regola, AWS IoT pubblica un messaggio sull'argomento Amazon SNS. Riceverai un messaggio e-mail contenente i dati relativi all'umidità e alla temperatura.

Dopo aver verificato la ricezione dei messaggi e-mail da Amazon SNS, premi **CTRL\$1C** per arrestare il programma Python. È improbabile che il programma Python invii un numero di messaggi tale da comportare un addebito, ma è una best practice interrompere il programma al termine delle operazioni.