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.
Befehlsausführungen starten und überwachen
Nachdem Sie eine Befehlsressource erstellt haben, können Sie eine Befehlsausführung auf dem Zielgerät starten. Sobald das Gerät mit der Ausführung des Befehls beginnt, kann es damit beginnen, das Ergebnis der Befehlsausführung zu aktualisieren und Statusaktualisierungen und Ergebnisinformationen zu den MQTT reservierten Themen zu veröffentlichen. Anschließend können Sie den Status der Befehlsausführung abrufen und den Status der Ausführungen in Ihrem Konto überwachen.
In diesem Abschnitt wird gezeigt, wie Sie Befehle sowohl mit der AWS IoT Konsole als auch mit dem starten und überwachen können. AWS CLI
Befehlsvorgänge starten und überwachen
Starten Sie die Ausführung eines Befehls
Wichtig
Sie sind allein dafür verantwortlich, Befehle auf sichere und gesetzeskonforme Weise bereitzustellen.
Bevor Sie mit der Ausführung eines Befehls beginnen, müssen Sie Folgendes sicherstellen:
-
Sie haben einen Befehl im AWS IoT Namespace erstellt und die Payload-Informationen bereitgestellt. Wenn Sie mit der Ausführung des Befehls beginnen, verarbeitet das Gerät die Anweisungen in der Payload und führt die angegebenen Aktionen aus. Hinweise zum Erstellen von Befehlen finden Sie unterErstellen Sie eine Befehlsressource.
-
Ihr Gerät hat die MQTT reservierten Themen für Befehle abonniert. Wenn Sie die Befehlsausführung starten, werden die Payload-Informationen unter dem folgenden Thema für reservierte MQTT Anfragen veröffentlicht.
In diesem Fall
<devices>
kann es sich entweder um IoT-Dinge oder MQTT Clients handeln und<DeviceID>
ist der Name der Sache oder die Client-ID. Die unterstützten<PayloadFormat>
sind JSON undCBOR. Weitere Informationen zu Befehlen finden Sie unterThemen zu Befehlen.$aws/commands/
<devices>
/<DeviceID>
/executions/+/request/<PayloadFormat>
Falls dies nicht der Fall
<PayloadFormat>
ist JSON undCBOR, wird im Folgenden das Themenformat der Befehle beschrieben.$aws/commands/
<devices>
/<DeviceID>
/executions/+/request
Wenn Sie den Befehl ausführen möchten, müssen Sie das Zielgerät angeben, das den Befehl empfangen und die angegebenen Anweisungen ausführen soll. Das Zielgerät kann entweder ein AWS IoT Ding oder die Client-ID sein, falls das Gerät nicht in der AWS IoT Registrierung registriert wurde. Nach Erhalt der Befehlspayload kann das Gerät mit der Ausführung des Befehls beginnen und die angegebenen Aktionen ausführen.
AWS IoT Sache
Das Zielgerät für den Befehl kann ein AWS IoT Ding sein, das Sie in der AWS IoT Ding-Registrierung registriert haben. Dinge AWS IoT , die darin enthalten sind, erleichtern die Suche und Verwaltung Ihrer Geräte.
Sie können Ihr Gerät als eine Sache registrieren, wenn Sie Ihr Gerät über die Seite „Gerät verbindenCreateThing
API. AWS IoT Sie finden ein vorhandenes Ding, für das Sie den Befehl ausführen möchten, auf der Thing Hub-SeiteDescribeThing
API. Informationen dazu, wie Sie Ihr Gerät als AWS IoT Ding registrieren, finden Sie unter Dinge mit der Registrierung verwalten.
Client-ID
Wenn Ihr Gerät nicht als Ding bei registriert wurde AWS IoT, können Sie stattdessen die Client-ID verwenden.
Die Client-ID ist eine eindeutige Kennung, die Sie Ihrem Gerät oder Client zuweisen. Die Client-ID ist im MQTT Protokoll definiert und kann alphanumerische Zeichen, Unterstriche oder Bindestriche enthalten. Sie muss für jedes Gerät, mit dem eine Verbindung hergestellt wird, eindeutig sein. AWS IoT
Anmerkung
-
Wenn Ihr Gerät als Ding in der AWS IoT Registrierung registriert wurde, kann die Client-ID mit dem Namen des Dings identisch sein.
-
Wenn Ihre Befehlsausführung auf eine bestimmte MQTT Client-ID abzielt, muss Ihr Gerät über dieselbe Client-ID eine Verbindung herstellen, um die Befehls-Payload aus dem Thema Client-ID-basierte Befehle zu AWS IoT erhalten.
Die Client-ID ist in der Regel die MQTT Client-ID, mit der Ihre Geräte eine Verbindung herstellen AWS IoT Core können. Diese ID wird verwendet AWS IoT , um jedes spezifische Gerät zu identifizieren und Verbindungen und Abonnements zu verwalten.
Das Timeout gibt die Dauer in Sekunden an, innerhalb derer Ihr Gerät das Ergebnis der Befehlsausführung bereitstellen kann.
Nachdem Sie eine Befehlsausführung erstellt haben, wird ein Timer gestartet. Wenn das Gerät offline gegangen ist oder das Ausführungsergebnis nicht innerhalb der Timeoutdauer gemeldet werden konnte, wird die Befehlsausführung unterbrochen und der Ausführungsstatus wird als TIMED_OUT
angezeigt.
Dieses Feld ist optional und wird standardmäßig auf 10 Sekunden gesetzt, wenn Sie keinen Wert angeben. Sie können das Timeout auch auf einen Höchstwert von 12 Stunden konfigurieren.
Timeout-Wert und TIMED_OUT
Ausführungsstatus
Ein Timeout kann sowohl von der Cloud als auch vom Gerät gemeldet werden.
Nachdem der Befehl an das Gerät gesendet wurde, startet ein Timer. Wenn innerhalb der angegebenen Timeout-Dauer keine Antwort vom Gerät empfangen wurde, wie oben beschrieben. In diesem Fall legt die Cloud den Befehlsausführungsstatus TIMED_OUT
mit dem Ursachencode auf fest$NO_RESPONSE_FROM_DEVICE
.
Dies kann in einem der folgenden Fälle passieren.
-
Das Gerät ging während der Ausführung des Befehls offline.
-
Das Gerät konnte die Ausführung des Befehls nicht innerhalb der angegebenen Dauer abschließen.
-
Das Gerät konnte die aktualisierten Statusinformationen nicht innerhalb der Timeoutdauer melden.
Wenn in diesem Fall der Ausführungsstatus von aus der Cloud gemeldet TIMED_OUT
wird, erfolgt die Befehlsausführung nicht terminalgebunden. Ihr Gerät kann eine Antwort veröffentlichen, die den Status eines beliebigen Terminalstatus,SUCCEEDED
, FAILED
oder überschreibt. REJECTED
Die Befehlsausführung erfolgt jetzt im Terminal und akzeptiert keine weiteren Updates.
Ihr Gerät kann auch einen von der Cloud initiierten TIMED_OUT
Status aktualisieren, indem es meldet, dass bei der Ausführung des Befehls ein Timeout aufgetreten ist. In diesem Fall bleibt der Status der Befehlsausführung unverändert, das statusReason
Objekt wird TIMED_OUT
jedoch auf der Grundlage der vom Gerät gemeldeten Informationen aktualisiert. Die Befehlsausführung wird nun zum Terminal und es werden keine weiteren Aktualisierungen akzeptiert.
Verwenden MQTT persistenter Sitzungen
Sie können MQTT persistente Sitzungen für die Verwendung mit der AWS IoT Device Management Befehlsfunktion konfigurieren. Diese Funktion ist besonders nützlich, wenn Ihr Gerät offline geht und Sie sicherstellen möchten, dass das Gerät den Befehl auch dann empfängt, wenn es vor Ablauf des Timeouts wieder online ist, und die angegebenen Anweisungen ausführt.
Standardmäßig ist der Ablauf einer MQTT persistenten Sitzung auf 60 Minuten festgelegt. Wenn Ihr Timeout für die Befehlsausführung auf einen Wert konfiguriert ist, der diese Dauer überschreitet, können Befehlsausführungen, die länger als 60 Minuten dauern, vom Message Broker abgelehnt werden und sie können fehlschlagen. Um Befehle auszuführen, die länger als 60 Minuten dauern, können Sie eine Verlängerung der Ablaufzeit für persistente Sitzungen beantragen.
Anmerkung
Um sicherzustellen, dass Sie die Funktion für MQTT persistente Sitzungen korrekt verwenden, stellen Sie sicher, dass das Clean Start-Flag auf Null gesetzt ist. Weitere Informationen finden Sie unter MQTTPersistente Sitzungen.
Um mit der Ausführung des Befehls von der Konsole aus zu beginnen, rufen Sie die Command Hub-Seite
-
Um den von Ihnen erstellten Befehl auszuführen, wählen Sie Befehl ausführen.
-
Lesen Sie die Informationen zu dem Befehl, den Sie erstellt haben, zur Payload-Datei und zum Formattyp sowie zu den reservierten MQTT Themen.
-
Geben Sie das Zielgerät an, für das Sie den Befehl ausführen möchten. Das Gerät kann als AWS IoT Ding angegeben werden, wenn es registriert wurde AWS IoT, oder mithilfe der Client-ID, falls Ihr Gerät noch nicht registriert wurde. Weitere Informationen finden Sie unter Überlegungen zum Zielgerät
-
(Optional) Konfigurieren Sie einen Timeout-Wert für den Befehl, der die Dauer festlegt, für die der Befehl ausgeführt werden soll, bevor das Timeout eintritt. Wenn Ihr Befehl länger als 60 Minuten ausgeführt werden muss, müssen Sie möglicherweise die Ablaufzeit für MQTT persistente Sitzungen erhöhen. Weitere Informationen finden Sie unter Überlegungen zum Timeout bei der Befehlsausführung.
-
Wählen Sie Befehl ausführen aus.
Verwenden Sie die API Operation auf der StartCommandExecution
HTTPDatenebene, um eine Befehlsausführung zu starten. Die API Anfrage und die Antwort werden anhand der Befehlsausführungs-ID korreliert. Nachdem das Gerät die Ausführung des Befehls abgeschlossen hat, kann es den Status und das Ausführungsergebnis an die Cloud melden, indem es eine Nachricht im Antwortthema des Befehls veröffentlicht. Bei einem benutzerdefinierten Antwortcode können Anwendungscodes, deren Eigentümer Sie sind, die Antwortnachricht verarbeiten und das Ergebnis an sie senden AWS IoT.
Wenn Ihre Geräte das Thema für die Befehlsanfrage abonniert haben, StartCommandExecution
API wird die Payload-Meldung zum Thema veröffentlicht. Die Payload kann ein beliebiges Format Ihrer Wahl verwenden. Weitere Informationen finden Sie unter Payload des Befehls.
$aws/commands/
<devices>
/<DeviceID>
/executions/+/request/<PayloadFormat>
Wenn das Payload-Format nicht JSON oder istCBOR, wird im Folgenden das Format des Themas zur Befehlsanfrage angezeigt.
$aws/commands/
<devices>
/<DeviceID>
/executions/+/request
Beispiel für eine Richtlinie IAM
Bevor Sie diesen API Vorgang verwenden, stellen Sie sicher, dass Ihre IAM Richtlinie Sie autorisiert, diese Aktion auf dem Gerät durchzuführen. Das folgende Beispiel zeigt eine IAM Richtlinie, die dem Benutzer die Erlaubnis erteilt, die StartCommandExecution
Aktion auszuführen.
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wie zum Beispielregion
ap-south-1
. -
mit deiner AWS-Konto Nummer, wieaccount-id
.123456789012
-
mit einer eindeutigen Kennung für Ihren AWS IoT Befehl, wiecommand-id
z. Wenn Sie mehr als einen Befehl senden möchten, können Sie diese Befehle in der IAM Richtlinie angeben.LockDoor
-
entwederdevices
thing
oderclient
je nachdem, ob Ihre Geräte als AWS IoT Dinge registriert wurden oder ob sie als MQTT Clients angegeben sind. -
mit deinem AWS IoTdevice-id
thing-name
oderclient-id
.
{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:command/command-id
", "arn:aws:iot:region
:account-id
:devices
/device-id
" ] }
Besorgen Sie sich einen kontospezifischen Endpunkt auf der Datenebene
Bevor Sie den API Befehl ausführen, müssen Sie den kontospezifischen Endpunkt für den Endpunkt URL abrufen. iot:Jobs
Wenn Sie z. B. den folgenden Befehl ausführen:
aws iot describe-endpoint --endpoint-type iot:Jobs
Es wird der kontospezifische Endpunkt zurückgegeben, URL wie in der folgenden Beispielantwort gezeigt.
{ "endpointAddress": "
<account-specific-prefix>
.jobs.iot.<region>
.amazonaws.com" }
Beispiel für eine Befehlsausführung starten ()AWS CLI
Das folgende Beispiel zeigt Ihnen, wie Sie die Ausführung eines Befehls mithilfe des start-command-execution
AWS CLI Befehls starten.
Ersetzen Sie in diesem Beispiel:
-
mit dem ARN für den Befehl, den Sie ausführen möchten. Sie können diese Informationen der Antwort des<command-arn>
create-command
CLI Befehls entnehmen. Wenn Sie beispielsweise den Befehl zum Ändern des Lenkradmodus ausführen, verwenden Siearn:aws:iot:
.region
:account-id
:command/SetComfortSteeringMode
-
mit dem Ding ARN für das Zielgerät, bei dem es sich um ein IoT-Ding oder einen MQTT IoT-Client handeln kann, für das Sie den Befehl ausführen möchten. Wenn Sie beispielsweise den Befehl für das Zielgerät ausführen<target-arn>
myRegisteredThing
, verwenden Siearn:aws:iot:
.region
:account-id
:thing/myRegisteredThing
-
mit dem kontospezifischen Endpunkt, den Sie abgerufen habenBesorgen Sie sich einen kontospezifischen Endpunkt auf der Datenebene, mit dem Präfix.<endpoint-url>
https://
Beispiel,https://
.123456789012abcd
.jobs.iot.ap-south-1
.amazonaws.com -
(Optional) Sie können bei der Ausführung des Vorgangs auch einen zusätzlichen Parameter angeben.
executionTimeoutSeconds
StartCommandExecution
API Dieses optionale Feld gibt die Zeit in Sekunden an, innerhalb derer das Gerät die Ausführung des Befehls abschließen muss. Standardmäßig ist der Wert 10 Sekunden. Wenn der Status der Befehlsausführung lautetCREATED
, wird ein Timer gestartet. Wenn das Ergebnis der Befehlsausführung nicht vor Ablauf des Timers eingeht, ändert sich der Status automatisch aufTIMED_OUT
.
aws iot-jobs-data start-command-execution \ --command-arn
<command-arn>
\ --target-arn<target-arn>
\ --endpoint<endpoint-url>
\ --executionTimeoutSeconds900
Wenn Sie diesen Befehl ausführen, wird eine Befehlsausführungs-ID zurückgegeben. Sie können diese ID verwenden, um den Status der Befehlsausführung, die Details und den Verlauf der Befehlsausführung abzufragen.
Anmerkung
Wenn der Befehl veraltet ist, schlägt die StartCommandExecution
API Anforderung mit einer Validierungsausnahme fehl. Um diesen Fehler zu beheben, stellen Sie zuerst den Befehl mit dem UpdateCommand
API wieder her und führen Sie dann die StartCommandExecution
Anforderung aus.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
Aktualisieren Sie das Ergebnis einer Befehlsausführung
Verwenden Sie die UpdateCommandExecution
MQTT API Datenebenenoperation, um den Status oder das Ergebnis einer Befehlsausführung zu aktualisieren.
Anmerkung
Bevor Sie das verwendenAPI:
-
Ihr Gerät muss eine MQTT Verbindung hergestellt und die Themen Commands Request und Response abonniert haben. Weitere Informationen finden Sie unter Arbeitsablauf für Befehle auf hoher Ebene.
-
Sie müssen diesen Befehl bereits mit der
StartCommandExecution
API Operation ausgeführt haben.
Bevor Sie diesen API Vorgang verwenden, stellen Sie sicher, dass Ihre IAM Richtlinie Ihr Gerät autorisiert, diese Aktionen auszuführen. Im Folgenden finden Sie ein Beispiel für eine Richtlinie, die Ihr Gerät zur Durchführung der Aktion autorisiert. Weitere IAM Beispielrichtlinien, die dem Benutzer die Erlaubnis geben, die UpdateCommandExecution
Aktion auszuführen, finden Sie unterBeispiele zu den Verbinden- und Veröffentlichen-Richtlinien.
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wie zum BeispielRegion
ap-south-1
. -
mit deiner AWS-Konto Nummer, wieAccountID
.123456789012
-
mit dem Namen Ihres AWS IoT Dings, für das Sie die Befehlsausführung anstreben, z.ThingName
B.myRegisteredThing
-
undcommands-request-topic
mit den Namen der Anfrage- und Antwortthemen Ihrer AWS IoT Befehle. Weitere Informationen finden Sie unter Arbeitsablauf für Befehle auf hoher Ebene.commands-response-topic
IAMBeispielrichtlinie für MQTT Client-ID
Der folgende Code zeigt ein Beispiel für eine Geräterichtlinie bei Verwendung der MQTT Client-ID.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }
IAMBeispielrichtlinie für IoT-Sache
Der folgende Code zeigt ein Beispiel für eine Geräterichtlinie bei der Verwendung AWS IoT eines Dings.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }
Nachdem die Befehlsausführung unter dem Thema der Anfrage eingegangen ist, verarbeitet das Gerät den Befehl. Anschließend aktualisiert es UpdateCommandExecution
API den Status und das Ergebnis der Befehlsausführung auf das folgende Antwortthema.
$aws/commands/
<devices>
/<DeviceID>
/executions/<ExecutionId>
/response/<PayloadFormat>
In diesem Beispiel
ist dies die eindeutige Kennung Ihres Zielgeräts und <DeviceID>
die Kennung der Befehlsausführung auf dem Zielgerät. Das <execution-id>
<PayloadFormat>
kann JSON oder seinCBOR.
Anmerkung
Wenn Sie Ihr Gerät nicht bei registriert haben AWS IoT, können Sie die Client-ID anstelle eines Dingnamens als Kennung verwenden.
$aws/commands/clients/
<ClientID>
/executions/<ExecutionId>
/response/<PayloadFormat>
Das Gerät hat Aktualisierungen des Ausführungsstatus gemeldet
Ihre Geräte können den verwendenAPI, um jede der folgenden Statusaktualisierungen zur Befehlsausführung zu melden. Weitere Informationen zu diesen Status finden Sie unterStatus der Befehlsausführung.
-
IN_PROGRESS
: Wenn das Gerät mit der Ausführung des Befehls beginnt, kann es den Status aufIN_PROGRESS
aktualisieren. -
SUCCEEDED
: Wenn das Gerät den Befehl erfolgreich verarbeitet und die Ausführung abgeschlossen hat, kann das Gerät eine Nachricht im Antwortthema als veröffentlichenSUCCEEDED
. -
FAILED
: Wenn das Gerät den Befehl nicht ausführen konnte, kann es eine Nachricht im Antwortthema als veröffentlichenFAILED
. -
REJECTED
: Wenn das Gerät den Befehl nicht akzeptiert hat, kann es eine Nachricht im Antwortthema als veröffentlichenREJECTED
. -
TIMED_OUT
: Der Status der Befehlsausführung kann aus einem der folgenden Gründe auf geändert werden.TIMED_OUT
-
Das Ergebnis der Befehlsausführung wurde nicht empfangen. Dies kann passieren, weil die Ausführung nicht innerhalb der angegebenen Dauer abgeschlossen wurde oder wenn das Gerät die Statusinformationen nicht im Antwortthema veröffentlicht hat.
-
Das Gerät meldet, dass beim Versuch, den Befehl auszuführen, ein Timeout aufgetreten ist.
-
Weitere Informationen zum TIMED_OUT
Status finden Sie unterTimeout-Wert und TIMED_OUT Ausführungsstatus.
Überlegungen bei der Verwendung von UpdateCommandExecution
API
Im Folgenden sind einige wichtige Überlegungen bei der Verwendung von aufgeführt UpdateCommandExecution
API.
-
Ihre Geräte können ein optionales
statusReason
Objekt verwenden, das verwendet werden kann, um zusätzliche Informationen zur Ausführung bereitzustellen. Wenn Ihre Geräte dieses Objekt bereitstellen, ist dasreasonCode
Feld des Objekts erforderlich, aber dasreasonDescription
Feld ist optional. -
Wenn Ihre Geräte das
statusReason
Objekt verwenden,reasonCode
müssen sie das Muster[A-Z0-9_-]+
verwenden und es darf nicht länger als 64 Zeichen sein. Wenn Sie das angebenreasonDescription
, stellen Sie sicher, dass es nicht länger als 1.024 Zeichen ist. Es können alle Zeichen außer Steuerzeichen, wie z. B. neue Zeilen, verwendet werden. -
Ihre Geräte können ein optionales
result
Objekt verwenden, um Informationen über das Ergebnis der Befehlsausführung bereitzustellen, z. B. den Rückgabewert eines Remote-Funktionsaufrufs. Wenn Sie das angebenresult
, muss mindestens ein Eintrag erforderlich sein. -
In dem
result
Feld geben Sie die Einträge als Schlüssel-Wert-Paare an. Für jeden Eintrag müssen Sie die Datentypinformationen als Zeichenfolge, boolescher Wert oder Binärwert angeben. Ein Zeichenkettendatentyp muss den Schlüssel verwendens
, ein boolescher Datentyp verwendet den Schlüsselb
und ein binärer Datentyp muss den Schlüssel verwenden.bin
Sie müssen sicherstellen, dass diese Datentypen in Kleinbuchstaben angegeben werden. -
Wenn Sie beim Ausführen von auf einen Fehler stoßen
UpdateCommandExecution
API, können Sie den Fehler in derAWSIoTLogsV2
Protokollgruppe in Amazon anzeigen CloudWatch. Informationen zum Aktivieren der Protokollierung und zum Anzeigen der Protokolle finden Sie unterKonfigurieren Sie die AWS IoT Protokollierung.
UpdateCommandExecution
APIBeispiel
Der folgende Code zeigt ein Beispiel dafür, wie Ihr Gerät den UpdateCommandExecution
API Ausführungsstatus melden kann, das statusReason
Feld, um zusätzliche Informationen über den Status bereitzustellen, und das Ergebnisfeld, um Informationen über das Ergebnis der Ausführung bereitzustellen, wie in diesem Fall den Prozentsatz der Autobatterie.
{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }
Rufen Sie die Ausführung eines Befehls ab
Nachdem Sie einen Befehl ausgeführt haben, können Sie Informationen über die Befehlsausführung von der AWS IoT Konsole abrufen und den AWS CLI Sie können die folgenden Informationen abrufen.
Anmerkung
Um den aktuellen Status der Befehlsausführung abzurufen, muss Ihr Gerät die Statusinformationen wie unten beschrieben im UpdateCommandExecution
MQTT API Antwortthema veröffentlichen. Bis das Gerät Beiträge zu diesem Thema veröffentlicht, GetCommandExecution
API wird der Status als CREATED
oder gemeldetTIMED_OUT
.
Für jede Befehlsausführung, die Sie erstellen, gilt Folgendes:
-
Eine Ausführungs-ID, bei der es sich um eine eindeutige Kennung der Befehlsausführung handelt.
-
Der Status der Befehlsausführung. Wenn Sie den Befehl auf dem Zielgerät ausführen, wechselt die Befehlsausführung in einen
CREATED
Status. Es kann dann in einen anderen Status der Befehlsausführung übergehen, wie unten beschrieben. -
Das Ergebnis der Befehlsausführung.
-
Die eindeutige Befehls-ID und das Zielgerät, für das Ausführungen erstellt wurden.
-
Das Startdatum, das die Uhrzeit angibt, zu der die Befehlsausführung erstellt wurde.
Sie können eine Befehlsausführung mit einer der folgenden Methoden von der Konsole abrufen.
-
Von der Command-Hub-Seite
Gehen Sie zur Command Hub-Seite
der AWS IoT Konsole und führen Sie diese Schritte aus. -
Wählen Sie den Befehl aus, für den Sie eine Ausführung auf dem Zielgerät erstellt haben.
-
Auf der Seite mit den Befehlsdetails auf der Registerkarte Befehlsverlauf sehen Sie die Ausführungen, die Sie erstellt haben. Wählen Sie die Ausführung aus, für die Sie Informationen abrufen möchten.
-
Wenn Ihre Geräte die
UpdateCommandExecution
API zur Bereitstellung der Ergebnisinformationen verwendet haben, finden Sie diese Informationen dann auf der Registerkarte Ergebnisse auf dieser Seite.
-
-
Auf der Thing-Hub-Seite
Wenn Sie bei der Ausführung des Befehls ein AWS IoT Ding als Zielgerät ausgewählt haben, können Sie die Ausführungsdetails auf der Thing-Hub-Seite einsehen.
-
Gehen Sie in der AWS IoT Konsole zur Thing Hub-Seite
und wählen Sie das Ding aus, für das Sie die Befehlsausführung erstellt haben. -
Auf der Seite mit den Ding-Details im Befehlsverlauf sehen Sie die Ausführungen, die Sie erstellt haben. Wählen Sie die Ausführung aus, für die Sie Informationen abrufen möchten.
-
Wenn Ihre Geräte die
UpdateCommandExecution
API zur Bereitstellung der Ergebnisinformationen verwendet haben, finden Sie diese Informationen dann auf der Registerkarte Ergebnisse auf dieser Seite.
-
Verwenden Sie die HTTP API Operation auf der GetCommandExecution
AWS IoT Core Steuerungsebene, um Informationen über die Ausführung eines Befehls abzurufen. Sie müssen diesen Befehl bereits mit der StartCommandExecution
API Operation ausgeführt haben.
Beispiel für eine IAM Richtlinie
Bevor Sie diesen API Vorgang verwenden, stellen Sie sicher, dass Ihre IAM Richtlinie Sie autorisiert, diese Aktion auf dem Gerät durchzuführen. Das folgende Beispiel zeigt eine IAM Richtlinie, die dem Benutzer die Erlaubnis erteilt, die GetCommandExecution
Aktion auszuführen.
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wie zum Beispielregion
ap-south-1
. -
mit deiner AWS-Konto Nummer, wieaccount-id
.123456789012
-
mit Ihrer eindeutigen AWS IoT Befehlskennung, z.command-id
B.LockDoor
-
entwederdevices
thing
oderclient
je nachdem, ob Ihre Geräte als AWS IoT Dinge registriert wurden oder ob sie als MQTT Clients angegeben sind. -
mit deinem AWS IoTdevice-id
thing-name
oderclient-id
.
{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:command/command-id
", "arn:aws:iot:region
:account-id
:devices
/device-id
" ] }
Rufen Sie ein Beispiel für die Befehlsausführung ab
Das folgende Beispiel zeigt Ihnen, wie Sie Informationen über einen Befehl abrufen, der mit dem start-command-execution
AWS CLI Befehl ausgeführt wurde. Das folgende Beispiel zeigt, wie Sie Informationen über einen Befehl abrufen können, der ausgeführt wurde, um den Lenkradmodus auszuschalten.
Ersetzen Sie in diesem Beispiel:
-
mit der Kennung für die Befehlsausführung, für die Sie Informationen abrufen möchten.<execution-id>
-
mit der Amazon-Ressourcennummer (ARN) des Geräts, für das Sie die Ausführung planen. Sie können diese Informationen der Antwort auf den<target-arn>
start-command-execution
CLI Befehl entnehmen. -
Wenn Ihre Geräte das
UpdateCommandExection
API zur Bereitstellung des Ausführungsergebnisses verwendet haben, können Sie optional angeben, ob das Ergebnis der Befehlsausführung in die Antwort auf dieGetCommandExecution
API Verwendung von aufgenommen werden sollGetCommandExecution
API.
aws iot get-command-execution --execution-id
<execution-id>
\ --target-arn<target-arn>
\ --include-result
Wenn Sie diesen Befehl ausführen, wird eine Antwort generiert, die Informationen über die Ausführung ARN des Befehls, den Ausführungsstatus und den Zeitpunkt enthält, zu dem die Ausführung gestartet und abgeschlossen wurde. Es stellt auch ein statusReason
Objekt bereit, das zusätzliche Informationen über den Status enthält. Weitere Informationen zu den verschiedenen Status und den Gründen für den Status finden Sie unterStatus der Befehlsausführung.
Der folgende Code zeigt ein Beispiel für eine Antwort auf die API Anfrage.
Anmerkung
Das completedAt
Feld in der Ausführungsantwort entspricht dem Zeitpunkt, zu dem das Gerät einen Terminalstatus an die Cloud meldet. Im Fall des TIMED_OUT
Status wird dieses Feld nur gesetzt, wenn das Gerät einen Timeout meldet. Wenn der TIMED_OUT
Status von der Cloud festgelegt wird, wird der TIMED_OUT
Status nicht aktualisiert. Weitere Informationen zum Timeout-Verhalten finden Sie unterÜberlegungen zum Timeout bei der Befehlsausführung.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:ap-south-1:123456789012:thing/myRegisteredThing", "status": "SUCCEEDED", "statusReason": { "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED", "reasonDescription": "SUCCESS" }, "result": { "sn": { "s": "ABC-001" }, "digital": { "b": true } }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00" }
Befehlsaktualisierungen mit dem MQTT Testclient anzeigen
Sie können den MQTT Testclient verwenden, um sich den Nachrichtenaustausch anzusehen, MQTT wenn Sie die Befehlsfunktion verwenden. Nachdem Ihr Gerät eine MQTT Verbindung mit hergestellt hat AWS IoT, können Sie einen Befehl erstellen, die Nutzlast angeben und ihn dann auf dem Gerät ausführen. Wenn Sie den Befehl ausführen und Ihr Gerät das MQTT reservierte Anforderungsthema für Befehle abonniert hat, wird die zu diesem Thema veröffentlichte Payload-Meldung angezeigt.
Das Gerät empfängt dann die Nutzlastanweisungen und führt die angegebenen Operationen auf dem IoT-Gerät aus. Anschließend veröffentlicht es das UpdateCommandExecution
API Ergebnis der Befehlsausführung und die Statusinformationen in den MQTT reservierten Antwortthemen für Befehle. AWS IoT Device Management hört sich Updates zu den Antwortthemen an, speichert die aktualisierten Informationen und veröffentlicht Protokolle an AWS CloudTrail und Amazon. CloudWatch Sie können dann die neuesten Informationen zur Befehlsausführung von der Konsole oder mit dem abrufen. GetCommandExecution
API
Die folgenden Schritte zeigen, wie Sie den MQTT Testclient verwenden, um Nachrichten zu beobachten.
-
Öffnen Sie den MQTTTestclient
in der AWS IoT Konsole. -
Geben Sie auf der Registerkarte Abonnieren das folgende Thema ein und wählen Sie dann Abonnieren aus. Dabei
<thingId>
handelt es sich um den Namen des Geräts, mit dem Sie sich registriert haben AWS IoT.Anmerkung
Sie finden den Dingnamen für Ihr Gerät auf der Thing Hub-Seite
der AWS IoT Konsole. Wenn Sie Ihr Gerät nicht als Ding registriert haben, können Sie das Gerät registrieren, wenn Sie über die Seite Connect-Gerät eine Verbindung herstellen . AWS IoT $aws/commands/things/
<thingId>
/executions/+/request -
(Optional) Auf der Registerkarte Abonnieren können Sie auch die folgenden Themen eingeben und Abonnieren auswählen.
$aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
-
Wenn Sie die Ausführung eines Befehls starten, wird die Payload der Nachricht an das Gerät gesendet, wobei das Anforderungsthema verwendet wird, das das Gerät abonniert hat.
$aws/commands/things/
Im MQTT Testclient sollten Sie die Befehls-Payload sehen, die die Anweisungen für das Gerät zur Verarbeitung des Befehls enthält.<thingId>
/executions/+/request -
Nachdem das Gerät mit der Ausführung des Befehls begonnen hat, kann es Statusaktualisierungen zum folgenden, für Befehle MQTT reservierten Antwortthema veröffentlichen.
$aws/commands/
<devices>
/<device-id>
/executions/<executionId>
/response/jsonStellen Sie sich zum Beispiel einen Befehl vor, den Sie ausgeführt haben, um die Klimaanlage Ihres Autos einzuschalten und die Temperatur auf den gewünschten Wert zu senken. Im Folgenden finden Sie JSON eine Beispielnachricht, die das Fahrzeug zum Antwortthema veröffentlicht hat und aus der hervorgeht, dass der Befehl nicht ausgeführt werden konnte.
{ "deviceId": "My_Car", "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "status": "FAILED", "statusReason": { "reasonCode": "CAR_LOW_ON_BATTERY", "reasonDescription": "Car battery is lower than 5 percent" } }
In diesem Fall können Sie die Autobatterie aufladen und den Befehl dann erneut ausführen.
Listet die Befehlsausführungen in Ihrem auf AWS-Konto
Nachdem Sie einen Befehl ausgeführt haben, können Sie Informationen über die Befehlsausführung von der AWS IoT Konsole abrufen und die AWS CLI. Sie können die folgenden Informationen abrufen.
-
Eine Ausführungs-ID, bei der es sich um eine eindeutige Kennung der Befehlsausführung handelt.
-
Der Status der Befehlsausführung. Wenn Sie den Befehl auf dem Zielgerät ausführen, wechselt die Befehlsausführung in einen
CREATED
Status. Es kann dann in einen anderen Status der Befehlsausführung übergehen, wie unten beschrieben. -
Die eindeutige Befehls-ID und das Zielgerät, für das Ausführungen erstellt wurden.
-
Das Startdatum, das die Uhrzeit angibt, zu der die Befehlsausführung erstellt wurde.
Sie können alle Befehlsausführungen von der Konsole aus mit einer der folgenden Methoden anzeigen.
-
Auf der Command-Hub-Seite
Gehen Sie zur Command Hub-Seite
der AWS IoT Konsole und führen Sie diese Schritte aus. -
Wählen Sie den Befehl aus, für den Sie eine Ausführung auf dem Zielgerät erstellt haben.
-
Gehen Sie auf der Seite mit den Befehlsdetails zur Registerkarte Befehlsverlauf. Dort wird eine Liste der von Ihnen erstellten Ausführungen angezeigt.
-
-
Von der Thing-Hub-Seite
Wenn Sie bei der Ausführung des Befehls ein AWS IoT Ding als Zielgerät ausgewählt und mehrere Befehlsausführungen für ein einzelnes Gerät erstellt haben, können Sie die Ausführungen für das Gerät auf der Thing-Hub-Seite anzeigen.
-
Gehen Sie in der AWS IoT Konsole zur Thing Hub-Seite
und wählen Sie das Ding aus, für das Sie die Ausführungen erstellt haben. -
Auf der Seite mit den Ding-Details sehen Sie im Befehlsverlauf eine Liste der Ausführungen, die Sie für das Gerät erstellt haben.
-
Verwenden Sie die HTTP API Operation auf der ListCommandExecutions
AWS IoT Core Steuerungsebene, um alle Befehlsausführungen in Ihrem Konto aufzulisten.
Beispiel für eine Richtlinie IAM
Bevor Sie diesen API Vorgang verwenden, stellen Sie sicher, dass Ihre IAM Richtlinie Sie autorisiert, diese Aktion auf dem Gerät durchzuführen. Das folgende Beispiel zeigt eine IAM Richtlinie, die dem Benutzer die Erlaubnis erteilt, die ListCommandExecutions
Aktion auszuführen.
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wie zum Beispielregion
ap-south-1
. -
mit deiner AWS-Konto Nummer, wieaccount-id
.123456789012
-
mit Ihrer eindeutigen AWS IoT Befehlskennung, z.command-id
B.LockDoor
{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }
Beispiel für Befehlsausführungen auflisten
Das folgende Beispiel zeigt Ihnen, wie Sie Befehlsausführungen in Ihrem auflisten. AWS-Konto
Bei der Ausführung des Befehls müssen Sie angeben, ob die Liste so gefiltert werden soll, dass nur Befehlsausführungen angezeigt werden, die mit dem für ein bestimmtes Gerät erstellt wurdentargetArn
, oder Ausführungen für einen bestimmten Befehl, der mit dem angegeben wurde. commandArn
Ersetzen Sie in diesem Beispiel:
-
mit der Amazon-Ressourcennummer (ARN) des Geräts, für das Sie die Ausführung planen, z.<target-arn>
arn:aws:iot:
B.us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
mit der Amazon-Ressourcennummer (ARN) des Geräts, für das Sie die Ausführung planen, z.<target-arn>
arn:aws:iot:
B.us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
mit der Zeit, nach der Sie die Ausführungen auflisten möchten, die erstellt wurden, zum Beispiel.<after>
2024-11-01T03:00
aws iot list-command-executions \ --target-arn
\ --started-time-filter '{after=
<target-arn>
}' \ --sort-order "ASCENDING"
<after>
Wenn Sie diesen Befehl ausführen, wird eine Antwort generiert, die eine Liste der von Ihnen erstellten Befehlsausführungen sowie die Uhrzeit enthält, zu der die Ausführung begonnen und abgeschlossen wurde. Es enthält auch Statusinformationen und das statusReason
Objekt, das zusätzliche Informationen zum Status enthält.
{ "commandExecutions": [ { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "TIMED_OUT", "createdAt": "2024-11-24T14:39:25.791000-08:00", "startedAt": "2024-11-24T14:39:25.791000-08:00" }, { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "IN_PROGRESS", "createdAt": "2024-11-24T14:05:36.021000-08:00", "startedAt": "2024-11-24T14:05:36.021000-08:00" } ] }
Weitere Informationen zu den verschiedenen Status und den Gründen für den Status finden Sie unterStatus der Befehlsausführung.
Löschen Sie die Ausführung eines Befehls
Wenn Sie eine Befehlsausführung nicht mehr verwenden möchten, können Sie sie dauerhaft aus Ihrem Konto entfernen.
Anmerkung
-
Eine Befehlsausführung kann nur gelöscht werden, wenn sie einen Terminalstatus wie
SUCCEEDED
FAILED
, oder erreicht hatREJECTED
. -
Dieser Vorgang kann nur mit dem AWS IoT Core API oder dem ausgeführt werden AWS CLI. Er ist nicht über die Konsole verfügbar.
Bevor Sie diesen API Vorgang verwenden, stellen Sie sicher, dass Ihre IAM Richtlinie Ihr Gerät autorisiert, diese Aktionen auszuführen. Im Folgenden finden Sie ein Beispiel für eine Richtlinie, die Ihr Gerät zur Durchführung der Aktion autorisiert.
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wieRegion
ap-south-1
zum Beispiel. -
mit deiner AWS-Konto Nummer, wieAccountID
.123456789012
-
mit der Kennung des Befehls, für den Sie die Ausführung löschen möchten.CommandID
-
entwederdevices
thing
oderclient
je nachdem, ob Ihre Geräte als AWS IoT Dinge registriert wurden oder ob sie als MQTT Clients angegeben sind. -
mit deinem AWS IoTdevice-id
thing-name
oderclient-id
.
{ "Effect": "Allow", "Action": [ "iot:DeleteCommandExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:command/command-id
", "arn:aws:iot:region
:account-id
:devices
/device-id
" ] }
Das folgende Beispiel zeigt Ihnen, wie Sie einen Befehl mithilfe des delete-command
AWS CLI Befehls löschen. Ersetzen Sie ihn je nach Anwendung
durch die Kennung für die Befehlsausführung, die Sie löschen, und <execution-id>
durch die ARN Ihres Zielgeräts. <target-arn>
aws iot delete-command-execution \ --execution-id
<execution-id>
\ --target-arn<target-arn>
Wenn die API Anfrage erfolgreich ist, generiert die Befehlsausführung den Statuscode 200. Sie können den verwenden, GetCommandExecution
API um zu überprüfen, ob die Befehlsausführung in Ihrem Konto nicht mehr vorhanden ist.