ローカル フルフィルメント

Local Home SDK は、スマートホーム インテントをルーティングするためのローカル フルフィルメント パスを追加し、スマートホームと Google アシスタントの統合を強化するためのものです。

Local Home SDK を使用すると、スマートホーム ビジネス ロジックを含むローカル フルフィルメント アプリを TypeScript または JavaScript で作成できます。作成したアプリは、Google Home デバイスまたは Google Nest デバイスに読み込んで実行します。アプリは、ローカルエリア ネットワーク(LAN)上の Wi-Fi 経由で既存のスマート デバイスと直接通信して、既存のプロトコル経由でユーザー コマンドを実行します。

この SDK の統合により、レイテンシの短縮や信頼性の向上など、スマートホーム アクションのパフォーマンスが向上します。ローカル フルフィルメント: すべてのデバイスタイプとデバイス トレイトでサポートされています。 セカンダリ ユーザー 確認します

始める サンプルを試す

仕組みを理解する

ローカルホーム プラットフォームは、クラウド フルフィルメントから SYNC レスポンスを取得すると、mDNS、UDP ブロードキャスト、または UPnP を使用してユーザーのローカルエリア ネットワークをスキャンし、アシスタントに接続されたスマート デバイスを検出します。

プラットフォームは IDENTIFY インテントを送信し、IDENTIFY レスポンス内のデバイス ID を以前の SYNC レスポンスによって返されたものと比較して、検出されたデバイスがローカルで制御可能かどうかを判断します。検出されたデバイスがハブまたはブリッジの場合、プラットフォームは REACHABLE_DEVICES インテントを送信して、そのハブをローカルに通信するためのプロキシ デバイスとして扱います。

受信したレスポンスでローカル デバイスを確認すると、プラットフォームは、ユーザーの Google Home デバイスまたは Google Nest デバイスへのローカル フルフィルメント パスを確立してから、ローカル フルフィルメント用のユーザー コマンドをルーティングします。

ローカル フルフィルメント パスを含むスマートホーム アクションをユーザーがトリガーすると、 アシスタントが EXECUTE を送信します。 インテントまたは QUERY インテントを クラウド フルフィルメントではなく、Google Home または Google Nest デバイスを使用する。デバイスはローカル フルフィルメント アプリを実行してインテントを処理します。

この図は、ローカル フルフィルメントの実行フローを示しています。実行パスが Google アシスタントを搭載したスマートフォンからユーザーのインテントを取得して、ユーザー インテントが Google Cloud によって処理され、それが Google Home デバイスでローカルで実行されて、コマンドがデバイスハブにまたは直接デバイスに発行されます。デベロッパー クラウドは代替クラウドとして使用できます。
図 1: スマートホームのローカル フルフィルメント パスを追加する アクション。

ローカルホーム プラットフォームは、どの Google Home デバイスまたは Google Nest デバイスを選択してコマンドをトリガーするかにおいては非決定的です。EXECUTE インテントと QUERY インテントは、 同じホームグラフで定義された Google Home デバイスまたは Google Nest デバイス ストラクチャを対象デバイスとして設定します。

ローカル フルフィルメント アプリ

ローカル フルフィルメント アプリには、ローカルホーム プラットフォームから送信されたインテントを処理し、ローカルエリア ネットワーク経由でスマート デバイスにアクセスするためのビジネス ロジックが組み込まれています。ローカル フルフィルメントを統合するためにハードウェアを修正する必要はありません。アプリは、HTTP、TCP、UDP などのアプリケーション レイヤ プロトコルを介してスマート デバイスに制御コマンドを送信することによって、スマートホーム アクション リクエストを実行します。ローカル フルフィルメント パスで障害が発生した場合は、クラウド フルフィルメントが代替実行パスとして使用されます。

アプリの構築をサポートするために、Local Home SDK には次の 2 つの主要なクラスが用意されています。

  • DeviceManager: TCP、UDP ソケット、または HTTP リクエストを使用してスマート デバイスと通信するためのメソッドを提供します。
  • App: Google が送信するインテントのハンドラをアタッチするメソッドを提供する ローカルで制御可能なデバイス(IDENTIFYREACHABLE_DEVICES)。このクラスはユーザー コマンド(EXECUTE)も実行します。 現在のデバイスの状態(QUERY)に関するユーザーのクエリに応答する。

開発中は、独自のホスティング サーバーまたはローカル開発マシンにアプリを読み込むことによって、アプリのビルドとテストを行うことができます。本番環境では、Google がユーザーの Google Home デバイスまたは Google Nest デバイス上の安全な JavaScript サンドボックス環境でアプリをホストします。

Report State API を 現時点ではローカルフルフィルメントはサポートされていませんGoogle は、クラウド フルフィルメントを利用してこれらのリクエストを処理します。

アプリケーションのライフサイクル

ローカル フルフィルメント アプリは、ローカルホーム プラットフォームが検出を プロジェクト スキャン構成に一致するか、保留中になっている新しいローカル デバイス 配信するインテントです。

Google Home デバイスや Google Nest デバイスはメモリ容量が限られているため、ローカル フルフィルメント アプリはシステムのメモリ使用量に応じていつでも強制終了される可能性があります。これにより、 アプリが大量のメモリを消費し始めた場合や 別のアプリ用のスペースを確保します ローカルホーム プラットフォームは、新しいインテントがある場合にのみ、アプリを再起動します。 アプリを実行するのに十分なメモリリソースを提供します。

ユーザーがホーム アカウントのリンクを解除した場合や、ユーザーの agentUserId に関連付けられたローカル フルフィルメントをサポートするデバイスがなくなった場合は、アイドル タイムアウト後にアプリがアンロードされます。

サポートされているデバイス

ローカルホーム プラットフォームは、サポートされているローカル フルフィルメント アプリを実行します。 Google Home デバイスまたは Google Nest デバイス。次の表に、サポートされているデバイス、および 使用した時間を表します。ランタイム要件について詳しくは、以下をご覧ください。 実行環境

デバイス タイプ 環境
Google Home スピーカー Chrome
Google Home Mini スピーカー Chrome
Google Home Max スピーカー Chrome
Nest Mini スピーカー Chrome
Nest Hub ディスプレイ Chrome
Google Nest Hub Max ディスプレイ Chrome
Nest Wifi ルーター Node.js
拡張ポイント Chrome

実行環境

ローカル フルフィルメント アプリの実行環境は、 device:ローカルホーム プラットフォームは以下をサポートしています ランタイム環境を提供します。

ソースコードの構造

次のように、依存関係を 1 つの JavaScript ファイルにまとめることをおすすめします。 Bundler の構成 ソースコードをパッケージ化してパッケージ化する方法を すぐに呼び出される関数式 (IIFE)をご覧ください。

実装パス

Local Home SDK をスマートホーム統合に使用するには、次のタスクが必要となります。

1 スキャンを設定する 構成 アシスタントがローカルで制御可能なデバイスを検出するために必要なパラメータで Actions Console を設定します。
2 クラウド フルフィルメントでの SYNC レスポンス クラウド フルフィルメントで、プラットフォームがローカル フルフィルメント パスの確立に使用する otherDeviceIds フィールドをサポートするよう SYNC リクエスト ハンドラを変更します。そのフィールドで、ローカルで制御可能なデバイスの ID を指定します。
3 ローカル フルフィルメント アプリ Local Home SDK を使用して、IDENTIFY インテント、 EXECUTE インテント、 QUERY インテントを処理するための JavaScript アプリを作成します。ハブまたはブリッジ プロキシ デバイスの場合は、REACHABLE_DEVICES インテントも処理する必要があります。
4 アプリをテストしてデバッグする 以下を使用して統合をテスト(または自己診断)します。 Google Home テストスイート

始める前に