View a markdown version of this page

Befehle, Konzepte und Status - 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.

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:

  1. Erstellen Sie einen Befehl mit einer Nutzlast, die die Konfigurationen enthält, die für die Ausführung auf dem Gerät erforderlich sind.

  2. Geben Sie das Zielgerät an, das die Payload empfangen soll, und führen Sie die Aktionen aus.

  3. 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-IoT Standard-Namespace und geben Sie entweder eine Payload oder eine PayloadTemplate an. Verwenden Sie für AWS IoT FleetWise Befehle den Namespace. AWS-IoT-FleetWise Weitere 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 entsprechen

  • NOT_EQUALS- Der Wert darf nicht der angegebenen Zahl entsprechen

  • GREATER_THAN- Der Wert muss größer als die angegebene Zahl sein

  • GREATER_THAN_EQUALS- Der Wert muss größer oder gleich der angegebenen Zahl sein

  • LESS_THAN- Der Wert muss kleiner als die angegebene Zahl sein

  • LESS_THAN_EQUALS- Der Wert muss kleiner oder gleich der angegebenen Zahl sein

  • IN_RANGE- Der Wert muss innerhalb des angegebenen Bereichs (einschließlich) liegen

  • NOT_IN_RANGE- Der Wert muss außerhalb des angegebenen Bereichs (einschließlich) liegen

  • IN_SET- Der Wert muss mit einer der angegebenen Zahlen übereinstimmen

  • NOT_IN_SET- Der Wert darf mit keiner der angegebenen Zahlen übereinstimmen

Zeichenfolgentyp (STRING)
  • EQUALS- Der Wert muss der angegebenen Zeichenfolge entsprechen

  • NOT_EQUALS- Der Wert darf nicht der angegebenen Zeichenfolge entsprechen

  • IN_SET- Der Wert muss mit einer der angegebenen Zeichenketten übereinstimmen

  • NOT_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:

  1. Parameter der Ausführungsanforderung — Die in der StartCommandExecution Anfrage angegebenen Werte haben die höchste Priorität

  2. Befehlsstandardwerte — Wenn in der Ausführungsanforderung kein Parameter angegeben ist, defaultValue wird der Parameter des Parameters verwendet

  3. Kein 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 verwendet

  • Wenn 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 und Quelle der Befehlsausführung
Status der Befehlsausführung Initiiert von device/cloud? Terminale Ausführung? Erlaubte Statusübergänge
CREATED Cloud Nein
  • IN_PROGRESS

  • SUCCEEDED

  • FEHLGESCHLAGEN

  • ABGELEHNT

  • TIMED_OUT

IN_PROGRESS Gerät Nein
  • IN_PROGRESS

  • SUCCEEDED

  • FEHLGESCHLAGEN

  • ABGELEHNT

  • ZEITLIMIT ÜBERSCHRITTEN

TIMED_OUT Gerät und Cloud Nein
  • SUCCEEDED

  • FEHLGESCHLAGEN

  • ABGELEHNT

  • TIMED_OUT

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.

Die Abbildung zeigt, wie der Ausführungsstatus eines Befehls zwischen verschiedenen Status wechselt.
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 StartCommandExecution API verwenden, ändern erfolgreiche Anfragen den Status in. CREATED Ab 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_PROGRESS Ab IN_PROGRESS können Ausführungen in einen beliebigen Terminal- oder Nicht-Terminal-Status übergehen, mit Ausnahme von. CREATED

    Anmerkung

    Die UpdateCommandExecution API kann mehrfach mit Status aufgerufen werden. IN_PROGRESS Geben Sie mithilfe des statusReason Objekts zusätzliche Ausführungsdetails an.

  • TIMED_OUT

    Sowohl die Cloud als auch das Gerät können diesen Status auslösen. Der IN_PROGRESS Status von Ausführungen in CREATED oder 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 inTIMED_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_OUT In diesem Fall bleibt der Status erhaltenTIMED_OUT, aber die StatusReason Objektfelder ä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öffentlichenFAILED. Verwenden Sie die reasonDescription Felder reasonCode und im statusReason Objekt 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 UpdateCommandExecution API mit Status REJECTED aufrufen. Verwenden Sie die reasonDescription Felder reasonCode und im statusReason Objekt oder in den CloudWatch Protokollen, um Probleme zu beheben.