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 für die Ausführung auf dem Gerät erforderlichen Konfigurationen enthält.
-
Geben Sie das Zielgerät an, das die Payload empfängt und die Aktionen ausführt.
-
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 Arbeitsablauf für Befehle auf hoher Ebene.
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-Kennung für nicht registrierte Geräte
Payload — Die an Geräte gesendeten Befehlsdaten
Thema — MQTT-Kanal für die Befehlskommunikation
- Befehle
-
Befehle sind Anweisungen, die von der Cloud als MQTT-Nachrichten an Ihre IoT-Geräte gesendet werden. Nach dem Empfang der Nutzdaten verarbeiten die Geräte die Anweisungen und ergreifen entsprechende Aktionen, z. B. das Ändern der Konfigurationseinstellungen, das Übertragen von Sensormesswerten oder das Hochladen von Protokollen. Die Geräte senden 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 seinen Namespace an. Verwenden Sie für AWS IoT Device Management Befehle den
AWS-IoTStandard-Namespace und geben Sie entweder eine Payload oder PayloadTemplate an. Verwenden Sie für AWS IoT FleetWise Befehle den Namespace.AWS-IoT-FleetWiseWeitere Informationen finden Sie unter Remote-Befehle im AWS IoT FleetWise Entwicklerhandbuch. - 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 die Angabe des Payload-Formattyps. Geräte, die das MQTT5 Protokoll verwenden, können zur Identifizierung des Formats dem MQTT-Standard folgen. Formatindikatoren für JSON oder CBOR sind im Thema Befehlsanfrage verfügbar.
- Payload-Vorlage
-
Eine Payload-Vorlage definiert eine Befehls-Payload mit Platzhaltern, die zur Laufzeit auf der Grundlage der von Ihnen angegebenen Parameterwerte unterschiedliche Payloads generieren. Anstatt beispielsweise separate Payloads für verschiedene Temperaturwerte zu erstellen, erstellen Sie eine Vorlage mit einem Temperatur-Platzhalter und geben Sie den Wert während der Ausführung an. Dadurch entfällt die Verwaltung mehrerer ähnlicher Payloads.
- Zielgerät
-
Um einen Befehl auszuführen, geben Sie ein Zielgerät entweder mit seinem Ding-Namen (für registrierte Geräte AWS IoT) oder seiner 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.
- Themen zu Befehlen
-
Vor der Ausführung eines Befehls müssen Geräte das Thema zur 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 die Geräte die Ergebnisse und den Status im Antwortthema des Befehls. Weitere Informationen finden Sie unter Themen zu Befehlen.
- 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 Die geräteseitige Logik bestimmt das Ausführungsverhalten und die Statusberichterstattung für reservierte Themen.
Bedingungen für Parameterwerte
Definieren Sie beim Erstellen von Befehlen mit Payload-Vorlagen Wertbedingungen, um Parameterwerte vor der Ausführung zu validieren. 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 Bewertung des Parameterwerts
Beim Starten von Befehlsausführungen mit Payload-Vorlagen werden Parameterwerte mit der folgenden Priorität aufgelöst:
Parameter für die Ausführungsanforderung — Die in der
StartCommandExecutionAnforderung angegebenen Werte haben höchste PrioritätStandardwerte für Befehle — Wenn ein Parameter in der Ausführungsanforderung nicht angegeben wird,
defaultValuewird der des Parameters verwendetKein Wert — Wenn keiner von beiden angegeben wird, schlägt die Ausführung fehl, da der Parameter für die Generierung der Ausführungsanforderung erforderlich ist
Die Wertbedingungen werden anhand des endgültigen Parameterwerts bewertet, der oben anhand der Priorität abgeleitet wurde, und zwar vor der Erstellung der Ausführung. Schlägt die Überprüfung 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 Starten 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 Status befinden: Verfügbar, Veraltet oder Ausstehende Löschung.
- Verfügbar
-
Nach erfolgreicher Erstellung befindet sich ein Befehl im Status Verfügbar und kann auf Geräten ausgeführt werden.
- Als veraltet gekennzeichnet
-
Kennzeichnet 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 den Status 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 das maximale Timeout (Standard: 12 Stunden) veraltet ist. Diese Aktion ist permanent. Wenn der Befehl nicht oder für weniger als das Timeout veraltet ist, wechselt er in den Status Ausstehende Löschung und wird nach Ablauf des Timeouts entfernt.
Status der Befehlsausführung
Wenn Sie eine Ausführung auf einem Zielgerät starten, geht es in den CREATED Status über und kann auf der Grundlage von Geräteberichten in einen anderen Status übergehen. Sie können Statusinformationen abrufen und Ausführungen nachverfolgen.
Anmerkung
Sie können mehrere Befehle gleichzeitig auf einem Gerät ausführen. Verwenden Sie die Parallelitätssteuerung, um die Ausführungen pro Gerät zu begrenzen und eine Überlastung zu verhindern. Informationen zur maximalen Anzahl gleichzeitiger Ausführungen pro Gerät finden Sie unter Befehlsquoten.AWS IoT Device Management
Die folgende Tabelle zeigt den Ausführungsstatus und die zugehörigen Übergänge auf der Grundlage des Ausführungsfortschritts.
| Status der Befehlsausführung | Von Gerät/Cloud initiiert? | Ausführung im Terminal? | Zulässige 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 reasonDescription Felder im statusReason Objekt verwendenreasonCode.
Das folgende Diagramm zeigt die Übergänge beim Ausführungsstatus.
Anmerkung
Wenn AWS IoT festgestellt wird, dass das Gerät innerhalb des Timeout-Zeitraums nicht reagiert, wird es TIMED_OUT als temporärer Status festgelegt, sodass Wiederholungen und Statusänderungen möglich sind. Wenn Ihr Gerät dies explizit meldetTIMED_OUT, wird dies zu einem Terminalstatus ohne weitere Übergänge. Weitere Informationen finden Sie unter Befehlsausführungen außerhalb des Terminals.
In den folgenden Abschnitten werden Ausführungen am Terminal und an anderen Endgeräten sowie deren Status beschrieben.
Befehlsausführungen außerhalb des Terminals
Eine Ausführung ist kein Terminal, wenn sie Updates von Geräten annehmen kann. Ausführungen, die kein Terminal sind, 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, ändert sich der Status erfolgreicher Anfragen in.CREATEDVon diesem Status aus können Ausführungen in jeden anderen Status übergehen, der kein Terminal oder ein Terminal ist. -
IN_PROGRESS
Nach dem Empfang der Nutzdaten 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 und den Status der Befehle veröffentlichen.
IN_PROGRESSVon ausIN_PROGRESSkönnen Ausführungen in einen beliebigen Terminal- oder Nicht-Terminalstatus übergehen, außer.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. Ausführungen in unserem
CREATEDIN_PROGRESSStatus können aus den folgendenTIMED_OUTGründen auf geändert werden:-
Nach dem Senden des Befehls wird ein Timer gestartet. Wenn das Gerät nicht innerhalb der angegebenen Dauer reagiert, ändert sich der Status der Cloud in
TIMED_OUT. In diesem Fall erfolgt die Ausführung nicht terminalgebunden. -
Das Gerät kann den Status eines beliebigen Terminalstatus außer Kraft setzen oder einen Timeout melden und den Status auf setzen.
TIMED_OUTIn diesem Fall bleibt der Status bestehenTIMED_OUT, aber dieStatusReasonObjektfelder ändern sich je nach Geräteinformation. Die Ausführung wird zum Terminal.
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 von Geräten mehr akzeptiert. Bei den folgenden Status handelt es sich um einen Terminalstatus. Ausführungen können von jedem Status, der kein Terminal ist, in einen 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 des Befehls veröffentlichen und den Status für aktualisieren.
SUCCEEDED -
FEHLGESCHLAGEN
Wenn ein Gerät die Ausführung nicht abschließen kann, kann es eine Antwort auf die Befehle Response Topic und Update Status to 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.