

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Tutorial: Überwachung der Bodenfeuchte mit einem AWS IoT Raspberry Pi
<a name="iot-moisture-tutorial"></a>

Dieses Tutorial zeigt Ihnen, wie Sie einen [Raspberry Pi](https://www.raspberrypi.org/), einen Feuchtigkeitssensor, verwenden und AWS IoT den Bodenfeuchtigkeitsgehalt einer Zimmerpflanze oder eines Gartens überwachen. Der Raspberry Pi führt Code aus, der den Feuchtigkeitsgehalt und die Temperatur vom Sensor liest und die Daten dann an sendet AWS IoT. Sie erstellen eine Regel AWS IoT , die eine E-Mail an eine Adresse sendet, die ein Amazon SNS SNS-Thema abonniert hat, wenn der Feuchtigkeitsgehalt unter einen Schwellenwert fällt.

**Anmerkung**  
Dieses Tutorial ist möglicherweise nicht aktuell. Einige Verweise wurden möglicherweise seit der ursprünglichen Veröffentlichung dieses Themas ersetzt.

**Contents**
+ [Voraussetzungen](#iot-moisture-prereqs)
+ [Einrichten AWS IoT](iot-moisture-setup.md)
  + [Schritt 1: Erstellen Sie die AWS IoT Richtlinie](iot-moisture-policy.md)
  + [Schritt 2: Erstellen Sie das AWS IoT Ding, das Zertifikat und den privaten Schlüssel](iot-moisture-create-thing.md)
  + [Schritt 3: Erstellen eines Amazon-SNS-Themas und -Abonnements](iot-moisture-create-sns-topic.md)
  + [Schritt 4: Erstellen Sie eine AWS IoT Regel zum Senden einer E-Mail](iot-moisture-create-rule.md)
+ [Einrichten des Raspberry Pi und des Feuchtesensors](iot-moisture-raspi-setup.md)

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

Zum Durchführen dieses Tutorials benötigen Sie Folgendes:
+ Ein. AWS-Konto
+ Ein IAM-Benutzer mit Administratorberechtigungen.
+ Ein Entwicklungscomputer mit Windows, macOS, Linux oder Unix für den Zugriff auf die [AWS IoT -Konsole](https://console.aws.amazon.com/iot/home).
+ Ein [Raspberry Pi 3B oder 4B](https://www.raspberrypi.com/products/) mit dem neuesten [Raspberry Pi-Betriebssystem](https://www.raspberrypi.com/software/operating-systems/). Installationsanweisungen finden [Sie unter Installieren eines Betriebssystems](https://www.raspberrypi.com/documentation/computers/getting-started.html#installing-the-operating-system) auf der Raspberry Pi-Website. 
+ Ein Monitor, eine Tastatur, eine Maus und eine WLAN-Verbindung oder eine Ethernet-Verbindung für Ihren Raspberry Pi.
+ Ein mit Raspberry Pi kompatibler Feuchtigkeitssensor. Bei dem in diesem Tutorial verwendeten Sensor handelt es sich um einen [Adafruit STEMMA I2C Capacitive Moisture Sensor](https://www.adafruit.com/product/4026) mit einer [JST 4-adrigen Kabelbuchsenleiste](https://www.adafruit.com/product/3950). 

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

Um dieses Tutorial abzuschließen, müssen Sie die folgenden Ressourcen erstellen. Um ein Gerät zu verbinden AWS IoT, erstellen Sie ein IoT-Ding, ein Gerätezertifikat und eine AWS IoT Richtlinie. 
+  AWS IoT Irgendein Ding.

  Ein Objekt stellt ein physisches Gerät (in diesem Fall Ihr Rasberry Pi) dar und enthält statische Metadaten über das Gerät. 
+ Ein Gerätezertifikat.

  Alle Geräte müssen über ein Gerätezertifikat verfügen, um eine Verbindung herzustellen und sich mit AWS IoT zu authentifizieren.
+ Eine AWS IoT Richtlinie.

  Jedem Gerätezertifikat sind eine oder mehrere AWS IoT Richtlinien zugeordnet. Diese Richtlinien legen fest, auf welche AWS IoT Ressourcen das Gerät zugreifen kann. 
+ Ein AWS IoT Root-CA-Zertifikat.

  Geräte und andere Clients verwenden ein AWS IoT Root-CA-Zertifikat, um den AWS IoT Server zu authentifizieren, mit dem sie kommunizieren. Weitere Informationen finden Sie unter [Serverauthentifizierung](server-authentication.md).
+ Eine AWS IoT Regel.

  Eine Regel enthält eine Abfrage und mindestens eine Regelaktion. Die Abfrage extrahiert Daten aus Gerätenachrichten, um zu bestimmen, ob die Nachrichtendaten verarbeitet werden sollen. Die Regelaktion gibt an, was zu tun ist, wenn die Daten mit der Abfrage übereinstimmen.
+ Ein Amazon SNS-Thema und ein Themenabonnement.

  Die Regel überwacht die Feuchtigkeitsdaten über Ihren Raspberry Pi. Wenn der Wert unter einem Schwellenwert liegt, wird eine Nachricht an das Amazon-SNS-Thema gesendet. Amazon SNS sendet diese Nachricht an alle E-Mail-Adressen, die das Thema abonniert haben.

 



# Schritt 1: Erstellen Sie die AWS IoT Richtlinie
<a name="iot-moisture-policy"></a>

Erstellen Sie eine AWS IoT Richtlinie, die es Ihrem Raspberry Pi ermöglicht, eine Verbindung herzustellen und Nachrichten an diese zu senden AWS IoT.

1. Wenn in der [AWS IoT -Konsole](https://console.aws.amazon.com/iot) die Schaltfläche **Erste Schritte** erscheint, klicken Sie darauf. Erweitern Sie andernfalls im Navigationsbereich ** Sicherheit** und wählen Sie dann **Richtlinien** aus.

1. Wenn das Dialogfeld **You don‘t have any policies yet (Sie haben noch keine Richtlinien)** angezeigt wird, wählen Sie **Create a policy (Richtlinie erstellen)** aus. Wählen Sie andernfalls **Erstellen**.

1. Geben Sie einen Namen für die AWS IoT Richtlinie ein (z. B.**MoistureSensorPolicy**).

1. Ersetzen Sie im Abschnitt **Add statements (Anweisungen hinzufügen)** die vorhandene Richtlinie durch das folgende JSON-Objekt. Ersetzen Sie *region* und *account* durch Ihre AWS-Konto Nummer AWS-Region und.  
****  

   ```
   {
       "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. Wählen Sie **Erstellen** aus.

# Schritt 2: Erstellen Sie das AWS IoT Ding, das Zertifikat und den privaten Schlüssel
<a name="iot-moisture-create-thing"></a>

Erstellen Sie in der AWS IoT Registrierung ein Ding, das Ihren Raspberry Pi repräsentiert.

1. Wählen Sie in der [AWS IoT -Konsole](https://console.aws.amazon.com/iot/home) im Navigationsbereich **Manage (Verwalten)** und dann **Things (Objekte)**.

1. Wenn das Dialogfeld **You don‘t have any things yet (Sie haben noch keine Objekte)** angezeigt wird, wählen Sie **Register a thing (Objekt registrieren)** aus. Wählen Sie andernfalls **Erstellen**.

1. Wählen Sie auf der Seite „** AWS IoT Dinge erstellen****“ die Option Ein einzelnes Ding** erstellen aus.

1. Geben Sie auf der Seite **Add your device to the device registry (Ihr Gerät zur Geräteregistrierung hinzufügen)** einen Namen für Ihr IoT-Objekt ein (z. B. **RaspberryPi**) und wählen Sie dann **Next (Weiter)**. Sie können den Namen eines Objekts nicht mehr ändern, nachdem Sie es erstellt haben. Um den Namen eines Objekts zu ändern, müssen Sie ein neues Objekt erstellen, diesem den neuen Namen geben und dann das alte Objekt löschen.

1. Wählen Sie auf der Seite **Add a certificate for your thing (Fügen Sie ein Zertifikat für Ihr Objekt hinzu.)** die Option **Create certificate (Zertifikat erstellen)**.

1. Klicken Sie auf die **Download**-Links, um das Zertifikat, den privaten Schlüssel und das CA-Stammzertifikat herunterzuladen.
**Wichtig**  
Dies ist das einzige Mal, dass Sie Ihr Zertifikat und Ihren privaten Schlüssel herunterladen können.

1. Wählen Sie **Aktivieren** aus, um Ihr Zertifikat zu aktivieren. Das Zertifikat muss aktiv sein, damit ein Gerät eine Verbindung mit AWS IoT herstellen kann.

1. Wählen Sie **Attach a policy (Richtlinie anfügen)** aus.

1. Wählen ****MoistureSensorPolicy**Sie unter Richtlinie für Ihr Ding hinzufügen** die Option und anschließend **Ding registrieren** aus.

# Schritt 3: Erstellen eines Amazon-SNS-Themas und -Abonnements
<a name="iot-moisture-create-sns-topic"></a>

Erstellen eines Amazon-SNS-Themas und -Abonnements.

1. Klicken Sie in der [AWS SNS-Konsole](https://console.aws.amazon.com/sns/home) im Navigationsbereich auf **Themen** und wählen Sie dann **Thema erstellen** aus.

1. Wählen Sie Typ als **Standard** und geben Sie einen Namen für das Thema ein (z. B.**MoistureSensorTopic**).

1. Geben Sie einen Anzeigenamen für das Thema ein (z. B. **Moisture Sensor Topic**). Dies ist der Name, der für Ihr Thema in der Amazon SNS -Konsole angezeigt wird.

1. Wählen Sie **Thema erstellen** aus.

1. Wählen Sie auf der Seite mit den Details des Amazon SNS-Themas die Option **Create subscription (Abonnement erstellen)** aus.

1. Wählen Sie unter **Protocol (Protokoll)** die Option **Email (E-Mail)** aus.

1. Geben Sie unter **Endpunkt** Ihre E-Mail-Adresse ein.

1. Wählen Sie **Create subscription** (Abonnement erstellen) aus.

1. Öffnen Sie Ihren E-Mail-Client und suchen Sie nach einer Nachricht mit dem Betreff **MoistureSensorTopic**. Öffnen Sie die E-Mail und klicken Sie auf den Link **Confirm subscription (Abonnement bestätigen)**.
**Wichtig**  
Sie erhalten keine E-Mail-Benachrichtigungen von diesem Amazon SNS-Thema, bis Sie das Abonnement bestätigen.

Sie sollten eine E-Mail-Nachricht mit dem von Ihnen eingegebenen Text erhalten.

# Schritt 4: Erstellen Sie eine AWS IoT Regel zum Senden einer E-Mail
<a name="iot-moisture-create-rule"></a>

Eine AWS IoT Regel definiert eine Abfrage und eine oder mehrere Aktionen, die ausgeführt werden sollen, wenn eine Nachricht von einem Gerät empfangen wird. Die AWS IoT Regel-Engine wartet auf Nachrichten, die von Geräten gesendet werden, und bestimmt anhand der in den Nachrichten enthaltenen Daten, ob Maßnahmen ergriffen werden sollten. Weitere Informationen finden Sie unter [Regeln für AWS IoT](iot-rules.md). 

In diesem Tutorial veröffentlicht Ihr Raspberry Pi Nachrichten auf `aws/things/RaspberryPi/shadow/update`. Dies ist ein internes MQTT-Thema, das von Geräten und dem Thing Shadow-Service verwendet wird. Der Raspberry Pi veröffentlicht Nachrichten in der folgenden Form:

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

Sie erstellen eine Abfrage, die die Feuchtigkeits- und Temperaturdaten aus der eingehenden Nachricht extrahiert. Sie erstellen auch eine Amazon SNS-Aktion, die die Daten übernimmt und an Abonnenten des Amazon SNS-Themas sendet, wenn der Feuchtigkeitswert unter einem Schwellenwert liegt.

**Erstellen Sie eine Amazon SNS-Regel**

1. Wählen Sie in der [AWS IoT Konsole](https://console.aws.amazon.com/iot/home) **Nachrichtenrouting** und dann **Regeln** aus. Wenn das Dialogfeld **You don‘t have any rules yet (Sie haben noch keine Regeln)** angezeigt wird, wählen Sie **Create a rule (Regel erstellen)** aus. Wählen Sie andernfalls **Regel erstellen**.

1. Geben Sie auf der Seite mit den **Regeleigenschaften** einen **Regelnamen** wie **MoistureSensorRule** ein und geben Sie eine kurze **Regelbeschreibung** ein, z.B. **Sends an alert when soil moisture level readings are too low**.

1. Wählen Sie **Weiter** und konfigurieren Sie Ihre SQL-Anweisung. Wählen Sie die **SQL-Version** **2016-03-23** und geben Sie die folgende AWS IoT SQL-Abfrageanweisung ein:

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

   Diese Anweisung löst die Regelaktion aus, wenn der `moisture`-Lesevorgang kleiner als `400` ist.
**Anmerkung**  
Möglicherweise müssen Sie einen anderen Wert verwenden. Nachdem Sie den Code auf Ihrem Raspberry Pi ausgeführt haben, können Sie die Werte sehen, die Sie von Ihrem Sensor erhalten, indem Sie den Sensor berühren, ihn in Wasser platzieren oder ihn in einem Übertopf platzieren. 

1. Wählen Sie **Weiter** und hängen Sie Regelaktionen an. Wählen Sie für **Aktion 1** **Einfacher Benachrichtigungsservice** aus. Die Beschreibung für diese Regelaktion lautet **Eine Nachricht als SNS-Push-Benachrichtigung** senden.

1. **Wählen Sie als **SNS-Thema das Thema**, das Sie in, erstellt haben [Schritt 3: Erstellen eines Amazon-SNS-Themas und -Abonnements](iot-moisture-create-sns-topic.md) **MoistureSensorTopic**, und behalten Sie das **Nachrichtenformat** RAW bei.** Wählen Sie für **IAM Role (IAM-Rolle)** die Option **Create a New Role (Neue Rolle erstellen)** aus. Geben Sie einen Namen für die Rolle ein, beispielsweise **LowMoistureTopicRole**, und wählen Sie dann **Rolle erstellen** aus.

1. Wählen Sie **Weiter** aus, um die Regel zu überprüfen, und klicken Sie dann auf **Erstellen**, um die Regel zu erstellen.

# Einrichten des Raspberry Pi und des Feuchtesensors
<a name="iot-moisture-raspi-setup"></a>



Setzen Sie Ihre Micro-SD-Karte in den Raspberry Pi ein, schließen Sie Ihren Monitor, Ihre Tastatur, Ihre Maus und Ihr Ethernet-Kabel an, falls Sie kein WLAN verwenden. Schließen Sie das Stromkabel noch nicht an.

Schließen Sie das JST-Überbrückungskabel an den Feuchtigkeitssensor an. Die andere Seite des Kabels hat vier Drähte:
+ Grün: I2C SCL
+ Weiß: I2C SDA
+ Rot: Stromversorgung (3,5 V)
+ Schwarz: Erdung

Halten Sie den Raspberry Pi mit der Ethernet-Buchse auf der rechten Seite. In dieser Ausrichtung befinden sich oben zwei Reihen von GPIO-Stiften. Verbinden Sie die Drähte vom Feuchtigkeitssensor in der folgenden Reihenfolge mit der unteren Reihe der Stifte. Beginnen Sie mit dem Stift ganz links. Schließen Sie rot (Strom), weiß (SDA) und grün (SCL) an. Überspringen Sie einen Stift und schließen Sie dann den schwarzen Draht (Erdung) an. Weitere Informationen finden Sie unter [Python Computer Wiring](https://learn.adafruit.com/adafruit-stemma-soil-sensor-i2c-capacitive-moisture-sensor/python-circuitpython-test).

Schließen Sie das Stromkabel an den Raspberry Pi und das andere Ende an eine Steckdose an, um ihn einzuschalten.

**Konfigurieren Ihres Raspberry Pi**

1. Wählen Sie unter **Welcome to Raspberry Pi (Willkommen bei Raspberry Pi)**, **Next (Weiter)**.

1. Wählen Sie Ihr Land, Ihre Sprache, die Zeitzone und das Tastaturlayout. Wählen Sie **Weiter** aus.

1. Geben Sie ein Passwort für Ihren Raspberry Pi ein und wählen Sie dann **Next (Weiter)**.

1. Wählen Sie Ihr WLAN und klicken Sie dann auf **Next (Weiter)**. Wenn Sie kein WLAN verwenden, wählen Sie **Skip (Überspringen)** aus.

1. Wählen Sie **Next (Weiter)**, um nach Software-Updates zu suchen. Wenn die Updates abgeschlossen sind, wählen Sie **Restart (Neu starten)**, um Ihren Raspberry Pi neu zu starten.

Nach dem Start Ihres Raspberry Pi aktivieren Sie die I2C-Schnittstelle.

1. Klicken Sie in der oberen linken Ecke des Raspbian-Desktops auf das Raspberry-Symbol, wählen Sie **Preferences (Einstellungen)** und dann **Raspberry Pi Configuration (Raspberry Pi-Konfiguration)**.

1. Wählen Sie auf der Registerkarte **Interfaces (Schnittstellen)** für **I2C** die Option **Enable (Aktivieren)**.

1. Wählen Sie **OK** aus.

Die Bibliotheken für den STEMMA-Feuchtigkeitssensor von Adafruit sind dafür geschrieben. CircuitPython Um sie auf einem Raspberry Pi auszuführen, müssen Sie die neueste Version von Python 3 installieren.

1. Führen Sie die folgenden Befehle über eine Eingabeaufforderung aus, um Ihre Raspberry Pi-Software zu aktualisieren:

   `sudo apt-get update`

   `sudo apt-get upgrade`

1. Führen Sie den folgenden Befehl aus, um Ihre Python 3-Installation zu aktualisieren:

   `sudo pip3 install --upgrade setuptools`

1. Führen Sie den folgenden Befehl aus, um die Raspberry Pi GPIO-Bibliotheken zu installieren:

   `pip3 install RPI.GPIO`

1. Führen Sie den folgenden Befehl aus, um die Adafruit Blinka-Bibliotheken zu installieren:

   `pip3 install adafruit-blinka`

   Weitere Informationen finden Sie unter [ CircuitPython Bibliotheken auf dem Raspberry Pi installieren](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi).

1. Führen Sie den folgenden Befehl aus, um die Adafruit Seesaw-Bibliotheken zu installieren:

   `sudo pip3 install adafruit-circuitpython-seesaw`

1. Führen Sie den folgenden Befehl aus, um das AWS IoT Device SDK für Python zu installieren:

   `pip3 install AWSIoTPythonSDK`

Ihr Raspberry Pi verfügt jetzt über alle erforderlichen Bibliotheken. Erstellen Sie eine Datei mit dem Namen **moistureSensor.py** und kopieren Sie den folgenden Python-Code in die Datei:

```
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)
```

Speichern Sie die Datei an einem Speicherort, an dem Sie sie finden können. Führen Sie `moistureSensor.py` über die Befehlszeile mit den folgenden Parametern aus:

Endpunkt  
Ihr benutzerdefinierter AWS IoT Endpunkt. Weitere Informationen finden Sie unter [Geräteschatten-REST-API](device-shadow-rest-api.md).

rootCA  
Der vollständige Pfad zu Ihrem AWS IoT Root-CA-Zertifikat.

cert  
Der vollständige Pfad zu Ihrem AWS IoT Gerätezertifikat.

Schlüssel  
Der vollständige Pfad zum privaten Schlüssel Ihres AWS IoT Gerätezertifikats.

thingName  
Ihr Objektname (in diesem Fall `RaspberryPi`).

clientId  
Die MQTT-Client-ID. Verwenden Sie `RaspberryPi`.

Die Befehlszeile sollte wie folgt aussehen:

`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`

Versuchen Sie, den Sensor zu berühren, ihn in einen Übertopf zu legen oder ihn in ein Glas Wasser zu legen, um zu sehen, wie der Sensor auf verschiedene Feuchtigkeitsstufen reagiert. Bei Bedarf können Sie den Schwellenwert in `MoistureSensorRule` ändern. Wenn der Messwert des Feuchtigkeitssensors unter den in der SQL-Abfrageanweisung Ihrer Regel angegebenen Wert fällt, wird eine Nachricht im Amazon SNS SNS-Thema AWS IoT veröffentlicht. Sie sollten eine E-Mail-Nachricht erhalten, die die Feuchtigkeits- und Temperaturdaten enthält.

Nachdem Sie den Empfang von E-Mail-Nachrichten von Amazon SNS überprüft haben, drücken Sie **CTRL\$1C (STRG\$1C)**, um das Python-Programm zu beenden. Es ist unwahrscheinlich, dass das Python-Programm so viele Nachrichten sendet, dass Kosten anfallen, aber es hat sich bewährt, das Programm zu beenden, wenn Sie fertig sind.