

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

# デバイスがオフラインになっている間にデバイスの状態をデバイスシャドウで保持する
<a name="iot-shadows-tutorial"></a>

これらのチュートリアルでは、 AWS IoT Device Shadow サービスを使用してデバイスの状態情報を保存および更新する方法を示します。JSON ドキュメントである Shadow ドキュメントは、デバイス、ローカルアプリケーション、またはサービスによって発行されたメッセージに基づいて、デバイスの状態の変化を示します。このチュートリアルでは、Shadow ドキュメントが電球の色の変化を示します。これらのチュートリアルでは、デバイスがインターネットから切断されている場合でもシャドウがこの情報を保存し、オンラインに戻ってこの情報をリクエストしたときに最新の状態情報をデバイスに返す方法も示しています。

ここに示されている順序でこれらのチュートリアルを試すことをお勧めします。この順序は、作成が必要な AWS IoT リソースと必要なハードウェアのセットアップから始まります。これは、概念を段階的に学ぶのにも役立ちます。これらのチュートリアルでは、 で使用する Raspberry Pi デバイスを設定して接続する方法を示します AWS IoT。必要なハードウェアがない場合は、選択したデバイスに適応させるか、[Amazon EC2 で仮想デバイスを作成](creating-a-virtual-thing.md)して、これらのチュートリアルに従うことができます。

**チュートリアルのシナリオの概要**  
これらのチュートリアルのシナリオは、電球の色を変更し、そのデータを予約済みのシャドウトピックに発行するローカルアプリケーションまたはサービスです。これらのチュートリアルは、[インタラクティブな開始方法のチュートリアル](interactive-demo.md)で説明されている Device Shadow 機能に似ており、Raspberry Pi デバイスに実装されています。このセクションのチュートリアルでは、名前付きのシャドウまたは複数のデバイスに対応する方法を示しつつ、単一のクラシックシャドウに焦点を当てます。

以下のチュートリアルは、 AWS IoT Device Shadow サービスの使用方法を学ぶのに役立ちます。
+ 

**[チュートリアル: シャドウアプリケーションを実行するための Raspberry Pi の準備](create-resources-shadow.md)**  
このチュートリアルでは、 に接続するための Raspberry Pi デバイスを設定する方法を示します AWS IoT。また、 AWS IoT ポリシードキュメントとモノのリソースを作成し、証明書をダウンロードして、そのモノのリソースにポリシーをアタッチします。このチュートリアルの完了には 30 分ほどかかります。
+ 

**[チュートリアル: Device SDK のインストールと Device Shadows のサンプルアプリケーションの実行](lightbulb-shadow-application.md)**  
このチュートリアルでは、必要なツール、ソフトウェア、 AWS IoT Device SDK for Python をインストールし、サンプルシャドウアプリケーションを実行する方法を示します。このチュートリアルは、[Raspberry Pi または他のデバイスを接続する](connecting-to-existing-device.md) に示されている概念に基づいており、完了までに 20 分かかります。
+ 

**[チュートリアル: サンプルアプリケーションと MQTT テストクライアントを使用した Device Shadow とのやり取り](interact-lights-device-shadows.md)**  
このチュートリアルでは、`shadow.py`サンプルアプリケーションと**AWS IoT コンソール**を使用して、 AWS IoT Device Shadows と電球の状態の変化との相互作用を観察する方法を示します。このチュートリアルでは、MQTT メッセージを Device Shadow の予約済みトピックに送信する方法も示しています。このチュートリアルの完了には 45 分間を要する場合があります。

**AWS IoT Device Shadow の概要**  
Device Shadow は、 AWS IoT レジストリで作成した[モノのリソース](iot-thing-management.md)によって管理されるデバイスの永続的な仮想表現です。Shadow ドキュメントは、デバイスの現在の状態の情報を保存および取得するために使用される JSON または JavaScript 表記のドキュメントです。シャドウを使用すれば、デバイスがインターネットに接続されているかどうかにかかわらず、MQTT トピックまたは HTTP REST API を介してデバイスの状態を取得および設定できます。

シャドウのドキュメントには、デバイスの状態の次の側面を説明する `state` プロパティが含まれています。
+ `desired`: アプリケーションは、`desired` オブジェクトを更新することによって、デバイスプロパティの必要な状態を指定します。
+ `reported`: デバイスは、`reported` オブジェクト内の現在の状態を報告します。
+ `delta`: `delta` オブジェクト内の目的の状態と報告された状態 AWS IoT の違いを報告します。

これは、Shadow 状態ドキュメントの例です。

```
{
  "state": {
    "desired": {
      "color": "green"
      },
    "reported": {
      "color": "blue"
      },
    "delta": {
      "color": "green"
      }
   }
}
```

デバイスの Shadow ドキュメントを更新するには、[予約済みの MQTT トピック](reserved-topics.md#reserved-topics-shadow)、HTTP で `GET`、`UPDATE`、および `DELETE` オペレーションをサポートする [Device Shadow REST API](device-shadow-rest-api.md)、ならびに [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html) を使用できます。

前の例で、`desired` 色を `yellow` に変更したいとします。これを行うには、[UpdateThingShadow](device-shadow-rest-api.md#API_UpdateThingShadow) API にリクエストを送信するか、[Update](device-shadow-mqtt.md#update-pub-sub-topic) トピック `$aws/things/THING_NAME/shadow/update` にメッセージを発行します。

```
{
  "state": {
    "desired": {
      "color": yellow
    }
  }
}
```

更新は、リクエストで指定したフィールドにのみ反映されます。Device Shadow が正常に更新されると、 は`delta`トピック に新しい`desired`状態 AWS IoT を発行します`$aws/things/THING_NAME/shadow/delta`。この場合の Shadow ドキュメントは次のようになります。

```
{
  "state": {
    "desired": {
      "color": yellow
    },
    "reported": {
      "color": green
    },
    "delta": {
      "color": yellow
      }
  }
}
```

次に、次の JSON メッセージ`$aws/things/THING_NAME/shadow/update`を含む `Update`トピックを使用して、新しい状態が AWS IoT Device Shadow に報告されます。

```
{
  "state": {
    "reported": {
      "color": yellow
    }
  }
}
```

現在の状態情報を取得する場合は、[GetThingShadow](device-shadow-rest-api.md#API_GetThingShadow) API にリクエストを送信するか、MQTT メッセージを [Get](device-shadow-mqtt.md#get-pub-sub-topic) トピック `$aws/things/THING_NAME/shadow/get` に発行します。

Device Shadow サービスの使用の詳細については、「[AWS IoT Device Shadow サービス](iot-device-shadows.md)」を参照してください。

デバイス、アプリケーション、およびサービスでの Device Shadow の使用の詳細については、[デバイスでのシャドウの使用](device-shadow-comms-device.md) および [アプリとサービスでのシャドウの使用](device-shadow-comms-app.md) を参照してください。

 AWS IoT シャドウの操作については、「」を参照してください[シャドウとの相互作用](device-shadow-data-flow.md)。

MQTT の予約済みトピックおよび HTTP REST API については、[Device Shadow MQTT トピック](device-shadow-mqtt.md) および [Device Shadow の REST API](device-shadow-rest-api.md) を参照してください。