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.
Befehle, Konzepte und Status
Verwenden Sie AWS IoT Befehle, um Anweisungen aus der Cloud an verbundene Geräte zu senden. Um dieses Feature zu verwenden:
-
Erstellen Sie einen Befehl mit einer Nutzlast, die die Konfigurationen enthält, die für die Ausführung auf dem Gerät erforderlich sind.
-
Geben Sie das Zielgerät an, das die Payload empfangen soll, und führen Sie die Aktionen aus.
-
Führen Sie den Befehl auf dem Zielgerät aus und rufen Sie Statusinformationen ab. Informationen zur Behebung von Problemen finden Sie in den CloudWatch Protokollen.
Weitere Informationen zu diesem Workflow finden Sie unter High-level Arbeitsablauf für Befehle.
Befehle und wichtige Konzepte
Die folgenden Schlüsselkonzepte helfen Ihnen, die Befehlsfunktion zu verstehen. Begriffe werden in dieser Dokumentation einheitlich verwendet:
Befehl — Eine wiederverwendbare Vorlage, die Geräteanweisungen definiert
Ausführung — Eine Instanz eines Befehls, der auf einem Gerät ausgeführt wird
Name der Sache — Kennung für Geräte, die in der IoT-Registrierung registriert sind
Client-ID — MQTT-ID für nicht registrierte Geräte
Payload — Die an Geräte gesendeten Anweisungsdaten
Thema — MQTT-Kanal für die Befehlskommunikation
- Befehle
-
Befehle sind Anweisungen, die als MQTT-Nachrichten von der Cloud an Ihre IoT-Geräte gesendet werden. Nach Erhalt der Payload verarbeiten die Geräte die Anweisungen und ergreifen entsprechende Maßnahmen, z. B. das Ändern der Konfigurationseinstellungen, das Übertragen von Sensorwerten oder das Hochladen von Protokollen. Die Geräte geben dann die Ergebnisse an die Cloud zurück und ermöglichen so die Fernüberwachung und -steuerung.
- Namespace
-
Wenn Sie einen Befehl erstellen, geben Sie dessen Namespace an. Verwenden Sie für AWS IoT Device Management Befehle den
AWS-IoTStandard-Namespace und geben Sie entweder eine Payload oder eine PayloadTemplate an. Verwenden Sie für AWS IoT FleetWise Befehle den Namespace.AWS-IoT-FleetWiseWeitere Informationen finden Sie im AWS IoT FleetWise Entwicklerhandbuch unter Remote-Befehle. - Nutzlast
-
Geben Sie beim Erstellen eines Befehls eine statische Nutzlast an, die die Aktionen definiert, die das Gerät ausführen muss. Die Payload kann jedes unterstützte Format verwenden. Um sicherzustellen, dass Geräte die Payload korrekt interpretieren, empfehlen wir, den Payload-Formattyp anzugeben. Geräte, die das MQTT5-Protokoll verwenden, können dem MQTT-Standard folgen, um das Format zu identifizieren. Formatindikatoren für JSON oder CBOR sind im Thema zur Befehlsanforderung verfügbar.
- Payload-Vorlage
-
Eine Payload-Vorlage definiert eine Befehlsnutzlast mit Platzhaltern, die zur Laufzeit auf der Grundlage der von Ihnen angegebenen Parameterwerte unterschiedliche Nutzlasten generieren. Anstatt beispielsweise separate Payloads für verschiedene Temperaturwerte zu erstellen, erstellen Sie eine Vorlage mit einem Temperatur-Platzhalter und geben Sie den Wert bei der Ausführung an. Dadurch entfällt die Verwaltung mehrerer ähnlicher Nutzlasten.
- Zielgerät
-
Um einen Befehl auszuführen, geben Sie ein Zielgerät entweder mit seinem Ding-Namen (für Geräte, die registriert sind AWS IoT) oder mit der MQTT-Client-ID (für nicht registrierte Geräte) an. Die Client-ID ist eine eindeutige Kennung, die in dem MQTT Protokoll definiert ist, mit dem Geräte verbunden werden. AWS IoT Details hierzu finden Sie unter Überlegungen zum Zielgerät.
- Befehle, Themen
-
Bevor ein Befehl ausgeführt wird, müssen Geräte das Thema für die Befehlsanforderung abonnieren. Wenn Sie einen Befehl ausführen, wird die Payload zu diesem Thema an das Gerät gesendet. Nach der Ausführung veröffentlichen Geräte Ergebnisse und Status im Antwortthema „Befehle“. Weitere Informationen finden Sie unter Befehle, Themen.
- Ausführung von Befehlen
-
Eine Ausführung ist eine Instanz eines Befehls, der auf einem Zielgerät ausgeführt wird. Wenn Sie eine Ausführung starten, wird die Nutzlast an das Gerät übermittelt und eine eindeutige Ausführungs-ID wird generiert. Das Gerät führt den Befehl aus und meldet den Fortschritt an. AWS IoT Device-side Die Logik bestimmt das Ausführungsverhalten und die Statusberichterstattung zu reservierten Themen.
Bedingungen für Parameterwerte
Definieren Sie beim Erstellen von Befehlen mit Payload-Vorlagen Wertbedingungen, um Parameterwerte vor der Ausführung zu überprüfen. Wertbedingungen stellen sicher, dass die Parameter die Anforderungen erfüllen, und verhindern so ungültige Ausführungen.
Unterstützte Operatoren nach Typ CommandParameterValue
- Numerische Typen (INTEGER, LONG, DOUBLE, UNSIGNEDLONG)
-
EQUALS- Der Wert muss der angegebenen Zahl entsprechenNOT_EQUALS- Der Wert darf nicht der angegebenen Zahl entsprechenGREATER_THAN- Der Wert muss größer als die angegebene Zahl seinGREATER_THAN_EQUALS- Der Wert muss größer oder gleich der angegebenen Zahl seinLESS_THAN- Der Wert muss kleiner als die angegebene Zahl seinLESS_THAN_EQUALS- Der Wert muss kleiner oder gleich der angegebenen Zahl seinIN_RANGE- Der Wert muss innerhalb des angegebenen Bereichs (einschließlich) liegenNOT_IN_RANGE- Der Wert muss außerhalb des angegebenen Bereichs (einschließlich) liegenIN_SET- Der Wert muss mit einer der angegebenen Zahlen übereinstimmenNOT_IN_SET- Der Wert darf mit keiner der angegebenen Zahlen übereinstimmen
- Zeichenfolgentyp (STRING)
-
EQUALS- Der Wert muss der angegebenen Zeichenfolge entsprechenNOT_EQUALS- Der Wert darf nicht der angegebenen Zeichenfolge entsprechenIN_SET- Der Wert muss mit einer der angegebenen Zeichenketten übereinstimmenNOT_IN_SET- Der Wert darf mit keiner der angegebenen Zeichenketten übereinstimmen
- Boolescher Typ
-
Wertbedingungen werden nicht unterstützt
- Binärer Typ
-
Wertbedingungen werden nicht unterstützt
Beispiel: Befehl zur Temperatursteuerung
{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }
In diesem Beispiel muss der temperature Parameter zwischen 60 und 80 (einschließlich) liegen. Ausführungsanforderungen mit Werten außerhalb dieses Bereichs schlagen bei der Überprüfung fehl.
Anmerkung
Wertbedingungen werden beim Aufruf der StartCommandExecution API ausgewertet. Fehlgeschlagene Validierungen geben einen Fehler zurück und verhindern die Erstellung der Ausführung.
Priorität und Auswertung von Parameterwerten
Wenn Befehlsausführungen mit Payload-Vorlagen gestartet werden, werden Parameterwerte mit der folgenden Priorität aufgelöst:
Parameter der Ausführungsanforderung — Die in der
StartCommandExecutionAnfrage angegebenen Werte haben die höchste PrioritätBefehlsstandardwerte — Wenn in der Ausführungsanforderung kein Parameter angegeben ist,
defaultValuewird der Parameter des Parameters verwendetKein Wert — Wenn keiner angegeben wird, schlägt die Ausführung fehl, da der Parameter zum Generieren der Ausführungsanforderung erforderlich ist
Die Wertbedingungen werden anhand des endgültigen Parameterwerts ausgewertet, der oben anhand der Priorität und vor der Erstellung der Ausführung abgeleitet wurde. Schlägt die Validierung fehl, gibt die Ausführungsanforderung einen Fehler zurück.
Beispiel: SetTemperature Befehl mit defaultValue
{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }
Beim Start der Ausführung:
Wenn Sie
"temperature": {"I": 75}in der Anfrage angeben, wird 75 verwendetWenn Sie den Temperaturparameter weglassen, wird der Standardwert 72 verwendet
Beide Werte werden anhand der Bereichsbedingung [60,80] validiert
Befehlsstatus
Befehle in Ihrem AWS-Konto können sich in einem von drei Zuständen befinden: Verfügbar, Veraltet oder Ausstehend.
- Verfügbar
-
Nach erfolgreicher Erstellung befindet sich ein Befehl im Status Verfügbar und kann auf Geräten ausgeführt werden.
- Als veraltet gekennzeichnet
-
Markieren Sie Befehle als veraltet, wenn sie nicht mehr benötigt werden. Veraltete Befehle können keine neuen Ausführungen starten, aber ausstehende Ausführungen werden bis zum Abschluss fortgesetzt. Um neue Ausführungen zu ermöglichen, setzen Sie den Befehl auf Verfügbar zurück.
- Löschen ausstehend
-
Wenn Sie einen Befehl zum Löschen markieren, wird er automatisch gelöscht, wenn er länger als der maximale Timeout veraltet ist (Standardeinstellung: 12 Stunden). Diese Aktion ist permanent. Wenn der Befehl nicht veraltet ist oder vor Ablauf des Timeouts als veraltet gilt, wechselt er in den Status Ausstehender Löschvorgang und wird nach Ablauf des Timeouts entfernt.
Status der Befehlsausführung
Wenn Sie eine Ausführung auf einem Zielgerät starten, wechselt das Gerät in den CREATED Status und kann aufgrund von Geräteberichten in einen anderen Status übergehen. Sie können Statusinformationen abrufen und Ausführungen verfolgen.
Anmerkung
Sie können mehrere Befehle gleichzeitig auf einem Gerät ausführen. Verwenden Sie die Parallelitätssteuerung, um die Ausführung pro Gerät zu begrenzen und eine Überlastung zu verhindern. Informationen zur maximalen Anzahl gleichzeitiger Ausführungen pro Gerät finden Sie unter Befehlskontingente. AWS IoT Device Management
Die folgende Tabelle zeigt den Ausführungsstatus und ihre Übergänge auf der Grundlage des Ausführungsfortschritts.
| Status der Befehlsausführung | Initiiert von device/cloud? | Terminale Ausführung? | Erlaubte Statusübergänge |
|---|---|---|---|
CREATED |
Cloud | Nein |
|
IN_PROGRESS |
Gerät | Nein |
|
TIMED_OUT |
Gerät und Cloud | Nein |
|
SUCCEEDED |
Gerät | Ja | Nicht zutreffend |
FAILED |
Gerät | Ja | Nicht zutreffend |
REJECTED |
Gerät | Ja | Nicht zutreffend |
Geräte können Status- und Ergebnisaktualisierungen jederzeit mithilfe von Befehlen veröffentlichen, die MQTT-Themen vorbehalten sind. Um zusätzlichen Kontext bereitzustellen, können Geräte reasonCode und reasonDescription Felder im statusReason Objekt verwenden.
Das folgende Diagramm zeigt Übergänge zum Ausführungsstatus.
Anmerkung
Wenn innerhalb des Timeout-Zeitraums keine Reaktion des Geräts AWS IoT festgestellt wird, wird ein temporärer Status festgelegtTIMED_OUT, der Wiederholungen und Statusänderungen ermöglicht. Wenn sich Ihr Gerät explizit meldetTIMED_OUT, wird dies in einen Terminalstatus ohne weitere Übergänge umgewandelt. Weitere Informationen finden Sie unter Non-terminal Befehlsausführungen.
In den folgenden Abschnitten werden Terminalausführungen und andere Terminalausführungen sowie deren Status beschrieben.
Non-terminal Befehlsausführungen
Eine Ausführung ist nicht terminal, wenn sie Aktualisierungen von Geräten annehmen kann. Non-terminal Ausführungen werden als aktiv betrachtet. Die folgenden Status sind nicht terminal:
-
CREATED
Wenn Sie eine Ausführung von der AWS IoT Konsole aus starten oder die
StartCommandExecutionAPI verwenden, ändern erfolgreiche Anfragen den Status in.CREATEDAb diesem Status können Ausführungen in einen beliebigen anderen Status übergehen, der kein Terminal oder ein Terminal ist. -
IN_PROGRESS
Nach Erhalt der Payload können Geräte mit der Ausführung von Anweisungen und der Ausführung bestimmter Aktionen beginnen. Während der Ausführung können Geräte Antworten auf das Antwortthema der Befehle veröffentlichen und den Status von aktualisieren.
IN_PROGRESSAbIN_PROGRESSkönnen Ausführungen in einen beliebigen Terminal- oder Nicht-Terminal-Status übergehen, mit Ausnahme von.CREATEDAnmerkung
Die
UpdateCommandExecutionAPI kann mehrfach mit Status aufgerufen werden.IN_PROGRESSGeben Sie mithilfe desstatusReasonObjekts zusätzliche Ausführungsdetails an. -
TIMED_OUT
Sowohl die Cloud als auch das Gerät können diesen Status auslösen. Der
IN_PROGRESSStatus von Ausführungen inCREATEDoder kann sich aus den folgenden Gründen in ändern:TIMED_OUT-
Nach dem Senden des Befehls startet ein Timer. Wenn das Gerät innerhalb der angegebenen Dauer nicht reagiert, ändert sich der Status der Cloud in
TIMED_OUT. In diesem Fall erfolgt die Ausführung nicht terminal. -
Das Gerät kann den Status auf einen beliebigen Terminalstatus überschreiben oder einen Timeout melden und den Status auf setzen.
TIMED_OUTIn diesem Fall bleibt der Status erhaltenTIMED_OUT, aber dieStatusReasonObjektfelder ändern sich je nach Geräteinformationen. Die Ausführung wird zum Endpunkt.
Weitere Informationen finden Sie unter Timeout-Wert und TIMED_OUT-Ausführungsstatus.
-
Ausführung von Terminal-Befehlen
Eine Ausführung wird zum Terminal, wenn sie keine Updates mehr von Geräten akzeptiert. Die folgenden Status haben den Status „Terminal“. Ausführungen können von jedem Status, der kein Terminal ist, in den Terminalstatus übergehen:CREATED, oder. IN_PROGRESS TIMED_OUT
-
SUCCEEDED
Wenn das Gerät die Ausführung erfolgreich abgeschlossen hat, kann es eine Antwort auf das Antwortthema und die Statusaktualisierung der Befehle veröffentlichen.
SUCCEEDED -
FEHLGESCHLAGEN
Wenn ein Gerät die Ausführung nicht abschließen kann, kann es eine Antwort auf das Antwortthema und den Aktualisierungsstatus der Befehle veröffentlichen
FAILED. Verwenden Sie diereasonDescriptionFelderreasonCodeund imstatusReasonObjekt oder in den CloudWatch Protokollen, um Fehler zu beheben. -
ABGELEHNT
Wenn ein Gerät eine ungültige oder inkompatible Anfrage erhält, kann es die
UpdateCommandExecutionAPI mit StatusREJECTEDaufrufen. Verwenden Sie diereasonDescriptionFelderreasonCodeund imstatusReasonObjekt oder in den CloudWatch Protokollen, um Probleme zu beheben.