

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
<a name="iot-remote-command-concepts"></a>

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 für die Ausführung auf dem Gerät erforderlichen Konfigurationen enthält.

1. Geben Sie das Zielgerät an, das die Payload empfängt und die Aktionen ausführt.

1. 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](iot-remote-command-workflow.md).

**Topics**
+ [Befehle und wichtige Konzepte](#iot-command-concepts)
+ [Befehlsstatus](#iot-command-states)
+ [Status der Befehlsausführung](#iot-command-execution-status)

## Befehle und wichtige Konzepte
<a name="iot-command-concepts"></a>

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-IoT` Standard-Namespace und geben Sie entweder eine Payload oder PayloadTemplate an. Verwenden Sie für AWS IoT FleetWise Befehle den Namespace. `AWS-IoT-FleetWise` Weitere Informationen finden Sie unter [Remote-Befehle](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-commands.html) im *AWS IoT FleetWise Entwicklerhandbuch*.

**Nutzlast**  
Geben Sie bei der Erstellung 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 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](mqtt.md) Protokoll definiert ist, mit dem Geräte verbunden werden. AWS IoT Details hierzu finden Sie unter [Überlegungen zum Zielgerät](iot-remote-command-execution-start-monitor.md#iot-command-execution-target).

**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](reserved-topics.md#reserved-topics-commands).

**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
<a name="iot-command-parameter-value-conditions"></a>

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](https://docs.aws.amazon.com//iot/latest/apireference/API_CommandParameterValue.html)**

**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](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartCommandExecution.html) ausgewertet. Fehlgeschlagene Validierungen geben einen Fehler zurück und verhindern die Erstellung der Ausführung.

### Priorität und Bewertung des Parameterwerts
<a name="iot-command-parameter-value-priority"></a>

Beim Starten von Befehlsausführungen mit Payload-Vorlagen werden Parameterwerte mit der folgenden Priorität aufgelöst:

1. **Parameter für die Ausführungsanforderung** — Die in der `StartCommandExecution` Anforderung angegebenen Werte haben höchste Priorität

1. **Standardwerte für Befehle** — Wenn ein Parameter in der Ausführungsanforderung nicht angegeben wird, `defaultValue` wird der des Parameters verwendet

1. **Kein 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 verwendet
+ Wenn Sie den Temperaturparameter weglassen, wird der Standardwert 72 verwendet
+ Beide Werte werden anhand der Bereichsbedingung [60,80] validiert

## Befehlsstatus
<a name="iot-command-states"></a>

*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
<a name="iot-command-execution-status"></a>

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](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#commands-limits)

Die folgende Tabelle zeigt den Ausführungsstatus und die zugehörigen Übergänge auf der Grundlage des Ausführungsfortschritts.


**Status und Quelle der Befehlsausführung**  

| Status der Befehlsausführung | Vom Gerät/der Cloud initiiert? | Ausführung im Terminal? | Zulässige Statusübergänge | 
| --- | --- | --- | --- | 
| CREATED | Cloud | Nein |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| IN\$1PROGRESS | Gerät | Nein |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| TIMED\$1OUT | Gerät und Cloud | Nein |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/iot-remote-command-concepts.html)  | 
| 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 verwenden`reasonCode`.

Das folgende Diagramm zeigt die Übergänge beim Ausführungsstatus.

![\[Das Bild zeigt, wie der Ausführungsstatus eines Befehls zwischen verschiedenen Status wechselt.\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/images/command-execution-status-transitions.png)


**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 Wiederholungsversuche und Statusänderungen möglich sind. Wenn Ihr Gerät dies explizit meldet`TIMED_OUT`, wird dies zu einem Terminalstatus ohne weitere Übergänge. Weitere Informationen finden Sie unter [Befehlsausführungen außerhalb des Terminals](#iot-command-execution-status-nonterminal).

In den folgenden Abschnitten werden Ausführungen am Terminal und an anderen Endgeräten sowie deren Status beschrieben.

**Topics**
+ [Befehlsausführungen außerhalb des Terminals](#iot-command-execution-status-nonterminal)
+ [Ausführung von Terminal-Befehlen](#iot-command-execution-status-terminal)

### Befehlsausführungen außerhalb des Terminals
<a name="iot-command-execution-status-nonterminal"></a>

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 `StartCommandExecution` API verwenden, ändert sich der Status erfolgreicher Anfragen in. `CREATED` Von diesem Status aus können Ausführungen in jeden anderen Status übergehen, der kein Terminal oder ein Terminal ist.
+ 

**IN\$1PROGRESS**  
Nach Erhalt der Nutzdaten können die 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 `IN_PROGRESS` Status aktualisieren. Von aus `IN_PROGRESS` können Ausführungen in einen beliebigen Terminal- oder Nicht-Terminal-Status übergehen, außer. `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\$1OUT**  
Sowohl die Cloud als auch das Gerät können diesen Status auslösen. Ausführungen in unserem `CREATED` `IN_PROGRESS` Status können aus den folgenden `TIMED_OUT` Grü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_OUT` In diesem Fall bleibt der Status bestehen`TIMED_OUT`, aber die `StatusReason` Objektfelder ändern sich je nach Geräteinformation. Die Ausführung wird zum Terminal.

  Weitere Informationen finden Sie unter [Timeout-Wert und `TIMED_OUT` Ausführungsstatus](iot-remote-command-execution-start-monitor.md#iot-command-execution-timeout-status).

### Ausführung von Terminal-Befehlen
<a name="iot-command-execution-status-terminal"></a>

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 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.