イベントに登録する

イベントは非同期で、Google Cloud Pub/Sub で管理されます。 Projectごとに 1 つのトピックがあります。イベントはすべてのデバイスと構造で生じた更新の状態を提供します。ユーザーがアクセス トークンを取り消さず、イベント メッセージの有効期限が切れていない限り、イベントの受信は保証されます。

イベントは SDM API のオプション機能です。Google Cloud プロジェクトを使用して簡単に実装し、検証できます。

イベントを有効にする

イベントは Device Access コンソールで有効にできます。まだ選択していない場合は、コンソールでプロジェクトを選択します。

Device Access コンソールに移動

イベントをすでに有効にしている場合(プロジェクトの作成時など)、[イベントの Pub/Sub トピックを有効にする] セクションの [Pub/Sub トピック] フィールドには、以前の形式のトピック ID と呼ばれる値がすでに設定されているはずです。

projects/sdm-prod/topics/enterprise-project-id

このトピック形式は Google でホストされ、Google でホストされている Pub/Sub トピックを無効にしない限り、プロジェクトで保持されます。後で再度有効にすると、セルフホストの Pub/Sub トピックに切り替わります。

セルフホスト型の Pub/Sub トピックは、デベロッパー自身の Google Cloud プロジェクトで作成または変更できます。デベロッパーは、Pub/Sub の使用に関連するすべての費用についても責任を負います。詳細については、Pub/Sub の料金をご覧ください。

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 をメモしておいてください。イベントの有効化を完了するには、この ID が必要になります。詳細については、トピックを作成するをご覧ください。

イベントを有効にするには:

  1. [Enable events] をオンにして、[Create Project] をクリックします。
  2. [Pub/Sub トピック] の アイコンをクリックし、[Pub/Sub トピックでイベントを有効にする] を選択します。
  3. 提供されたか、以前に作成された Pub/Sub トピック ID を入力します。

トピック ID をコピーします。イベント メッセージを取得できるように、トピックのサブスクリプションを作成する必要があります。

pull サブスクリプションを作成する

pull サブスクリプションでは、サブスクライバーが Pub/Sub サーバーに対してキューに登録されたイベント メッセージのリクエストを開始します。これは、承認済みデバイスでイベントが生成されていることをすばやく簡単に確認する方法です。

Google Cloud プロジェクトの Cloud Shell を開きます。

Google 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 サーモスタット付近の室温が変化すると、Temperature トレイトのイベントが新しい ambientTemperatureCelsius 値とともに自動的に送信されます。

手動で生成するには、次のいずれかを行います。

  1. Google Nest サーモスタットのモードを変更するなど、デバイスの状態を物理的に変更します。
  2. Google Nest Cam Indoor でモーション、人物、音などのアクティビティをトリガーします。
  3. SDM API を使用してデバイス コマンドを実行します。

メッセージを表示する

イベント メッセージは、Google Cloud プロジェクトの Pub/Sub サブスクリプション セクションで確認できます。

Google Cloud Pub/Sub の [サブスクリプション] に移動

  1. 先ほど作成したサブスクリプション ID をクリックします。
  2. [サブスクリプションの詳細] 画面に、[未確認メッセージ数] グラフのアクティビティが表示されます。これは、サブスクリプションのイベント メッセージが届いたことを示します。アクティビティが表示されない場合は、しばらく待つか、イベントをいくつか生成します。
  3. [ メッセージを表示] をクリックして、[メッセージ] パネルを表示します。
  4. [PULL] をクリックしてメッセージを表示します。これらは、イベントの生成に使用したアクションに対応している必要があります。

メッセージは、Cloud Shell で基本的な pull コマンドを使用して表示することもできます。

gcloud pubsub subscriptions pull subscription-id

サブスクリプション タイプ、SDM API から送信されるイベントのタイプ、およびそれらの使用方法については、イベントをご覧ください。

メッセージを管理する

サブスクリプションをクリーンに保ち、他のサブスクライバーへのメッセージの重複配信を回避するため、メッセージは定期的に確認応答と削除を行う必要があります。すべてのサブスクリプション メッセージは、[Pub/Sub サブスクリプション] セクションで手動で削除できます。

Google Cloud Pub/Sub の [サブスクリプション] に移動

  1. [Subscription ID] をクリックします。
  2. 確認して削除するには、いくつかの方法があります。
    1. [ メッセージを表示] をクリックして、[メッセージ] パネルを表示します。[確認応答メッセージを有効にする] チェックボックスをオンにして [PULL] をクリックすると、すべてのメッセージを表示して確認応答できます。
    2. [ メッセージをパージ] をクリックすると、すべての既存のメッセージが肯定応答され、表示されずにパージされます。[PURGE] をクリックして確定します。

Cloud Shell で、基本的な pull コマンドで --auto-ack フラグを使用してメッセージを削除することもできます。

gcloud pubsub subscriptions pull subscription-id --auto-ack

サブスクリプションを管理

サブスクリプションは、サブスクリプション プロパティの使用で説明されているように、さまざまな方法で構成できます。

サブスクリプションとメッセージの管理方法はユーザーが自由に選択できますが、本番環境のアプリケーションでは、このクイック スタートガイドでこれまで使用してきたユーザー アカウントではなく、認証にサービス アカウントを使用することをおすすめします。サービス アカウントは、ユーザーではなくアプリケーションや仮想マシンで使用され、独自の固有のアカウント キーがあります。

Device Accessを使用したサービス アカウント認証の詳細については、イベントをご覧ください。