

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.

# 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\+C (STRG\+C)**, 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.