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
Wichtig
Der Zugriff auf bestimmte AWS FleetWise IoT-Funktionen ist derzeit gesperrt. Weitere Informationen finden Sie unter AWS Verfügbarkeit von Regionen und Funktionen im AWS Internet der Dinge FleetWise.
Nachdem Sie eine Befehlsressource erstellt haben, können Sie eine Befehlsausführung auf dem Zielfahrzeug starten. Sobald das Fahrzeug mit der Ausführung des Befehls beginnt, kann es damit beginnen, das Ergebnis der Befehlsausführung zu aktualisieren und Statusaktualisierungen und Ergebnisinformationen in den reservierten MQTT-Themen zu veröffentlichen. Sie können dann den Status der Befehlsausführung abrufen und den Status der Ausführungen in Ihrem Konto überwachen.
In diesem Thema wird gezeigt, wie Sie mithilfe der AWS CLI oder der AWS FleetWise IoT-Konsole einen Befehl an Ihr Fahrzeug senden können. Außerdem erfahren Sie, wie Sie den Status der Befehlsausführung überwachen und aktualisieren können.
Themen
Um einen Befehl von der Konsole aus zu senden, rufen Sie die Seite Fahrzeuge
-
Wählen Sie das Fahrzeug aus, an das Sie einen Befehl senden möchten.
Wählen Sie Befehl ausführen aus.
Wählen Sie die Befehls-ID aus.
Geben Sie das Zeitlimit für die Befehlsausführung an und wählen Sie dann Befehl ausführen.
Sie können den API-Vorgang für die StartCommandExecution AWS IoT Datenebene verwenden, um einen Befehl an ein Fahrzeug zu senden. Das Fahrzeug leitet den Befehl dann an einen Middleware-Dienst für die Automobilindustrie weiter (z. B. SOME/IP (Scalable Service-Oriented Middleware over IP)) oder veröffentlicht ihn in einem Fahrzeugnetzwerk (z. B. eine CAN-Geräteschnittstelle (Controller Area Network)). Das folgende Beispiel verwendet die AWS CLI.
Themen
Überlegungen beim Senden eines Befehls
Wenn Sie die Ausführung eines Befehls starten in AWS IoT FleetWise:
-
Sie müssen AWS IoT etwas für das Fahrzeug bereitstellen. Weitere Informationen finden Sie unter Bereitstellung von AWS FleetWise IoT-Fahrzeugen.
-
Sie müssen bereits einen Befehl mit
AWS-IoT-FleetWiseals Namespace erstellt und einen angegeben haben, der Ihnenrole-Arndie Erlaubnis erteilt, Befehle in AWS IoT FleetWise zu erstellen und auszuführen. Weitere Informationen finden Sie unter Erstellen Sie eine Befehlsressource. -
Sie können das
parametersFeld überspringen, wenn Sie Standardwerte verwenden möchten, die bei der Erstellung des Befehls für die Parameter angegeben wurden. Wenn das bei der Erstellungmandatory-parametersnicht angegeben wurde oder wenn Sie Standardwerte überschreiben möchten, indem Sie Ihre eigenen Werte für die Parameter angeben, müssen Sie dasparametersFeld angeben. Diese zusätzlichen Beispiele finden Sie unterSzenarien zur Verwendung von Befehlen. -
Sie können bis zu drei Name-Wert-Paare für das
mandatory-parametersFeld angeben. Bei der Ausführung des Befehls auf dem Fahrzeug wird jedoch nur ein Name-Wert-Paar akzeptiert, und dasnameFeld muss den vollqualifizierten Namen mit dem Präfix verwenden.$actuatorPath.
Rufen Sie den kontospezifischen Endpunkt der Datenebene ab
Bevor Sie den API-Befehl ausführen, müssen Sie die kontospezifische Endpunkt-URL für den Endpunkt abrufen. iot:Jobs Wenn Sie z. B. den folgenden Befehl ausführen:
aws iot describe-endpoint --endpoint-type iot:Jobs
Es wird die kontospezifische Endpunkt-URL zurückgegeben, wie in der folgenden Beispielantwort gezeigt.
{ "endpointAddress": "<account-specific-prefix>.jobs.iot.<region>.amazonaws.com" }
Senden Sie ein Befehlsbeispiel
Um einen Befehl an ein Fahrzeug zu senden, führen Sie den folgenden Befehl aus.
-
command-arnErsetzen Sie durch den ARN für den Befehl, den Sie ausführen möchten. Sie können diese Informationen aus der Antwort descreate-commandCLI-Befehls abrufen. -
target-arnErsetzen Sie durch den ARN für das Zielgerät oder die AWS IoT Sache, für die Sie den Befehl ausführen möchten.Anmerkung
Sie können den Ziel-ARN einer AWS IoT Sache (AWS FleetWise IoT-Fahrzeug) angeben. Dinggruppen und Flotten werden derzeit nicht unterstützt.
-
endpoint-urlErsetzen Sie es durch den kontospezifischen Endpunkt, den Sie in abgerufen habenRufen Sie den kontospezifischen Endpunkt der Datenebene ab, mit dem Präfix z.https://B.https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com -
Ersetzen Sie
nameundvaluedurch dasmandatory-parametersFeld, das Sie bei der Erstellung des Befehls mit dercreate-commandCLI angegeben haben.Das
nameFeld ist der vollqualifizierte Name, wie er im Signalkatalog definiert ist, mit$actuatorPath.dem Präfix. Kann$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringModeundnamevaluekann beispielsweise ein boolescher Wert sein, der einen Lenkmodusstatus wie anzeigt.{"B": false} -
(Optional) Sie können auch einen zusätzlichen Parameter angeben,.
executionTimeoutSecondsDieses optionale Feld gibt die Zeit in Sekunden an, innerhalb derer das Gerät mit dem Ausführungsergebnis antworten muss. Sie können das Timeout auf einen Höchstwert von 24 Stunden konfigurieren.Wenn die Befehlsausführung erstellt wurde, startet ein Timer. Wenn sich der Status der Befehlsausführung vor Ablauf des Timers nicht in einen Status ändert, der ihn zum Terminal macht, wie z. B.
SUCCEEDEDoderFAILED, ändert sich der Status automatisch zuTIMED_OUT.Anmerkung
Das Gerät kann auch einen
TIMED_OUTStatus melden oder diesen Status in einen Status wieSUCCEEDED,FAILEDoder überschreibenREJECTED, und die Befehlsausführung wird zum Terminal. Weitere Informationen finden Sie unter Status des Timeouts bei der Befehlsausführung.
aws iot-jobs-data start-command-execution \ --command-arncommand-arn\ --target-arntarget-arn\ --execution-timeout-seconds30\ --endpoint-urlendpoint-url\ --parameters '[ { "name":name, "value":value} ]'
Die StartCommandExecution API-Operation gibt eine Befehlsausführungs-ID zurück. Sie können diese ID verwenden, um den Status der Befehlsausführung, die Details und den Verlauf der Befehlsausführung abzufragen.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
Nachdem Sie den Befehl ausgeführt haben, erhalten Ihre Geräte eine Benachrichtigung mit den folgenden Informationen. Das issued_timestamp_ms Feld entspricht der Uhrzeit, zu der die StartCommandExecution API aufgerufen wurde. Das timeout_ms entspricht dem Timeout-Wert, der beim Aufrufen der API mithilfe des executionTimeoutSeconds Parameters konfiguriert wurde. StartCommandExecution
timeout_ms:9000000issued_timestamp_ms:1723847831317
Ergebnis der Befehlsausführung aktualisieren
Um den Status der Befehlsausführung zu aktualisieren, muss Ihr Gerät eine MQTT-Verbindung hergestellt und das folgende Thema zur Befehlsanfrage abonniert haben.
Ersetzen Sie in diesem Beispiel durch die eindeutige Kennung Ihres Zielgeräts, bei der es sich um den Namen <device-id>VehicleId oder den Namen der Sache handeln kann, und durch die Kennung für die Befehlsausführung.<execution-id>
Anmerkung
-
Die Payload muss das Protobuf-Format verwenden.
-
Es ist für Ihre Geräte optional, die Themen
/acceptedund/rejectedAntworten zu abonnieren. Ihre Geräte erhalten diese Antwortnachrichten auch dann, wenn sie sie nicht ausdrücklich abonniert haben.
// Request topic $aws/devices/<DeviceID>/command_executions/+/request/protobuf // Response topics (Optional) $aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/accepted/protobuf $aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/rejected/protobuf
Ihr Gerät kann eine Nachricht zum Thema Befehlsantwort veröffentlichen. Nach der Verarbeitung des Befehls wird eine protobuf-kodierte Antwort zu diesem Thema gesendet. Das <DeviceID> Feld muss mit dem entsprechenden Feld im Thema der Anfrage übereinstimmen.
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/<PayloadFormat>
Nachdem Ihr Gerät eine Antwort zu diesem Thema veröffentlicht hat, können Sie die aktualisierten Statusinformationen mithilfe der GetCommandExecution API abrufen. Der Status der Befehlsausführung kann einer der hier aufgeführten sein.
-
IN_PROGRESS -
SUCCEEDED -
FAILED -
REJECTED -
TIMED_OUT
Beachten Sie, dass es sich bei der Ausführung eines Befehls in einem der Status SUCCEEDEDFAILED, und um REJECTED ein Terminal handelt und der Status vom Gerät gemeldet wird. Wenn ein Befehl terminalförmig ausgeführt wird, bedeutet dies, dass der Status oder die zugehörigen Felder nicht weiter aktualisiert werden. Ein TIMED_OUT Status kann vom Gerät oder der Cloud gemeldet werden. Wenn es von der Cloud gemeldet wird, kann das Gerät später eine Aktualisierung des Felds für den Statusgrund vornehmen.
Im Folgenden wird beispielsweise eine MQTT-Beispielnachricht gezeigt, die vom Gerät veröffentlicht wurde.
Anmerkung
Für den Status der Befehlsausführung müssen Sie Folgendes sicherstellen, wenn Ihre Geräte das statusReason Objekt zum Veröffentlichen der Statusinformationen verwenden:
-
Der
reasonCodeverwendet das Muster[A-Z0-9_-]+und es ist nicht länger als 64 Zeichen. -
Das
reasonDescriptionist nicht länger als 1.024 Zeichen. Es können alle Zeichen außer Steuerzeichen wie Zeilenumbrüchen verwendet werden.
{ "deviceId": "", "executionId": "", "status": "CREATED", "statusReason": { "reasonCode": "", "reasonDescription": "" } }
Ein Beispiel, das zeigt, wie Sie den AWS IoT Core MQTT-Testclient verwenden können, um die Themen zu abonnieren und die Meldungen zur Befehlsausführung zu sehen, finden Sie unter Befehlsaktualisierungen mit dem MQTT-Testclient anzeigen im AWS IoT Core Entwicklerhandbuch.
Holen Sie sich die Befehlsausführung
Sie können den API-Vorgang der GetCommandExecution AWS IoT Steuerungsebene verwenden, um Informationen über die Ausführung eines Befehls abzurufen. Sie müssen diesen Befehl bereits mithilfe der StartCommandExecution API-Operation ausgeführt haben.
Führen Sie den folgenden Befehl aus, um die Metadaten eines ausgeführten Befehls abzurufen.
-
execution-idErsetzen Sie ihn durch die ID des Befehls. Sie können diese Informationen aus der Antwort desstart-command-executionCLI-Befehls abrufen. -
target-arnErsetzen Sie es durch den ARN für das Zielfahrzeug AWS IoT oder Objekt, für das Sie den Befehl ausführen möchten.
aws iot get-command-execution --execution-idexecution-id\ --target-arntarget-arn
Die GetCommandExecution API-Operation gibt eine Antwort zurück, die Informationen über den ARN der Befehlsausführung, den Ausführungsstatus und den Zeitpunkt enthält, zu dem der Befehl ausgeführt wurde und wann er abgeschlossen wurde. Der folgende Code zeigt eine Beispielantwort aus der API-Anfrage.
Um zusätzlichen Kontext zum Status der einzelnen Befehlsausführungen bereitzustellen, stellt die Befehlsfunktion ein statusReason Objekt bereit. Das Objekt enthält zwei Felder reasonCode undreasonDescription. Mithilfe dieser Felder können Ihre Geräte zusätzliche Informationen über den Status der Befehlsausführung bereitstellen. Diese Informationen überschreiben alle reasonCode StandardwertereasonDescription, die aus der Cloud gemeldet werden.
Um diese Informationen zu melden, können Ihre Geräte die aktualisierten Statusinformationen in der Cloud veröffentlichen. Wenn Sie dann den Status der Befehlsausführung mithilfe der GetCommandExecution API abrufen, werden Ihnen die neuesten Statuscodes angezeigt.
Anmerkung
Das completedAt Feld in der Ausführungsantwort entspricht dem Zeitpunkt, zu dem das Gerät einen Terminalstatus an die Cloud meldet. Im Fall eines 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 unterStatus des Timeouts 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/myFrontDoor", "status": "SUCCEEDED", "statusReason": { "reasonCode": "65536", "reasonDescription": "SUCCESS" }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00", "Parameters": '{ "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode": { "B": true } }' }
Listet die Befehlsausführungen in Ihrem Konto auf
Verwenden Sie den HTTP-API-Vorgang der ListCommandExecutions AWS IoT Core Steuerungsebene, um alle Befehlsausführungen in Ihrem Konto aufzulisten. Das Beispiel verwendet das AWS CLI.
Überlegungen beim Auflisten von Befehlsausführungen
Im Folgenden sind einige Überlegungen zur Verwendung der ListCommandExecutions API aufgeführt.
-
Sie müssen mindestens das
targetArnoder das angeben,commandArnje nachdem, ob Sie Ausführungen für einen bestimmten Befehl oder ein Zielfahrzeug auflisten möchten. Die API-Anforderung darf nicht leer sein und nicht beide Felder in derselben Anfrage enthalten. -
Sie müssen nur die
startedTimeFilteroder diecompletedTimeFilterInformationen angeben. Die API-Anfrage darf nicht leer sein und nicht beide Felder in derselben Anfrage enthalten. Sie können dieafterFelderbeforeund des Objekts verwenden, um Befehlsausführungen aufzulisten, die innerhalb eines bestimmten Zeitraums entweder erstellt oder abgeschlossen wurden. -
beforeSowohl dieafterFelder als auch dürfen nicht größer als die aktuelle Uhrzeit sein. Wenn Sie keinen Wert angeben, entspricht dasbeforeFeld standardmäßig der aktuellen Uhrzeit und demafterFeld der aktuellen Uhrzeit — 6 Monate. Das heißt, je nach verwendetem Filter listet die API alle Ausführungen auf, die in den letzten sechs Monaten entweder erstellt oder abgeschlossen wurden. -
Sie können den
sort-orderParameter verwenden, um anzugeben, ob Sie die Ausführungen in aufsteigender Reihenfolge auflisten möchten. Standardmäßig werden die Ausführungen in absteigender Reihenfolge aufgeführt, wenn Sie dieses Feld nicht angeben. -
Sie können die Befehlsausführungen nicht nach ihrem Status filtern, wenn Sie Befehlsausführungen für einen Befehl-ARN auflisten.
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 über den 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" } ] }
Löscht eine Befehlsausführung
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.
Das folgende Beispiel zeigt Ihnen, wie Sie eine Befehlsausführung mithilfe des delete-command-execution AWS CLI Befehls löschen. Ersetzen Sie es durch den Bezeichner der Befehlsausführung, die Sie löschen möchten. <execution-id>
aws iot delete-command-execution --execution-id<execution-id>
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.