Simulieren der Device Shadow-Servicekommunikation - AWS IoT Core

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.

Simulieren der Device Shadow-Servicekommunikation

In diesem Thema wird veranschaulicht, wie der Device Shadow-Service als Vermittler fungiert und es Geräten und Apps ermöglicht, einen Schatten zum Aktualisieren, Speichern und Abrufen des Status eines Geräts zu verwenden.

Um die in diesem Thema beschriebene Interaktion zu demonstrieren und diese weiter zu untersuchen, benötigen Sie ein AWS Konto und ein System, auf dem Sie die AWS-CLI ausführen können. Wenn Sie diese nicht haben, können Sie die Interaktion immer anhand der Codebeispiele untersuchen.

In diesem Beispiel stellt die AWS IoT Konsole das Gerät dar. Die AWS CLI stellt die App oder den Service dar, die über den Schatten auf das Gerät zugreift. Die AWS CLI-Schnittstelle ist der API sehr ähnlich, über die eine App mit AWS IoT kommunizieren kann. Das Gerät in diesem Beispiel ist eine intelligente Glühlampe, und die App zeigt den Status der Glühlampe an und kann ihren Status ändern.

Einrichten der Simulation

Diese Prozeduren initialisieren die Simulation, indem dieAWS IoT Console, das Ihr Gerät simuliert, und das Befehlszeilenfenster, das Ihre App simuliert.

So richten Sie Ihre Simulationsumgebung ein:

  1. Erstellen Sie ein AWS Konto; falls Sie bereits ein Konto für diese Simulation haben, können Sie diesen Schritt überspringen.

    Für die Beispiele aus diesem Thema ist ein AWS Konto erforderlich, um selbst die Beispiele aus diesem Thema auszuführen. Wenn Sie noch über kein AWS Konto verfügen, erstellen Sie jetzt ein solches Konto, wie in beschrieben.Einrichten Ihres AWS-Kontos.

  2. Öffnen SieAWS IoT ConsoleWählen Sie im linken Menü ausTestKlicken Sie auf, um denMQTT-Client.

  3. Öffnen Sie in einem anderen Fenster ein Terminalfenster auf einem System, auf dem die AWS CLI installiert ist.

Sie sollten zwei Fenster geöffnet haben: eines mit der AWS IoT Konsole auf der SeiteTestund eine mit einer Eingabeaufforderung.

Initialisieren des Geräts

In dieser Simulation arbeiten wir mit einem Objekt namens mySimulatedThing und seinem Schatten namens simShadow1.

Erstellen Sie das Objekt und seinen benannten Schatten

Um ein Objekt zu erstellen, wählen Sie im DialogfeldAWS IoT Console:

  1. Klicken Sie aufVerwaltenKlicken Sie auf und danach aufElemente.

  2. Klicken Sie auf das SymbolGeben Sie einen Namen für den Benutzer ein und klicken Sie dann auf, wenn die Dinge aufgelistet sind, klicken Sie aufRegistrieren Sie ein einzelnes Sache>So erstellen Sie eine einzelne AWS IoT Objekt.

  3. Geben Sie den Namen ein.mySimulatedThing, lassen Sie die Standardeinstellungen für andere Einstellungen, und klicken Sie dann aufWeiter.

  4. Verwenden Sie die Erstellung eines Zertifikats mit einem Klick, um die Zertifikate zu generieren, die die Verbindung des Geräts mit AWS IoT authentifizieren. Klicken aufActivate, um das Zertifikat zu aktivieren.

  5. Sie können die RichtlinieMy_IoT_Policy, die dem Gerät die Berechtigung geben würde, die reservierten MQTT-Themen zu veröffentlichen und zu abonnieren. Ausführlichere Schritte zum Erstellen einer AWS IoT -Sache und zum Erstellen dieser Richtlinie finden Sie unterObjekteobjekt erstellen.

Standardmäßig verfügt jedes AWS IoT -Thingobjekt über einen einzigen, klassischen Schatten. Sie können einen Schatten erstellen, indem Sie eine Aktualisierungsanforderung im Thema$aws/things/mySimulatedThing/shadow/name/simShadow1/updatewie unten beschrieben, alternativ in derAWS IoT Console, wählen Sie Ihr Objekt in der Liste der angezeigten Dinge aus und wählen Sie dannShadows. Klicken Sie aufHinzufügen eines ShadowsGeben Sie den Namen ein.simShadow1Klicken Sie auf und danach aufGeben Sie einen Namen für den Benutzer ein und klicken Sie dann auf, um den benannten Schatten hinzuzufügen.

Reservierte MQTT-Themen abonnieren und veröffentlichen

Abonnieren Sie in der -Konsole die reservierten MQTT-Schatten-Themen. Diese Themen sind die Antworten auf die Aktionen get, update und delete, damit Ihr Gerät bereit ist, die Antworten zu empfangen, nachdem es eine Aktion veröffentlicht hat.

So abonnieren Sie ein MQTT-Thema im MQTT-Client:

  1. In derMQTT-Client, wählen SieAbonnieren eines -Themas.

  2. Geben Sie denget,update, unddeleteThemen, die Sie abonnieren möchten. Kopieren Sie jeweils ein Thema aus der folgenden Liste, fügen Sie es in das FeldThemenfilterKlicken Sie auf und dann aufAbonnieren. Sie sollten Folgendes sehen:Abonnements.

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents

    An diesem Punkt ist Ihr simuliertes Gerät bereit, die Themen zu erhalten, während sie von AWS IoT veröffentlicht werden.

So veröffentlichen Sie in einem MQTT-Thema im AbschnittMQTT-Client

Nachdem ein Gerät sich selbst initialisiert und die Antwortthemen abonniert hat, sollte Abfragen nach den unterstützten Schatten durchführen. Diese Simulation unterstützt nur einen Schatten, den Schatten, der ein Objekt namens MySimulatedThing unterstützt und den Namen SimShadow1 hat.

So rufen Sie den aktuellen Schattenstatus vom MQTT-Client ab:

  1. Wählen Sie im MQTT-Client die Option Publish to a topic (In einem Thema veröffentlichen) aus.

  2. UNDERVeröffentlichenGeben Sie das folgende Thema ein und löschen Sie alle Inhalte aus dem Nachrichtentextfenster, in dem Sie das abzurufende Thema eingegeben haben. Sie können dannPublish to topic, um die Anforderung zu veröffentlichen.$aws/things/mySimulatedThing/shadow/name/simShadow1/get.

    Wenn Sie noch nicht den benannten Schatten erstellt haben, wirdsimShadow1, erhalten Sie eine Nachricht in der$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected-Themacodeist404Wie in diesem Beispiel, da der Schatten noch nicht erstellt wurde, erstellen wir ihn daher als Nächstes.

    { "code": 404, "message": "No shadow exists with name: 'simShadow1'" }

So erstellen Sie einen Schatten mit dem aktuellen Status des Geräts:

  1. In derMQTT-Client, wählen SieVeröffentlichung für ein Themaund geben Sie dieses Thema ein:

    $aws/things/mySimulatedThing/shadow/name/simShadow1/update
  2. Geben Sie im Nachrichtentextfenster, in dem Sie das Thema eingegeben haben, dieses Schattendokument ein, um anzuzeigen, dass das Gerät seine ID und seine aktuelle Farbe in RGB-Werten meldet. Klicken Sie aufVeröffentlichen, um die Anforderung zu veröffentlichen.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Wenn Sie eine Nachricht im -Thema erhalten:

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted: Es bedeutet, dass der Schatten erstellt wurde, und der Nachrichtentext enthält das aktuelle Schattendokument.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejectedReagieren Sie auf den Fehler im Nachrichtentext.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted: Der Nachrichtentext ist bereits vorhanden, und der Nachrichtentext hat den aktuellen Schattenstatus, wie in diesem Beispiel. Damit können Sie Ihr Gerät einstellen oder bestätigen, dass es mit dem Schattenstatus übereinstimmt.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591140517, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Senden einer Aktualisierung von der App

In diesem Abschnitt wird die AWS CLI verwendet, um zu zeigen, wie eine App mit einem Schatten interagieren kann.

So erhalten Sie den aktuellen Status des Schattens mithilfe der AWS CLI:

Geben Sie in der Befehlszeile den folgenden Befehl ein.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

Auf Windows-Plattformen können Sie außerdem Folgendes verwenden:conanstelle von/dev/stdout.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con

Da der Schatten vorhanden ist und vom Gerät initialisiert wurde, um seinen aktuellen Zustand wiederzugeben, sollte das folgende Schattendokument zurückgegeben werden.

{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591141111 }

Die App kann diese Antwort verwenden, um die Darstellung des Gerätestatus zu initialisieren.

Wenn die App den Status aktualisiert, z. B. wenn ein Endbenutzer die Farbe unserer intelligenten Glühlampe zu Gelb ändert, sendet die App einen update-thing-shadow-Befehl. Dieser Befehl entspricht der UpdateThingShadow-REST-API.

So aktualisieren Sie einen Schatten aus einer App:

Geben Sie in der Befehlszeile den folgenden Befehl ein.

AWS CLI v2.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --cli-binary-format raw-in-base64-out \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
AWS CLI v1.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout

Wenn dieser Befehl erfolgreich ist, sollte das folgende Schattendokument zurückgegeben werden.

{ "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] } }, "version": 4, "timestamp": 1591141596, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Reaktion auf eine Aktualisierung im Gerät

Rückgabe an denMQTT-Clientin der AWS-Konsole sollten Sie die Meldungen sehen, die AWS IoT veröffentlicht hat, um den im vorherigen Abschnitt ausgegebenen Aktualisierungsbefehl widerzuspiegeln.

So zeigen Sie die Aktualisierungsmeldungen im MQTT-Client an:

Wählen Sie im MQTT-Client, $aws/things/mySimulatedThing/Shadow/Name/SimShadow1/update/delta in der Spalte Subscriptions (Abonnements) . Wenn der Themenname abgeschnitten wird, können Sie ihn anhalten, um das vollständige Thema anzuzeigen. Im Themenprotokoll dieses Themas sollten Sie eine/delta-Nachricht ähnlich wie diese.

{ "version": 4, "timestamp": 1591141596, "state": { "ColorRGB": [ 255, 255, 0 ] }, "metadata": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Ihr Gerät verarbeitet den Inhalt dieser Nachricht, um den Gerätestatus so festzulegen, dass er mit dem desired-Status in der Nachricht übereinstimmt.

Nachdem das Gerät den Status so aktualisiert hat, dass er mit derdesiredDer neue gemeldete Status in der Nachricht muss den neuen gemeldeten Status an AWS IoT zurücksenden, indem eine Aktualisierungsmeldung veröffentlicht wird. Dieses Verfahren simuliert dies im MQTT-Client.

So aktualisieren Sie den Schatten vom Gerät aus:

  1. Wählen Sie im MQTT-Client die Option Publish to a topic (In einem Thema veröffentlichen) aus.

  2. Geben Sie im Nachrichtentext im Themenfeld oberhalb des Nachrichtentextfensters das Thema des Schattens ein, gefolgt von der/updateAktion$aws/things/mySimulatedThing/shadow/name/simShadow1/updateGeben Sie im Nachrichtentext dieses aktualisierte Schattendokument ein, das den aktuellen Status des Geräts beschreibt. Klicken aufVeröffentlichenSo veröffentlichen Sie den aktualisierten Gerätestatus.

    { "state": { "reported": { "ColorRGB": [255,255,0] } }, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

    Wenn die Nachricht erfolgreich von AWS IoT empfangen wurde, sollten Sie eine neue Antwort im Abschnitt$aws/things/things/mySimulatedThing/Shadow/Name/SimShadow1/update/accepted-Meldungsprotokoll imMQTT-ClientSo erhalten Sie den aktuellen Status des Schattens, wie in diesem Beispiel.

    { "state": { "reported": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "reported": { "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Eine erfolgreiche Aktualisierung des gemeldeten Status des Geräts bewirkt auch, dass AWS IoT eine umfassende Beschreibung des Schattenstatus in einer Nachricht an diez. B. diesen Nachrichtentext, der aus der Schattenaktualisierung resultiert, die vom Gerät im vorherigen Verfahren durchgeführt wurde.

{ "previous": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 4 }, "current": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5 }, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Beobachten Sie das Update in der App

Die App kann jetzt den Schatten nach dem aktuellen Status abfragen, wie vom Gerät gemeldet.

So erhalten Sie den aktuellen Status des Schattens mithilfe der AWS CLI:

  1. Geben Sie in der Befehlszeile den folgenden Befehl ein.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

    Auf Windows-Plattformen können Sie außerdem Folgendes verwenden:conanstelle von/dev/stdout.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
  2. Da der Schatten gerade vom Gerät aktualisiert wurde, um seinen aktuellen Zustand wiederzugeben, sollte er das folgende Schattendokument zurückgeben.

    { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591143269 }

Über die Simulation hinaus

Experimentieren Sie mit der Interaktion zwischen der AWS CLI (für die App) und der Konsole (für das Gerät), um Ihre IoT Lösung zu modellieren.