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: Installieren des Device SDK und Ausführen der Beispielanwendung für Device Shadows
In diesem Abschnitt wird gezeigt, wie Sie die erforderliche Software installieren können undAWS IoTDevice SDK für Python und führen Sie dieshadow.py
Beispielanwendung, um das Shadow-Dokument zu bearbeiten und den Status des Schattens zu steuern.
In diesem Tutorial erfahren Sie Folgendes:
-
Verwenden Sie die installierte Software undAWS IoTGeräte-SDK für Python zum Ausführen der Beispiel-App.
-
Erfahren Sie, wie die Eingabe eines Wertes mit der Beispiel-App den gewünschten Wert imAWS IoTconsole.
-
Prüfen Sie die
shadow.py
Beispiel-App und wie sie das MQTT-Protokoll verwendet, um den Status des Shadows zu aktualisieren.
Bevor Sie dieses Tutorial ausführen:
Sie müssen Ihre eingerichtet habenAWS-Konto, hat Ihr Raspberry Pi-Gerät konfiguriert und einAWS IoTSache und Richtlinie, die dem Gerät Berechtigungen zum Veröffentlichen und Abonnieren der reservierten MQTT-Themen des Device Shadow Shadow-Dienstes erteilt. Weitere Informationen finden Sie unter Tutorial: Vorbereiten Ihres Raspberry Pi zum Ausführen der Shadow-Anwendung.
Sie müssen auch Git, Python und das installiert habenAWS IoTDevice SDK für Python. Dieses Tutorial baut auf den im Tutorial vorgestellten Konzepten aufVerbinden eines Raspberry Pi oder eines anderes Gerätesaus. Wenn Sie dieses Tutorial noch nicht ausprobiert haben, empfehlen wir Ihnen, die in diesem Tutorial beschriebenen Schritte auszuführen, um die Zertifikatsdateien und das Device SDK zu installieren und dann zu diesem Tutorial zurückzukehren, um dieshadow.py
Beispiel-App.
In diesem Tutorial werden Sie:
Für dieses Tutorial brauchen Sie ungefähr 20 Minuten.
Schritt 1: Führen Sie die Beispiel-App shadow.py aus
Bevor du dieshadow.py
Beispiel-App benötigen Sie zusätzlich zu den Namen und dem Speicherort der von Ihnen installierten Zertifikatsdateien die folgenden Informationen.
Parameter |
Wo finden Sie den Wert |
---|---|
your-iot-thing-Name |
Name desAWS IoTSache, die Sie vorher erstellt habenSchritt 2: Erstellen Sie eine Sache Ressource und fügen Sie die Richtlinie an das Ding anaus. Um diesen Wert zu finden, finden Sie imAWS IoTKonsole |
your-iot-endpoint |
Die
|
Installieren und führen Sie die Beispielanwendung aus
-
Navigieren Sie zum Beispiel-App-Verzeichnis.
cd ~/aws-iot-device-sdk-python-v2/samples
-
Ersetzen Sie im Befehlszeilen-Fenster
your-iot-endpoint
undyour-iot-thing-Name
wie angegeben und führen Sie diesen Befehl aus.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_nameyour-iot-thing-name
-
Beachten Sie, dass die Beispielanwendung:
-
Stellt eine Verbindung mitAWSIoT-Dienst für Ihr Konto.
-
Abonniert für
Delta
Ereignisse undUpdate
undGet
Antworten. -
Fordert Sie auf, einen gewünschten Wert im Terminal einzugeben.
-
Zeigt eine Ausgabe ähnlich der folgenden an:
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:
-
Anmerkung
Wenn Probleme beim Ausführen desshadow.py
Beispiel-App, überprüfenSchritt 3: Beheben Sie Probleme mit dershadow.pyBeispiel-Appaus. Um zusätzliche Informationen zu erhalten, die Ihnen bei der Behebung des Problems helfen könnten, fügen Sie die--verbosity debug
Parameter auf die Befehlszeile, damit die Beispiel-App detaillierte Nachrichten darüber anzeigt, was sie tut.
Geben Sie Werte ein und beobachten Sie die Updates im Shadow-Dokument
Sie können Werte im Terminal eingeben, um diedesired
Wert, der auch denreported
Wert. Sag, du gibst die Farbe einyellow
im Terminal. Diereported
Wert wird auch auf die Farbe aktualisiertyellow
aus. Im Folgenden werden die im Terminal angezeigten Nachrichten angezeigt:
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'.
Wenn Sie diese Aktualisierungsanfrage veröffentlichen,AWS IoTerstellt einen standardmäßigen, klassischen Schatten für die Ding-Ressource. Sie können die Aktualisierungsanfrage beobachten, die Sie in derreported
unddesired
-Werte imAWS IoTkonsolen, indem Sie sich das Shadow-Dokument für die von Ihnen erstellte Dingressource ansehen (z.My_light_bulb
) enthalten. So sehen Sie das Update im Shadow-Dokument:
-
In derAWS IoT-Konsole, Wählen SieVerwaltenKlicken Sie auf und danach aufElementeaus.
-
Wählen Sie in der Liste der angezeigten Dinge das Objekt aus, das Sie erstellt haben, und wählen SieShadowsKlicken Sie auf und danach aufKlassischer Schattenaus.
Das Shadow-Dokument sollte in etwa folgendermaßen aussehen und zeigt diereported
unddesired
Werte, die auf die Farbe eingestellt sindyellow
aus. Diese Werte sehen Sie imSchatten-StatusAbschnitt des Dokuments.
{ "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }
Sie sehen auch einMetadataAbschnitt, der die Zeitstempelinformationen und die Versionsnummer der Anforderung enthält.
Sie können die Version des Statusdokuments verwenden, um sicherzustellen, dass Sie die neueste Version des Shadow-Dokuments eines Geräts aktualisieren. Wenn Sie eine weitere Aktualisierungsanfrage senden, erhöht sich die Versionsnummer um 1. Geben Sie bei einer Aktualisierungsanfrage eine Version an, lehnt der Service die Anfrage mit einem Konflikt-Antwortcode HTTP 409 ab, wenn die aktuelle Version des Statusdokuments nicht der angegebenen Version entspricht.
{ "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } } }, "version": 10 }
Um mehr über das Shadow-Dokument zu erfahren und Änderungen an den Statusinformationen zu beobachten, fahren Sie mit dem nächsten Tutorial fortTutorial: Interaktion mit Device Shadow über die Beispiel-App und den MQTT-Testclientwie im beschriebenSchritt 4: Überprüfen Sie die Ergebnisse und nächsten SchritteAbschnitt dieses Tutorials. Optional können Sie auch mehr über dieshadow.py
Beispielcode und wie er das MQTT-Protokoll im folgenden Abschnitt verwendet.
Schritt 2: Überprüfen Sie die Beispiel-App des shadow.py Device SDK
In diesem Abschnitt wird dieshadow.py
Sample App ausAWS IoTDevice SDK v2 für PythonWird in diesem Tutorial verwendet. Hier werden wir überprüfen, wie es sich mit verbindetAWS IoT Coredurch Verwendung des MQTT- und MQTT-over-WSS-Protokolls. DieAWSgemeinsame Laufzeit (AWS-CRT)
Während dieses Tutorial MQTT und MQTT über WSS verwendet,AWS IoTunterstützt Geräte, die HTTPS-Anfragen veröffentlichen. Ein Beispiel für ein Python-Programm, das eine HTTP-Nachricht von einem Gerät sendet, finden Sie imBeispiel für HTTPS-CodeVerwenden von Pythonsrequests
aufgelistet werden können.
Informationen darüber, wie Sie eine fundierte Entscheidung darüber treffen können, welches Protokoll Sie für Ihre Gerätekommunikation verwenden möchten, finden Sie in derWählen Sie ein Anwendungsprotokoll für Ihre Gerätekommunikationaus.
MQTT
Dieshadow.py
Beispielaufrufemtls_from_path
(hier gezeigt) immqtt_connection_builder
mtls_from_path
verwendet X.509-Zertifikate und TLS v1.2, um das Gerät zu authentifizieren. DieAWS-CRT-Bibliothek verarbeitet die Details dieser Verbindung auf niedrigerer Ebene.
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
ist IhreAWS IoTEndpunkt, den Sie von der Befehlszeile aus übergeben haben undclient_id
ist die ID, die dieses Gerät eindeutig imAWS-Regionaus. -
cert_filepath
,pri_key_filepath
, undca_filepath
sind die Pfade zu den Zertifikats- und privaten Schlüsseldateien des Geräts sowie zur Root-CA-Datei. -
client_bootstrap
ist das gemeinsame Laufzeitobjekt, das Socket-Kommunikationsaktivitäten verarbeitet und vor dem Aufruf vonmqtt_connection_builder.mtls_from_path
aus. -
on_connection_interrupted
undon_connection_resumed
sind Callback-Funktionen, die aufgerufen werden sollen, wenn die Verbindung des Geräts unterbrochen und wieder aufgenommen wird. -
clean_session
ist, ob eine neue, dauerhafte Sitzung gestartet werden soll oder ob eine vorhanden ist, eine erneute Verbindung zu einer bestehenden Sitzung herstellen soll.keep_alive_secs
ist der Keep Alive Wert in Sekunden, um dieCONNECT
request. In diesem Intervall wird automatisch ein Ping gesendet. Der Server geht davon aus, dass die Verbindung verloren geht, wenn sie nach dem 1,5-fachen dieses Wertes keinen Ping erhält.
Dieshadow.py
Beispiel auch Anrufewebsockets_with_default_aws_signing
immqtt_connection_builder
-
region
ist derAWSsignierende Region, die von Signature V4-Authentifizierung verwendet wird,credentials_provider
ist derAWSAnmeldeinformationen, die zur Authentifizierung verwendet werden sollen. Die Region wird von der Befehlszeile übergeben und diecredentials_provider
object wird kurz vor dem Aufruf vonmqtt_connection_builder.websockets_with_default_aws_signing
aus. -
websocket_proxy_options
sind die HTTP-Proxy-Optionen, wenn ein Proxy-Host verwendet wird. In dershadow.py
Beispiel-App, dieser Wert wird kurz vor dem Aufruf vonmqtt_connection_builder.websockets_with_default_aws_signing
aus.
Abonnieren Sie Shadow Themen und Ereignisse
Dieshadow.py
Probe versucht, eine Verbindung herzustellen, und wartet darauf, vollständig verbunden zu sein. Wenn es nicht verbunden ist, werden Befehle in die Warteschlange gestellt. Nach der Verbindung abonniert das Beispiel Delta-Ereignisse und aktualisiert und erhält Nachrichten und veröffentlicht Nachrichten mit einer Quality of Service (QoS) -Level von 1 (mqtt.QoS.AT_LEAST_ONCE
) enthalten.
Wenn ein Gerät eine Nachricht mit QoS Level 1 abonniert, speichert der Nachrichtenbroker die Nachrichten, die das Gerät abonniert hat, bis sie an das Gerät gesendet werden können. Der Nachrichtenbroker sendet die Nachrichten erneut, bis er einePUBACK
Antwort vom Gerät.
Weitere Informationen zum MQTT-Protokoll finden Sie unterÜberprüfen des MQTT-ProtokollsundMQTTaus.
Weitere Informationen darüber, wie MQTT, MQTT über WSS, persistente Sitzungen und QoS-Ebenen, die in diesem Tutorial verwendet werden, finden Sie unterSehen Sie sich die pubsub.py Device SDK-Beispiel-App anaus.
Schritt 3: Beheben Sie Probleme mit dershadow.py
Beispiel-App
Wenn du dieshadow.py
Beispiel-App, Sie sollten einige Nachrichten im Terminal angezeigt werden und eine Aufforderung zur Eingabe einesdesired
Wert. Wenn das Programm einen Fehler auslöst, können Sie zum Debuggen des Fehlers zunächst prüfen, ob Sie den richtigen Befehl für Ihr System ausgeführt haben.
In einigen Fällen kann die Fehlermeldung auf Verbindungsprobleme hinweisen und ähnlich aussehen wie:Host name was invalid for dns resolution
oderConnection was
closed unexpectedly
aus. In solchen Fällen können Sie einige Dinge überprüfen:
-
Überprüfen Sie die Endpunktadresse im Befehl
Prüfen Sie die
endpoint
Argument in dem Befehl, den Sie zum Ausführen der Beispiel-App eingegeben haben (z.a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com
) und überprüfen Sie diesen Wert imAWS IoTKonsoleaus.So prüfen Sie, ob Sie den richtigen Wert verwendet haben:
-
In derAWS IoTKonsole, wählenVerwaltenKlicken Sie auf und danach aufElementeaus.
-
Wählen Sie das -Objekt aus, das Sie für Ihre Beispiel-App erstellt haben (z. B.my_light_Bulb) und danach aufInteragierenaus.
Auf der Seite mit den Thing-Details wird Ihr Endpunkt im FeldHTTPSAbschnitts erstellt. Es sollte auch eine Meldung angezeigt werden, die besagt:
This thing already appears to be connected.
-
-
Überprüfen der Zertifikataktivierung
Zertifikate authentifizieren Ihr Gerät mitAWS IoT Coreaus.
So prüfen Sie, ob Ihr Zertifikat aktiv ist:
-
In derAWS IoTKonsole, wählenVerwaltenKlicken Sie auf und danach aufElementeaus.
-
Wählen Sie das -Objekt aus, das Sie für Ihre Beispiel-App erstellt haben (z. B.my_light_Bulb) und danach aufSicherheitaus.
-
Wählen Sie das Zertifikat aus und wählen Sie dann auf der Detailseite des Zertifikats das Zertifikat auswählen aus und wählen Sie dann auf der Detailseite des ZertifikatsAktionenaus.
Wenn in der Dropdown-ListeActivateist nicht verfügbar und Sie können nur wählenDeaktivieren, Ihr Zertifikat ist aktiv. Wenn nicht, wählen SieActivateund führen Sie das Beispielprogramm erneut aus.
Wenn das Programm immer noch nicht ausgeführt wird, überprüfen Sie die Namen der Zertifikatdateien im
certs
folder. -
-
Überprüfen Sie die Richtlinie, die mit der Ding-Ressource verbunden ist
Während Zertifikate Ihr Gerät authentifizieren,AWS IoTRichtlinien erlauben dem Gerät die AusführungAWS IoTOperationen, wie das Abonnieren oder Veröffentlichen von reservierten MQTT-Themen.
So prüfen Sie, ob die richtige Richtlinie angehängt ist:
-
Suchen Sie das Zertifikat wie zuvor beschrieben und wählen Sie dannRichtlinienaus.
-
Wählen Sie die angezeigte Richtlinie aus und prüfen Sie, ob sie die
connect
,subscribe
,receive
, undpublish
Aktionen, die dem Gerät die Berechtigung geben, die reservierten MQTT-Themen zu veröffentlichen und zu abonnieren.Eine Beispielrichtlinie finden Sie unterSchritt 1: Erstellen einesAWS IoT-Richtlinie für Device Shadowaus.
Wenn Fehlermeldungen angezeigt werden, die auf Probleme beim Verbinden mit hinweisenAWS IoT, könnte es an den Berechtigungen liegen, die Sie für die Richtlinie verwenden. In diesem Fall empfehlen wir, dass Sie mit einer Richtlinie beginnen, die vollen Zugriff aufAWS IoT-Ressourcen und führen Sie dann das Beispielprogramm erneut aus. Sie können entweder die aktuelle Richtlinie bearbeiten oder die aktuelle Richtlinie auswählen undAufhebung der Verknüpfungund erstellen Sie dann eine weitere Richtlinie, die vollen Zugriff bietet, und fügen Sie sie an Ihre Ding-Ressource an. Sie können die Richtlinie später nur auf die Aktionen und Richtlinien beschränken, die Sie zum Ausführen des Programms benötigen.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" } ] }
-
-
Überprüfen Sie Ihre Device SDK-Installation
Wenn das Programm immer noch nicht ausgeführt wird, können Sie das Device SDK neu installieren, um sicherzustellen, dass Ihre SDK-Installation abgeschlossen und korrekt ist.
Schritt 4: Überprüfen Sie die Ergebnisse und nächsten Schritte
In diesem Tutorial haben Sie Folgendes gelernt:
-
Installieren Sie die erforderliche Software, Tools und dieAWS IoTDevice SDK für Python.
-
So verstehen Sie, wie die Beispielanwendung
shadow.py
verwendet das MQTT-Protokoll zum Abrufen und Aktualisieren des aktuellen Status des Shadows. -
Führen Sie die Beispiel-App für Device Shadows aus und beobachten Sie das Update des Shadow-Dokuments imAWS IoTconsole. Sie haben auch gelernt, Probleme zu beheben und Fehler beim Ausführen des Programms zu beheben.
Nächste Schritte
Sie können jetzt denshadow.py
Beispielanwendung und verwenden Sie Device Shadows, um den Status zu steuern. Sie können die Aktualisierungen des Shadow-Dokuments imAWS IoTKonsolen und beobachten Sie Delta-Ereignisse, auf die die Beispiel-App reagiert. Mit dem MQTT-Testclient können Sie die reservierten Schattenthemen abonnieren und Nachrichten beobachten, die die Themen beim Ausführen des Beispielprogramms erhalten haben. Weitere Informationen zum Ausführen dieses Tutorials finden Sie unterTutorial: Interaktion mit Device Shadow über die Beispiel-App und den MQTT-Testclientaus.