翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ジョブデバイス MQTT API オペレーション
ジョブデバイスコマンドは、ジョブコマンドに使用される予約済みトピックに MQTT メッセージを発行することで発行できます。
デバイス側のクライアントは、これらのコマンドの応答メッセージトピックにサブスクライブする必要があります。 AWS IoT Device Client を使用する場合、デバイスはレスポンストピックに自動的にサブスクライブします。つまり、クライアントが応答メッセージトピックをサブスクライブしているかどうかにかかわらず、メッセージブローカーはコマンドメッセージを発行したクライアントに応答メッセージトピックを発行することになります。これらの応答メッセージはメッセージブローカーを通過せず、他のクライアントまたはルールによってサブスクライブする事はできません。
フリートモニタリングソリューション用のジョブと jobExecution イベントトピックをサブスクライブする際は、まずジョブおよびジョブ実行イベントを有効にして、クラウド側でイベント受信します。メッセージブローカーを介して処理され、 AWS IoT
ルールで使用できるジョブ進行状況メッセージは ジョブイベント として発行されます。メッセージブローカーは、応答メッセージを発行するため、明示的なサブスクリプションがない場合でも、クライアントは、メッセージを受信し、受信したメッセージを識別するように設定される必要があります。また、クライアントは、クライアントがメッセージを処理する前に、受信メッセージトピックの thingName がクライアントの Thing 名に適用されることを確認する必要もあります。
注記
MQTT Jobs API コマンドメッセージに応答して AWS IoT が送信するメッセージは、明示的にサブスクライブしたかどうかにかかわらず、アカウントに課金されます。
以下は、MQTT API オペレーションとそのリクエストとレスポンスの構文を示しています。すべての MQTT API オペレーションには次のパラメータがあります。
- clientToken
-
リクエストとレスポンスを関連付けるために使用されるオプションのクライアントトークン。ここに任意の値を入力すると、レスポンスに反映されます。
timestamp-
メッセージが送信されたときの、エポックからの秒単位の時間。
特定のモノについて、ターミナル状態にないすべてのジョブのリストを取得します。
この API を呼び出すには、$aws/things/ にメッセージを発行します。thingName/jobs/get
リクエストペイロード:
{ "clientToken": "string" }
メッセージブローカーは、特定のサブスクリプションがなくても $aws/things/ および thingName/jobs/get/accepted$aws/things/ を発行します。ただし、クライアントがメッセージを受信するには、それらをリッスンしている必要があります。詳細については、[the note about Jobs API messages](Jobs API メッセージに関する注記) を参照してください。thingName/jobs/get/rejected
レスポンスペイロード:
{ "inProgressJobs" : [ JobExecutionSummary ... ], "queuedJobs" : [ JobExecutionSummary ... ], "timestamp" : 1489096425069, "clientToken" : "client-001" }
ここで、inProgressJobs と queuedJobs は、IN_PROGRESS または QUEUED のステータスを持つ JobExecutionSummary オブジェクトのリストを返します。
モノの次の保留中のジョブ実行を取得し、開始します (ステータスが IN_PROGRESS または QUEUED)。
-
ステータスが
IN_PROGRESSのジョブの実行が最初に返されます。 -
ジョブの実行は、キューに保存された順に返されます。ジョブのターゲットグループにモノが追加または削除された場合は、既存のジョブ実行と比較して、新しいジョブ実行のロールアウト順序を確認します。
-
次の保留中のジョブの実行が
QUEUEDの場合、そのステータスはIN_PROGRESSに変更され、ジョブの実行の詳細は指定どおりに設定されます。 -
次の保留中のジョブの実行がすでに
IN_PROGRESSである場合、そのステータスの詳細は変更されません。 -
保留中のジョブの実行がない場合、レスポンスに
executionフィールドは含まれません。 -
オプションで、
stepTimeoutInMinutesプロパティの値を設定してステップタイマーを作成できます。UpdateJobExecutionを実行してこのプロパティの値を更新しない場合、ステップタイマーが時間切れになると、ジョブの実行がタイムアウトになります。
この API を呼び出すには、$aws/things/ にメッセージを発行します。thingName/jobs/start-next
リクエストペイロード:
{ "statusDetails": { "string": "job-execution-state" ... }, "stepTimeoutInMinutes": long, "clientToken": "string" }
statusDetails-
ジョブ実行のステータスについて説明する名前と値のペアの集合。指定しない場合、
statusDetailsは変更されません。 stepTimeOutInMinutes-
このデバイスがこのジョブの実行を終了する必要のある時間を指定します。このタイマーが時間切れになるか、再設定される (
UpdateJobExecutionを呼び出し、ステータスをIN_PROGRESSに設定して、stepTimeoutInMinutesフィールドで新しいタイムアウト値を指定する) までに、ジョブの実行ステータスが終了状態に設定されない場合、ジョブの実行ステータスはTIMED_OUTに設定されます。このタイムアウトを設定しても、ジョブの作成時に指定したジョブの実行タイムアウト (CreateJobでtimeoutConfigフィールドを使用することにより) には影響を与えません。このパラメータの有効な値の範囲は 1 〜 10,080 (1 分〜 7 日) です。値 -1 も有効で、現在のステップタイマー (以前に UpdateJobExecutionRequest を使用して作成されたもの) をキャンセルします。
メッセージブローカーは、特定のサブスクリプションがなくても $aws/things/ および thingName/jobs/start-next/accepted$aws/things/ を発行します。ただし、クライアントがメッセージを受信するには、それらをリッスンしている必要があります。詳細については、[the note about Jobs API messages](Jobs API メッセージに関する注記) を参照してください。thingName/jobs/start-next/rejected
レスポンスペイロード:
{ "execution" : JobExecutionData, "timestamp" : timestamp, "clientToken" : "string" }
ここで、execution は JobExecution オブジェクトです。例:
{ "execution" : { "jobId" : "022", "thingName" : "MyThing", "jobDocument" : "< contents of job document >", "status" : "IN_PROGRESS", "queuedAt" : 1489096123309, "lastUpdatedAt" : 1489096123309, "versionNumber" : 1, "executionNumber" : 1234567890 }, "clientToken" : "client-1", "timestamp" : 1489088524284, }
ジョブの実行に関する詳細情報を取得します。
jobId を $next に設定して、モノ (ステータスが IN_PROGRESS または QUEUED のもの) に対して保留中の次のジョブ実行を返すことができます。
この API を呼び出すには、$aws/things/ にメッセージを発行します。thingName/jobs/jobId/get
リクエストペイロード:
{ "jobId" : "022", "thingName" : "MyThing", "executionNumber": long, "includeJobDocument": boolean, "clientToken": "string" }
thingName-
デバイスに関連付けられたモノの名前。
jobId-
作成時にこのジョブに割り当てた一意の識別子。
または、
$nextを使用して、モノ (ステータスがIN_PROGRESSまたはQUEUEDのもの) に対して保留中の次のジョブ実行を返すことができます。この場合は、ステータスがIN_PROGRESSのジョブの実行が最初に返されます。ジョブの実行は、作成された順に返されます。 executionNumber-
(オプション) デバイスでジョブの実行を識別する番号。指定しない場合、最新のジョブ実行が返されます。
includeJobDocument-
(オプション)
falseに設定しない限り、レスポンスにはジョブドキュメントが含まれます。デフォルトはtrueです。
メッセージブローカーは、特定のサブスクリプションがなくても $aws/things/ および thingName/jobs/jobId/get/accepted$aws/things/ を発行します。ただし、クライアントがメッセージを受信するには、それらをリッスンしている必要があります。詳細については、[the note about Jobs API messages](Jobs API メッセージに関する注記) を参照してください。thingName/jobs/jobId/get/rejected
レスポンスペイロード:
{ "execution" : JobExecutionData, "timestamp": "timestamp", "clientToken": "string" }
ここで、execution は JobExecution オブジェクトです。
ジョブ実行のステータスを更新します。オプションで、ステップタイマーを作成するには、stepTimeoutInMinutes プロパティの値を設定します。UpdateJobExecution を再び実行してこのプロパティの値を更新しない場合、ステップタイマーが時間切れになると、ジョブの実行がタイムアウトになります。
この API を呼び出すには、$aws/things/ にメッセージを発行します。thingName/jobs/jobId/update
リクエストペイロード:
{ "status": "job-execution-state", "statusDetails": { "string": "string" ... }, "expectedVersion": "number", "executionNumber": long, "includeJobExecutionState": boolean, "includeJobDocument": boolean, "stepTimeoutInMinutes": long, "clientToken": "string" }
status-
ジョブ実行の新しいステータス (
IN_PROGRESS、FAILED、SUCCEEDED、またはREJECTED)。これはすべての更新時に指定する必要があります。 statusDetails-
ジョブ実行のステータスについて説明する名前と値のペアの集合。指定しない場合、
statusDetailsは変更されません。 expectedVersion-
ジョブ実行の予想される現在のバージョン。ジョブの実行を更新するたびに、そのバージョンがインクリメントされます。 AWS IoT Jobs サービスに保存されているジョブ実行のバージョンが一致しない場合、更新は
VersionMismatchエラーで拒否されます。現在のジョブ実行ステータスデータを含む ErrorResponse も返されます。(これにより、ジョブ実行ステータスデータを取得するために別のDescribeJobExecutionリクエストを実行する必要はありません。) executionNumber-
(オプション) デバイスでジョブの実行を識別する番号。指定しない場合、最新のジョブ実行が使用されます。
includeJobExecutionState-
(オプション) これが含まれ、
trueに設定されている場合、レスポンスにはJobExecutionStateフィールドが含まれます。デフォルトはfalseです。 includeJobDocument-
(オプション) これが含まれ、
trueに設定されている場合、レスポンスにはJobDocumentが含まれます。デフォルトはfalseです。 stepTimeoutInMinutes-
このデバイスがこのジョブの実行を終了する必要のある時間を指定します。タイマーが期限切れになるかタイマーがリセットされる前にジョブ実行ステータスが終了状態に設定されない場合、ジョブ実行ステータスは
TIMED_OUTに設定されます。このタイムアウトを設定または再設定しても、ジョブの作成時に指定したジョブの実行タイムアウトには影響を与えません。
メッセージブローカーは、特定のサブスクリプションがなくても $aws/things/ および thingName/jobs/jobId/update/accepted$aws/things/ を発行します。ただし、クライアントがメッセージを受信するには、それらをリッスンしている必要があります。詳細については、[the note about Jobs API messages](Jobs API メッセージに関する注記) を参照してください。thingName/jobs/jobId/update/rejected
レスポンスペイロード:
{ "executionState": JobExecutionState, "jobDocument": "string", "timestamp": timestamp, "clientToken": "string" }
executionState-
JobExecutionState オブジェクト。
jobDocument-
ジョブドキュメントオブジェクト。
注記
MQTT レスポンスでは、
jobDocumentフィールドは JSON オブジェクトです。HTTP レスポンスでは、JSON オブジェクトの文字列表現です。 timestamp-
メッセージが送信されたときの、エポックからの秒単位の時間。
clientToken-
リクエストとレスポンスを相関させるために使用されるクライアントトークン。
MQTT プロトコルを使用する場合、以下の更新を実行することもできます。
あるジョブの実行中のジョブのリストに、ジョブの実行が追加または削除されるたびに送信されます。
トピックを使用します。
$aws/things/thingName/jobs/notify
メッセージペイロード:
{ "jobs" : { "JobExecutionState": [JobExecutionSummary... ] }, "timestamp": timestamp }
DescribeJobExecution に対して jobId $next で定義されている、モノに対する保留されているジョブ実行のリストで、次の順番のジョブに変更があったときに送信されます。このメッセージは、次のジョブの実行の詳細が変更されたときには送信されません。これは、jobId $next とともに DescribeJobExecution で返される次のジョブが変更されたときだけです。ステータスが QUEUED のジョブ実行 J1 と J2 を考えてみましょう。保留中のジョブの実行リストの次に J1 が表示されます。J1 の状態が変更されないまま J2 のステータスが IN_PROGRESS に変更された場合、この通知が送信され、J2 の詳細が含まれます。
トピックを使用します。
$aws/things/thingName/jobs/notify-next
メッセージペイロード:
{ "execution" :JobExecution, "timestamp": timestamp, }