イベントは非同期で、 Projectごとに 1 つのトピックで Google Cloud Pub/Sub によって管理されます。イベントはすべてのデバイスと構造の更新を提供します。アクセス トークンがユーザーによって取り消されず、イベント メッセージが期限切れになっていない限り、イベントの受信は保証されます。
イベントは SDM API のオプション機能です。Google Cloud プロジェクトを使用して簡単に実装し、検証できます。
イベントを有効にする
イベントは Device Access コンソールで有効にできます。まだ選択していない場合は、コンソールでプロジェクトを選択します。
イベントをすでに有効にしている場合(プロジェクトの作成時など)、[イベントの Pub/Sub トピックを有効にする] セクションの Pub/Sub トピック フィールドには、古い形式のトピック ID と呼ばれる値がすでに設定されているはずです。
projects/sdm-prod/topics/enterprise-project-id
Google ホスト型のトピックから移行するには、 Device Access コンソールで Google ホスト型の Pub/Sub トピックを無効にし、ご自身の Google Cloud プロジェクトで作成したセルフホスト型の Pub/Sub トピックを使用してイベントを再度有効にします。Pub/Sub トピック構成を移行しても、既存のユーザー アクセス トークンや OAuth 権限は無効になりません。
セルフホスト型の Pub/Sub トピックは、独自の Google Cloud プロジェクトで作成または変更できます。また、標準の Google Cloud Pub/Sub の料金が適用されます(月あたり 10 GB の無料枠が含まれます)。
Pub/Sub トピックを作成します。
gcloud pubsub topics create {topic} --message-retention-duration=0sプロジェクトのトピック ID のイベントデータにアクセスして公開するために必要な SDM API 権限を付与します。
gcloud pubsub topics add-iam-policy-binding projects/{project}/topics/{topic} \
--member="group:sdm-publisher@googlegroups.com" \
--role="roles/pubsub.publisher"新しく作成したトピック ID の形式は次のようになります。
projects/gcp-project-name/subscriptions/topic-id
トピック ID をメモしておいてください。イベントの有効化を完了するには、この情報が必要です。詳細については、トピックを作成するをご覧ください。
イベントを有効にする(または Google がホストするトピックから移行する)には:
- 新しいプロジェクトを作成する場合は、[イベントを有効にする] を選択して [プロジェクトを作成] をクリックします。既存のプロジェクトを Google ホストのトピックから移行する場合は、まずプロジェクトの情報画面で既存の Pub/Sub トピックを無効にします。
- [Pub/Sub トピック] の アイコンをクリックし、[Pub/Sub トピックでイベントを有効にする](または [現在のトピックを編集])を選択します。
- 先ほど作成したセルフホスト Pub/Sub トピック ID を入力します。
トピック ID をコピーします。イベント メッセージを取得できるように、トピックのサブスクリプションを作成するために必要になります。
pull サブスクリプションを作成する
pull サブスクリプションでは、サブスクライバーが Pub/Sub サーバーに対してキューに登録されたイベント メッセージのリクエストを開始します。これは、承認済みデバイスでイベントが生成されていることをすばやく簡単に確認する方法です。
Google Cloud プロジェクトの Cloud Shell を開きます。
Cloud Shell のプロンプトで、次のコマンドを実行して、任意の subscription-id と一意のトピック ID を使用して、トピックへの pull サブスクリプションを作成します。
gcloud pubsub subscriptions create subscription-id --topic=projects/gcp-project-name/subscriptions/topic-id
Created subscription [projects/gcp-project-name/subscriptions/subscription-id].イベントを開始する
Pub/Sub サブスクリプションの作成後に初めてイベントを開始するには、デバイスを一覧表示する呼び出しを 1 回限りのトリガーとして行います。
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'この API 呼び出しの後、すべての構造とデバイスのイベントが公開されます。
イベントを生成する
イベントはすべての特性フィールドの変更に対して生成されます。一部は自動で、一部は手動です。
たとえば、Google Nest Thermostat の近くの室温が変化すると、温度 特性のイベントが新しい ambientTemperatureCelsius 値とともに自動的に送信されます。
手動で生成するには、次のいずれかを行います。
- Google Nest サーモスタットのモードを変更するなど、デバイスの状態を物理的に変更します。
- Google Nest Cam Indoor でモーション、人物、サウンドなどのアクティビティをトリガーします。
- SDM API を使用してデバイス コマンドを実行します。
メッセージを表示する
イベント メッセージは、Google Cloud プロジェクトの [Pub/Sub サブスクリプション] セクションで確認できます。
Google Cloud Pub/Sub の [サブスクリプション] に移動
- 先ほど作成したサブスクリプション ID をクリックします。
- [サブスクリプションの詳細] 画面に、[未確認メッセージ数] グラフのアクティビティが表示されます。これは、サブスクリプションのイベント メッセージが届いたことを示します。アクティビティが表示されない場合は、しばらく待つか、イベントをいくつか生成します。
- [ メッセージを表示] をクリックして、[メッセージ] パネルを表示します。
- [PULL] をクリックしてメッセージを表示します。これらは、イベントの生成に使用したアクションに対応している必要があります。
メッセージは、Cloud Shell で基本的な pull コマンドを使用して表示することもできます。
gcloud pubsub subscriptions pull subscription-idサブスクリプション タイプ、SDM API によって送信されるイベントのタイプ、イベントの使用方法について詳しくは、イベントをご覧ください。
メッセージを管理する
サブスクリプションをクリーンに保ち、他のサブスクライバーへのメッセージの重複配信を回避するには、メッセージを定期的に確認して削除する必要があります。すべてのサブスクリプション メッセージは、[Pub/Sub サブスクリプション] セクションで手動で削除できます。
Google Cloud Pub/Sub の [サブスクリプション] に移動
- [Subscription ID] をクリックします。
- 確認して削除する方法はいくつかあります。
- [ メッセージを表示] をクリックして、[メッセージ] パネルを表示します。[確認応答メッセージを有効にする] チェックボックスをオンにして [PULL] をクリックすると、すべてのメッセージを表示して確認応答できます。
- [ メッセージをパージ] をクリックすると、既存のすべてのメッセージが確認なしでパージされます。[PURGE] をクリックして確定します。
Cloud Shell で、基本的な pull コマンドで --auto-ack フラグを使用してメッセージを削除することもできます。
gcloud pubsub subscriptions pull subscription-id --auto-ackサブスクリプションを管理
サブスクリプションは、サブスクリプション プロパティの使用で説明されているように、さまざまな方法で構成できます。
サブスクリプションとメッセージの管理方法はユーザーが自由に選択できますが、本番環境のアプリケーションでは、このクイック スタートガイドでこれまで使用してきたユーザー アカウントではなく、認証にサービス アカウントを使用することをおすすめします。サービス アカウントは、ユーザーではなくアプリケーションや仮想マシンで使用され、固有のアカウント キーがあります。
Device Accessを使用したサービス アカウント認証の詳細については、イベントをご覧ください。