Dash Replenishment - システムの要件
Amazon Dash Replenishment Through Alexa (DART)のコネクテッドデバイスへのインテグレーションは、Alexaスマートホームスキルの拡張を行うのみで簡単に対応することができます。
概要
DARTをスマートデバイスのエコシステムに組み込む際に、複数の要件を考える必要があります。DARTはAlexaスマートホームのCapabilityの拡張のため、スマートデバイスにすでにご利用のコンポーネントに対して追加するのみで対応できる可能性があります。下記の図ではAlexaスマートホームとDARTを実装するのに必須のコンポーネントである、デバイス・デバイスクラウド・スマートホームスキルの関係を図示しています。必須ではありませんが、スマートデバイスを操作するため、デバイスメーカーのコンパニオンアプリがあるとより良いです。
DARTはAlexaスマートホームのクラウドを通して在庫のアップデートを検知し、ユーザーに対して通知を行います(Email、及びAlexaの通知)。
デバイス
DARTをインテグレートするための基本的な要件は、デバイスが消耗品の状態の情報を送信することができることです。DARTの要件として、デバイスは在庫量のアップデートを日単位で送信する必要がありますので、デバイスはハードウェア、ファームウェアおよび通信手段を用いて、この要件を満たす必要があります。デバイスがWi-Fiに常時接続され、信頼性のあるデータを随時送信できることがベストなCXです。一方で、Wi-Fiではなくコンパニオンアプリ、あるいは何らかのハブを介してBluetoothなどの通信方式で送信することも可能です。開発の早い段階で、Amazonのソリューションアーキテクトと議論していただくことをお勧めします。 送信されるデータは、直接的な消費量(LevelおよびUsageセンサー)、推定される消費量あるいは寿命の残量など(Level Usageセンサー)、あるいはその他の形式が考えられます。デバイスは仮想的な3種類のセンサータイプ - Level, Usage および Level-Usage から一つを選択します。
Amazonの在庫管理システムが在庫の管理、通知、および再注文を制御できるように、デバイスは定期的な消費財の状態のアップデートを、デバイスメーカーのクラウド経由で定期的に送信してください。アップデートの頻度はセンサータイプにより異なります。
- Levelセンサー: 消費財の残量がデバイスメーカーのクラウドに送信・格納されます。Alexaクラウドには、1日に少なくとも1回、Proactive State Update (PSU) を用いて報告します。
- Usage および Level Usageセンサー: 消費財の消費が発生するたびに、デバイスメーカーのクラウド経由でPSUを用いて報告します。
デバイスクラウド
デバイスメーカーのデバイスクラウドは、スマートデバイスと通信を行い、Alexaクラウドからのディレクティブに対応し、Alexaクラウドに対してPSUを送信する役割を担います。デバイス通信、認証、デバイス登録、Alexaクラウドとの通信が、デバイスクラウドの主な機能です。AWSをお使いいただくことが、開発負荷の減少と、Amazonからのサポートという観点でベストですが、技術的な要件さえカバーされていれば、AWSでなくても構いません。
-
デバイス通信 (IoT): デバイスはデバイスクラウドと相互に通信を行う必要があります。在庫データはデバイスからデバイスクラウドを介してAlexaクラウドに送信されます。もちろんDARTの機能の実装を行うのみではなく、エンドユーザーに付加価値を提供するIoT機能を追加していただくことが可能ですし、AmazonとしてDART以外の機能を追加することを積極的に推奨します。
-
認証サービス (OAuth2): スキルを有効化する際のアカウントリンク処理の一環で、デバイスメーカーのエンドユーザーアカウント情報を、Amazonのアカウントと紐づける必要があります。デバイスメーカーのOAuth2サーバーは、Alexaクラウドに対して認可グラントを提供し、デバイスとの接続とPSUの送信を行うことが可能になります。デバイスクラウドはWebサイト上にログイン画面を表示して、デバイスアカウントの入力を促し、デバイスクラウドとAlexaクラウド間のトークン交換を可能にします。Alexaアプリからのログイン画面(WebView)の例:
- デバイスリスト: デバイスクラウドでは、エンドユーザーとデバイスを紐づけてリストにします。エンドユーザーがデバイスのスマートホームスキルを有効化すると、Alexaクラウドはデバイスクラウドに対し、エンドユーザーに紐づいたデバイスのリストをリクエストします。デバイスクラウドは、スキルを介してデバイスのリストと、それぞれのデバイスのCapabilityを返します。
- Alexaクラウドとの通信: デバイスのスマートホームスキルは、Alexaクラウドからのディレクティブに対応し、デバイスの状況や通信を行います。スキル自体には状態を保持しない(stateless)ので、必要な状態データはデバイスクラウドで保持する必要があります。例えば、プリンターのインクの場合、デバイスクラウドは非同期のPSUを送信して、Alexa蔵度に対してデバイスの消耗品のステータスを通知します。一般に、Lambda関数はデバイスクラウドの機能ごと複数作成した上で、そのうちの一つの関数がスキルとの通信を司るように設計した方が、設計の自由度が向上します。
スマートホームスキル
スマートホームスキルは一般に、Alexaの声による制御や、デバイスの状態をやりとりするのにつあわれます。デバイスのスマートホームスキルは、Alexaがデバイスを発見し、DARTとしてデバイス登録を行い、また消耗品の状態をPSUにより受信し、Alexa対応デバイスあるいはAlexaアプリとの通信をおおないます。スキルのバックエンドはLambda関数として、対応するプログラミング言語を用いて実装されます(Node.jsとPythonが多く使われています)。
DARTを実装するための開発項目は、すでにスキルを持っているか、などの要素に依存します。下記の図を参考にしてください。
開発における実装項目についての詳細は、スキルを持っていない場合、カスタムスキルを持っている場合、またはスマートホームスキルを持っている場合の下記の説明を参照してください。
まだコネクテッドデバイスがAlexaスキルに対応していない場合、下記のステップが必要となります。
- DRSコンソール上で 新規デバイスの作成 を行い、
replenishmentId
を取得します。 - Alexaコンソール上で 新規スキルの作成 を行い、スマートホームモデルを選択します。
- アカウントリンク の設定をAlexaコンソール上で行い、デバイスメーカーの準備したOAuth2サーバーの詳細を入力します。
- AWSコンソール上で Lambda関数 を作成し、Alexaスマートホームからのリクエストを処理できるようにします。
- 対応するコネクテッドデバイスから、登録のためのデバイスIDがデバイスメーカーのクラウドに通知するよう実装します。
- 対応するコネクテッドデバイスから、消耗品の使用量・在庫量がデバイスメーカーのクラウドに通知するよう実装します。
既にカスタムスキルがある場合、下記のステップが必要となります。
- DRSコンソール上で 新規デバイスの作成 を行い、
replenishmentId
を取得します。 - Alexaコンソールで モデルの追加 を選択し、スマートホームモデルを追加します。
- アカウントリンク の設定をAlexaコンソール上で行い、デバイスメーカーの準備したOAuth2サーバーの詳細を入力します。
- AWSコンソール上で Lambda関数 を作成し、Alexaスマートホームからのリクエストを処理できるようにします。
- 対応するコネクテッドデバイスから、登録のためのデバイスIDがデバイスメーカーのクラウドに通知するよう実装します。
- 対応するコネクテッドデバイスから、消耗品の使用量・在庫量がデバイスメーカーのクラウドに通知するよう実装します。
既にスマートホームスキルがある場合、下記のステップが必要となります。
- DRSコンソール上で 新規デバイスの作成 を行い、
replenishmentId
を取得します。 - AWSコンソール上で Lambda関数 を変更し、ディスカバリーと消耗品の報告を処理できるようにします。
- 対応するコネクテッドデバイスから、消耗品の使用量・在庫量がデバイスメーカーのクラウドに通知するよう実装します。
デザインチェックリスト
このチェックリストは、DARTを実装するのに必要な項目のうち重要なものを挙げています。
事前準備
Amazon開発者アカウント
AWSアカウント
テスト用のAlexa対応デバイス、またはAlexaアプリ
デバイス
3つの仮想センサーのうちの一つ (Level, Usage, Level Usage)
ネットワーク通信機能(Wi-Fi常時接続がベスト)
消耗品の状態をデバイスクラウドに対して、少なくとも1日に一回あるいはデバイス使用時のどちらから短い周期で送信する機能
デバイスクラウド
デバイスとの双方向通信
認証サーバー
Auth 2.0準拠
認可コードグラントのサポート
ユーザー認可とリフレッシュトークンをセキュアに保持できる
アカウントリンクのために認証ポータルをWebViewで行う機能
デバイス登録
Alexaクラウドの結合
スキルへのリクエストに対する同期レスポンス
Alexaクラウドへの在庫情報の非同期PSU
Alexaスマートホームスキル
Discove.Directiveに対する Alexa.InventoryLevelSensor, Alexa.InventoryUsageSensor または Alexa.InventoryLevelUsageSensor インターフェイスの同期レスポンス
接続されたデバイスがアップデートされた場合、非同期にAddOrUpdateReportイベントを送信
ChangeReport イベント (Levelセンサー・毎日) または InventoryConsumed イベント (Usage and LevelUsage センサー・使用時) の非同期送信
Alexaスキル認証の取得 (リンク)
対応するAWSサービス一覧
下記の表は、AWSのサービスを用いてDARTを実装する際のサービス対応例です。あくまでも例であり、完全なものではありませんし、他のサービスを利用いただくこともできます。
要件 | AWSサービス | |
---|---|---|
デバイス | OS | FreeRTOS |
デバイスクラウド | デバイスとの通信 | AWS IoT Core |
アカウント認証・認可 | AWS Cognito | |
デバイスのリスト管理 | AWS IoT Device Management | |
Alexaクラウド通信 | AWS Lambda | |
トークンの保持 | AWS DynamoDB | |
認証ポータル | AWS Amplify | |
エンドユーザーへのWebポータル | AWS Amplify | |
Alexaスマートホームスキル | スキルホスト | AWS Lambda |
コンパニオンアプリ | アプリフレームワーク | AWS Amplify |
Last updated: Aug 23, 2021