

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS IoT ジョブライブラリのデモ
<a name="freertos-jobs-demo"></a>

**重要**  <a name="deprecation-message-demo"></a>
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

## 序章
<a name="freertos-jobs-demo-introduction"></a>

 AWS IoT Jobs ライブラリデモでは、MQTT 接続を介して [AWS IoT Jobs サービス](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html)に接続し、 からジョブを取得し AWS IoT、デバイスで処理する方法を示します。 AWS IoT Jobs デモプロジェクトは [ FreeRTOS Windows ポート](https://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html)を使用するため、Windows の [Visual Studio コミュニティ](https://visualstudio.microsoft.com/vs/community/)バージョンで構築および評価できます。マイクロコントローラハードウェアは必要ありません。このデモでは、 と同じ方法で TLS を使用して AWS IoT MQTT ブローカーへの安全な接続を確立します[coreMQTT Mutual Authentication デモ](mqtt-demo-ma.md)。

**注記**  
FreeRTOS デモをセットアップして実行するには、[FreeRTOS の開始方法](freertos-getting-started.md) の手順に従います。

## ソースコードの編成
<a name="freertos-jobs-demo-source-code-org"></a>

デモのコードは `jobs_demo.c` ファイルにあり、[GitHub ](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c)ウェブサイトまたは `{{freertos}}/demos/jobs_for_aws/` ディレクトリで見つけることができます。

## AWS IoT MQTT ブローカー接続を設定する
<a name="freertos-jobs-demo-configure-mqtt-broker"></a>

このデモでは、MQTT ブローカーへの AWS IoT MQTT 接続を使用します。この接続は、[coreMQTT Mutual Authentication デモ](mqtt-demo-ma.md) と同じ方法で設定されています。

## 機能
<a name="freertos-jobs-demo-functionality"></a>

このデモでは、 からジョブを受信 AWS IoT し、デバイスで処理するために使用されるワークフローを示します。このデモはインタラクティブであり、 AWS IoT コンソールまたは AWS Command Line Interface () を使用してジョブを作成する必要がありますAWS CLI。ジョブの作成の詳細については、「*AWS CLI コマンドリファレンス*」の「[create-job](https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html)」を参照してください。デモでは、メッセージをコンソールに出力するために、`action` キーが `print` に設定されたジョブドキュメントが必要です。

このジョブドキュメントについては、次の形式を参照してください。

```
{
    "action": "print",
    "message": "ADD_MESSAGE_HERE"
}
```

を使用して、次のコマンド例のようにジョブ AWS CLI を作成できます。

```
aws iot create-job \
    --job-id t12 \
    --targets arn:aws:iot:{{region}}:123456789012:thing/device1 \
    --document '{"action":"print","message":"hello world!"}'
```

デモでは、メッセージをトピックに再発行するために、`action` キーが `publish` に設定されたジョブドキュメントも必要です。このジョブドキュメントについては、次の形式を参照してください。

```
{
    "action": "publish",
    "message": "ADD_MESSAGE_HERE",
    "topic": "topic/name/here"
}
```

デモは、デモを終了するために `action` キーが `exit` に設定されたジョブドキュメントを受信するまでループします。ジョブドキュメントの形式は次のとおりです。

```
{
    "action: "exit"
}
```

### ジョブデモのエントリポイント
<a name="freertos-jobs-demo-functionality-entry-point"></a>

ジョブデモのエントリポイント関数のソースコードは、[GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L773-L967) にあります。この関数は次の操作を実行します。

1. `mqtt_demo_helpers.c` のヘルパー関数を使用して MQTT 接続を確立します。

1. `NextJobExecutionChanged` のヘルパー関数を使用して `mqtt_demo_helpers.c` API 向けの MQTT トピックをサブスクライブします。トピック文字列は、 AWS IoT Jobs ライブラリで定義されたマクロを使用して、前にアセンブルされます。

1. `StartNextPendingJobExecution` のヘルパー関数を使用して `mqtt_demo_helpers.c` API 向けの MQTT トピックを発行します。トピック文字列は、 AWS IoT Jobs ライブラリで定義されたマクロを使用して、前にアセンブルされます。

1. `MQTT_ProcessLoop` を繰り返し呼び出して着信メッセージを受信し、処理のために `prvEventCallback` に渡します。

1. デモが終了アクションを受け取ったら、`mqtt_demo_helpers.c` ファイルのヘルパー関数を使用して、MQTT トピックのサブスクライブを解除し、接続を切断します。

### 受信した MQTT メッセージのコールバック
<a name="freertos-jobs-demo-functionality-callback"></a>

[ prvEventCallback](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L674-L769) 関数は AWS IoT Jobs ライブラリ`Jobs_MatchTopic`から呼び出して、受信 MQTT メッセージを分類します。メッセージタイプが新しいジョブに対応している場合、`prvNextJobHandler()` が呼び出されます。

[prvNextJobHandler](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L601-L670) 関数とこの関数に呼び出される関数は、JSON 形式のメッセージからジョブドキュメントを解析し、ジョブで指定されたアクションを実行します。特に興味深いのは `prvSendUpdateForJob` 関数です。

### 実行中のジョブの更新を送信する
<a name="freertos-jobs-demo-functionality-send-update"></a>

[prvSendUpdateForJob()](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L413-L457) 関数は、ジョブライブラリから `Jobs_Update()` を呼び出し、直後の MQTT 公開操作で使用されるトピック文字列を入力します。