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.
Starten und Überwachen von Befehlsausführungen
Nachdem Sie einen Befehl erstellt haben, starten Sie eine Ausführung auf dem Zielgerät. Das Gerät aktualisiert die Ergebnisse und veröffentlicht den Status in reservierten MQTT-Themen. Rufen Sie den Ausführungsstatus von Ihrem Konto ab und überwachen Sie ihn.
Starten und überwachen Sie Befehle über die AWS IoT Konsole oder 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 einer Ausführung beginnen, stellen Sie Folgendes sicher:
-
Sie haben im AWS IoT Namespace einen Befehl mit Payload-Informationen erstellt. Beim Starten der Ausführung verarbeitet das Gerät die Payload-Anweisungen und führt die angegebenen Aktionen aus. Informationen Erstellen Sie eine Befehlsressource zur Befehlserstellung finden Sie unter.
-
Ihr Gerät hat für MQTT reservierte Themen für Befehle abonniert. Wenn Sie die Ausführung starten, werden die Payload-Informationen zu dieser reservierten MQTT-Anforderung veröffentlicht. Thema:
<devices>können Things- oder MQTT-Clients sein.<DeviceID>ist der Name des Dings oder die Client-ID. Unterstützte<PayloadFormat>Werte: JSON und CBOR. Weitere Informationen finden Sie unter Themen zu Befehlen.$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>Verwenden Sie für andere Befehle als JSON/CBOR das folgende Format für
<PayloadFormat>Befehlsthemen:$aws/commands/<devices>/<DeviceID>/executions/+/request
Geben Sie das Zielgerät an, das den Befehl empfangen und ausführen soll. Verwenden Sie einen Ding-Namen für registrierte Geräte oder eine Client-ID für nicht registrierte Geräte. Nach dem Empfang der Payload führt das Gerät den Befehl aus und führt die angegebenen Aktionen aus.
AWS IoT Sache
Zielgeräte können Dinge sein, die in der AWS IoT Registrierung registriert sind. Dinge vereinfachen die Gerätesuche und -verwaltung.
Registrieren Sie Geräte über die Connect-GeräteseiteCreateThing. Finden Sie vorhandene Dinge über Thing HubDescribeThing. Einzelheiten zur Registrierung finden Sie unter Dinge mit der Registrierung verwalten.
Client-ID
Verwenden Sie für nicht registrierte Geräte die Client-ID.
Die Client-ID ist eine eindeutige Kennung, die Sie Geräten zuweisen. Sie ist im MQTT-Protokoll definiert und enthält alphanumerische Zeichen, Unterstriche oder Bindestriche. Jedes Gerät, mit dem eine Verbindung hergestellt wird, AWS IoT benötigt eine eindeutige Client-ID.
Anmerkung
-
Bei registrierten Dingen kann die Client-ID mit dem Namen des Dings übereinstimmen.
-
Beim Targeting auf eine bestimmte Client-ID müssen Geräte AWS IoT über diese Client-ID eine Verbindung herstellen, um die Payload zu empfangen.
Die Client-ID ist die MQTT-Client-ID, mit der Geräte eine Verbindung herstellen. AWS IoT Core AWS IoT verwendet diese ID, um Geräte zu identifizieren und Verbindungen und Abonnements zu verwalten.
Timeout gibt die Dauer (in Sekunden) an, für die Geräte Ausführungsergebnisse bereitstellen.
Nach dem Erstellen einer Ausführung wird ein Timer gestartet. Wenn das Gerät offline geht oder innerhalb des Timeouts keine Ergebnisse meldet, wird bei der Ausführung ein Timeout mit Status angezeigtTIMED_OUT.
Standard: 10 Sekunden. Maximal: 12 Stunden.
Timeout-Wert und TIMED_OUT Ausführungsstatus
Sowohl die Cloud als auch das Gerät können einen Timeout melden.
Nach dem Senden des Befehls startet ein Timer. Wenn innerhalb des Timeouts keine Geräteantwort eingeht, setzt die Cloud den Ausführungsstatus auf TIMED_OUT mit Ursachencode$NO_RESPONSE_FROM_DEVICE.
Dies tritt auf, wenn:
-
Das Gerät ist während der Ausführung offline gegangen.
-
Das Gerät konnte die Ausführung nicht innerhalb des Timeouts abschließen.
-
Das Gerät konnte den Status nicht innerhalb des Timeouts melden.
Wenn in diesem Fall der Ausführungsstatus von aus der Cloud gemeldet TIMED_OUT wird, erfolgt die Befehlsausführung nicht über ein Terminal. Ihr Gerät kann eine Antwort veröffentlichen, die den Status eines beliebigen Terminalstatus außer Kraft setzt:SUCCEEDED, FAILED oder. REJECTED Die Befehlsausführung wird dann zum 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ändertTIMED_OUT, das statusReason Objekt wird jedoch auf der Grundlage der vom Gerät gemeldeten Informationen aktualisiert. Die Befehlsausführung wird dann zum Terminal, und es werden keine weiteren Aktualisierungen akzeptiert.
Verwenden persistenter MQTT-Sitzungen
Sie können persistente MQTT-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 die Ablaufzeit einer persistenten MQTT-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 fehlschlagen. Um Befehle auszuführen, die länger als 60 Minuten dauern, können Sie eine Verlängerung der Ablaufzeit der persistenten Sitzung anfordern.
Anmerkung
Um sicherzustellen, dass Sie die Funktion für persistente MQTT-Sitzungen korrekt verwenden, setzen Sie das Clean Start-Flag auf Null. Weitere Informationen finden Sie unter Persistente MQTT-Sitzungen.
Um mit der Ausführung des Befehls von der Konsole aus zu beginnen, rufen Sie die Command Hub-Seite
-
Um den Befehl auszuführen, den Sie erstellt haben, wählen Sie Befehl ausführen.
-
Lesen Sie die Informationen zu dem Befehl, den Sie erstellt haben, einschließlich der reservierten MQTT-Themen und Parameter, falls zutreffend.
Geben Sie für dynamische Befehle die Parameterwerte ein oder belassen Sie sie bei den Standardwerten. Für Parameter, die keinen Standardwert haben, müssen Sie einen Wert angeben, der im Rahmen dieser Ausführung gesendet werden soll.
-
Geben Sie das Zielgerät an, das den Befehl empfangen und ausführen soll. 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 persistente MQTT-Sitzungen erhöhen. Weitere Informationen finden Sie unter Überlegungen zum Timeout bei der Befehlsausführung.
-
Wählen Sie Befehl ausführen aus.
Verwenden Sie den API-Vorgang für die StartCommandExecutionHTTP-Datenebene, um die Ausführung eines Befehls zu starten. Die API-Anforderung und -Antwort korrelieren anhand der Befehlsausführungs-ID. 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, veröffentlicht die StartCommandExecution API die Payload-Meldung zum Thema. 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 CBOR ist, wird im Folgenden das Format des Themas der Befehlsanfrage dargestellt.
$aws/commands/<devices>/<DeviceID>/executions/+/request
Beispiel einer IAM-Richtlinie
Bevor Sie diesen API-Vorgang verwenden, stellen Sie sicher, dass Ihre IAM-Richtlinie Sie autorisiert, diese Aktion auf dem Gerät auszuführen. Das folgende Beispiel zeigt eine IAM-Richtlinie, die dem Benutzer die Erlaubnis erteilt, die Aktion auszuführen. StartCommandExecution
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wieregionus-east-1zum Beispiel. -
mit deiner AWS-Konto Nummer, wieaccount-id.123456789012 -
mit einer eindeutigen Kennung für Ihren AWS IoT Befehl, wiecommand-idz. Wenn Sie mehr als einen Befehl senden möchten, können Sie diese Befehle in der IAM-Richtlinie angeben.LockDoor -
entwederdevicesthingoderclientje nachdem, ob Ihre Geräte als AWS IoT Dinge registriert wurden oder ob sie als MQTT-Clients spezifiziert sind. -
mit deinem AWS IoTdevice-idthing-nameoderclient-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" ] }
Eine Liste der unterstützten Bedingungsschlüssel finden Sie unter Bedingungsschlüssel für AWS IoT im IAM-Benutzerhandbuch. StartCommandExecution
Rufen Sie den kontospezifischen Endpunkt auf der Datenebene ab
Bevor Sie den API-Befehl ausführen, müssen Sie die kontospezifische Endpunkt-URL für den Endpunkt abrufen. Wenn Sie Dual-Stack-Endpunkte (IPv4und IPv6) verwenden, verwenden Sie den. iot:Data-ATS Der iot:Jobs Endpunkt ist nur für IPv4 . Wenn Sie z. B. den folgenden Befehl ausführen:
aws iot describe-endpoint --endpoint-type iot:Data-ATS
Es gibt die kontospezifische Endpunkt-URL zurück, wie in der folgenden Beispielantwort gezeigt.
{ "endpointAddress": "<account-specific-prefix>-ats.iot.<region>.api.com" }
Beispiel für eine Befehlsausführung starten ()AWS CLI
Das folgende Beispiel zeigt, wie die Ausführung eines Befehls mithilfe des start-command-execution AWS CLI Befehls gestartet wird.
Ersetzen Sie in diesem Beispiel:
-
mit dem ARN für den Befehl, den Sie ausführen möchten. Sie können diese Informationen aus der Antwort des<command-arn>create-commandCLI-Befehls abrufen. Wenn Sie beispielsweise den Befehl zum Ändern des Lenkradmodus ausführen, verwenden Siearn:aws:iot:.region:account-id:command/SetComfortSteeringMode -
mit dem Thing-ARN für das Zielgerät, das ein IoT-Ding oder ein MQTT-Client sein kann, für den 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 in abgerufen habenRufen Sie den kontospezifischen Endpunkt auf der Datenebene ab, mit dem Präfix.<endpoint-url>https://Beispiel,https://.123456789012abcd.jobs.iot.us-east-1.amazonaws.com -
(Optional) Sie können bei der Ausführung des API-Vorgangs auch einen zusätzlichen Parameter angeben.
executionTimeoutSecondsStartCommandExecutionDieses 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>\ --execution-timeout-seconds900 -
(Optional) Geben Sie für dynamische Befehle die Parameter und ihre Werte an, die als Ersatz verwendet werden sollen. Sie müssen einen Wert für Parameter angeben, für die bei der Befehlserstellung kein defaultValue festgelegt wurde. Wenn ein Parameter einen defaultValue hat, hat der hier angegebene Parameterwert Vorrang. Bei Parametern, für die ValueConditions gesetzt ist, muss der hier angegebene Parameterwert die Bedingung erfüllen.
Basierend auf einem Beispiel für einen
Light_Power_Statusdynamischen Befehl: -
aws iot-jobs-data start-command-execution \ --command-arnarn:aws:iot:us-east-1:123456789012:command/Light_Power_Status\ --target-arnarn:aws:iot:us-east-1:123456789012:thing/exampleThing\ --endpoint<endpoint-url>\ --execution-timeout-seconds900\ --parameters"powerStatus={S=ON}"
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-Anfrage mit einer Validierungsausnahme fehl. Um diesen Fehler zu beheben, stellen Sie zuerst den Befehl mithilfe der UpdateCommand API wieder her und führen Sie dann die StartCommandExecution Anfrage aus.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
Aktualisieren des Ergebnisses einer Befehlsausführung
Verwenden Sie den API-Vorgang der UpdateCommandExecution MQTT-Datenebene, um den Status oder das Ergebnis einer Befehlsausführung zu aktualisieren.
Anmerkung
Bevor Sie diese API verwenden:
-
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 mithilfe der
StartCommandExecutionAPI-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 Ausführung der Aktion autorisiert. Weitere Beispiele für IAM-Richtlinien, die dem Benutzer die Erlaubnis geben, die UpdateCommandExecution MQTT-Aktion auszuführen, finden Sie unter. Beispiele zu den Verbinden- und Veröffentlichen-Richtlinien
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wie zum Beispiel.Regionus-east-1 -
mit deiner AWS-Konto Nummer, wieAccountID.123456789012 -
mit dem Namen Ihres AWS IoT Dings, für das Sie die Befehlsausführung anvisieren, wieThingNamez.myRegisteredThing -
undcommands-request-topicmit 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
Beispiel für eine IAM-Richtlinie für die 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}" } ] }
Beispiel für eine IAM-Richtlinie für das IoT-Ding
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 verwendet es die UpdateCommandExecution API, um den Status und das Ergebnis der Befehlsausführung auf das folgende Antwortthema zu aktualisieren.
$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 CBOR sein.
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 die API verwenden, um alle 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_PROGRESSaktualisieren. -
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 sichTIMED_OUTaus einem der folgenden Gründe auf ändern.-
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 der UpdateCommandExecution API
Im Folgenden sind einige wichtige Überlegungen zur Verwendung der UpdateCommandExecution API aufgeführt.
-
Ihre Geräte können ein optionales
statusReasonObjekt verwenden, um zusätzliche Informationen zur Ausführung bereitzustellen. Wenn Ihre Geräte dieses Objekt bereitstellen, ist dasreasonCodeFeld des Objekts erforderlich, aber dasreasonDescriptionFeld ist optional. -
Wenn Ihre Geräte das
statusReasonObjekt verwenden,reasonCodemüssen sie das Muster verwenden[A-Z0-9_-]+und dürfen 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 Zeilenumbrüchen verwendet werden. -
Ihre Geräte können ein optionales
resultObjekt 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
resultFeld 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üsselbund ein binärer Datentyp muss den Schlüssel verwenden.binStellen Sie sicher, dass diese Schlüssel in Kleinbuchstaben geschrieben sind. -
Wenn Sie beim Ausführen der
UpdateCommandExecutionAPI auf einen Fehler stoßen, können Sie den Fehler in derAWSIoTLogsV2Protokollgruppe in Amazon anzeigen CloudWatch. Informationen zum Aktivieren der Protokollierung und zum Anzeigen der Protokolle finden Sie unterKonfigurieren Sie die AWS IoT Protokollierung.
UpdateCommandExecutionAPI-Beispiel
Der folgende Code zeigt ein Beispiel dafür, wie Ihr Gerät die UpdateCommandExecution API verwenden kann, um den Ausführungsstatus zu melden, das statusReason Feld, um zusätzliche Informationen zum 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 mithilfe der UpdateCommandExecution MQTT-API im Antwortthema veröffentlichen, wie unten beschrieben. Bis das Gerät zu diesem Thema veröffentlicht, meldet die GetCommandExecution API den Status als CREATED oderTIMED_OUT.
Jede Befehlsausführung, die Sie erstellen, hat:
-
eine Ausführungs-ID, die eine eindeutige Kennung der Befehlsausführung darstellt.
-
den Status der Befehlsausführung. Wenn Sie den Befehl auf dem Zielgerät ausführen, geht die Befehlsausführung in den Zustand
CREATEDüber. Sie kann dann in andere Befehlsausführungsstatus ü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
UpdateCommandExecutionAPI 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
UpdateCommandExecutionAPI zur Bereitstellung der Ergebnisinformationen verwendet haben, finden Sie diese Informationen dann auf der Registerkarte Ergebnisse auf dieser Seite.
-
Verwenden Sie den HTTP-API-Vorgang der GetCommandExecution AWS IoT Core Steuerungsebene, um Informationen über die Ausführung eines Befehls abzurufen. Sie müssen diesen Befehl bereits mithilfe der StartCommandExecution API-Operation ausgeführt haben.
Beispiel einer IAM-Richtlinie
Bevor Sie diesen API-Vorgang verwenden, stellen Sie sicher, dass Ihre IAM-Richtlinie Sie autorisiert, diese Aktion auf dem Gerät auszuführen. Das folgende Beispiel zeigt eine IAM-Richtlinie, die dem Benutzer die Erlaubnis erteilt, die Aktion auszuführen. GetCommandExecution
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wieregionus-east-1zum Beispiel. -
mit deiner AWS-Konto Nummer, wieaccount-id.123456789012 -
mit Ihrer eindeutigen AWS IoT Befehlskennung, z.command-idB.LockDoor -
entwederdevicesthingoderclientje nachdem, ob Ihre Geräte als AWS IoT Dinge registriert wurden oder als MQTT-Clients spezifiziert sind. -
mit deinem AWS IoTdevice-idthing-nameoderclient-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 anstreben. Sie können diese Informationen aus der Antwort des<target-arn>start-command-executionCLI-Befehls abrufen. -
Wenn Ihre Geräte die
UpdateCommandExectionAPI zur Bereitstellung des Ausführungsergebnisses verwendet haben, können Sie optional angeben, ob das Ergebnis der Befehlsausführung in die Antwort derGetCommandExecutionAPI über dieGetCommandExecutionAPI aufgenommen werden soll.
aws iot get-command-execution --execution-id<execution-id>\ --target-arn<target-arn>\ --include-result
Die Ausführung dieses Befehls generiert eine Antwort, die Informationen über den ARN der Befehlsausführung, den Ausführungsstatus und den Zeitpunkt des Beginns und des Abschlusses der Ausführung enthält. 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 eine Beispielantwort aus der 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:us-east-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:us-east-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 über MQTT anzusehen, 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-Request-Thema für Befehle abonniert hat, wird die zu diesem Thema veröffentlichte Payload-Meldung angezeigt.
Das Gerät empfängt dann die Payload-Anweisungen und führt die angegebenen Operationen auf dem Gerät aus. AWS IoT Anschließend verwendet es die UpdateCommandExecution API, um das Ergebnis der Befehlsausführung und die Statusinformationen in den MQTT-Antwortthemen zu veröffentlichen, die für Befehle reserviert sind. 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 mithilfe der GetCommandExecution API abrufen.
Die folgenden Schritte zeigen, wie Sie den MQTT-Testclient verwenden, um Nachrichten zu beobachten.
-
Öffnen Sie den MQTT-Testclient
in der AWS IoT Konsole. -
Geben Sie auf der Registerkarte Abonnieren das folgende Thema ein und wählen Sie dann Abonnieren aus. Dabei
<thingId>steht der Name des Geräts, mit AWS IoT dem Sie sich registriert haben.Anmerkung
Den Ding-Namen für Ihr Gerät finden Sie 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 eine Verbindung zu AWS IoT herstellen auf der Seite Gerät Connect . $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 MQTT-Antwortthema veröffentlichen, das für Befehle reserviert ist.
$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 einen gewünschten Wert zu senken. Die folgende JSON-Datei zeigt eine Beispielnachricht, die das Fahrzeug im 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 Batterie Ihres Autos 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 den AWS CLI Sie können die folgenden Informationen abrufen.
-
eine Ausführungs-ID, die eine eindeutige Kennung der Befehlsausführung darstellt.
-
den Status der Befehlsausführung. Wenn Sie den Befehl auf dem Zielgerät ausführen, geht die Befehlsausführung in den Zustand
CREATEDüber. Sie kann dann in andere Befehlsausführungsstatus ü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 den HTTP-API-Vorgang der ListCommandExecutions AWS IoT Core Steuerungsebene, um alle Befehlsausführungen in Ihrem Konto aufzulisten.
Beispiel einer IAM-Richtlinie
Bevor Sie diesen API-Vorgang verwenden, stellen Sie sicher, dass Ihre IAM-Richtlinie Sie autorisiert, diese Aktion auf dem Gerät auszuführen. Das folgende Beispiel zeigt eine IAM-Richtlinie, die dem Benutzer die Erlaubnis erteilt, die Aktion auszuführen. ListCommandExecutions
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wieregionus-east-1zum Beispiel. -
mit deiner AWS-Konto Nummer, wieaccount-id.123456789012 -
mit Ihrer eindeutigen AWS IoT Befehlskennung, z.command-idB.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
SUCCEEDEDFAILED, oder erreicht hatREJECTED. -
Dieser Vorgang kann nur mit der AWS IoT Core API oder der 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 Ausführung der Aktion autorisiert.
Ersetzen Sie in diesem Beispiel:
-
mit Ihrem AWS-Region, wieRegionus-east-1zum 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 -
entwederdevicesthingoderclientje nachdem, ob Ihre Geräte als AWS IoT Dinge registriert wurden oder als MQTT-Clients spezifiziert sind. -
mit deinem AWS IoTdevice-idthing-nameoderclient-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 je nach Anwendung durch die Kennung für die Befehlsausführung, die Sie löschen, und dann <execution-id> durch den 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 die GetCommandExecution API verwenden, um zu überprüfen, ob die Befehlsausführung in Ihrem Konto nicht mehr vorhanden ist.