イベントに登録する

イベントは非同期で、Google Cloud Pub/Sub で管理されます。1 つの 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. [イベントを有効にする] をオンにして、[プロジェクトを作成] をクリックします。
  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を使用して、トピックの pull サブスクリプションを作成します。 と一意のトピック ID:

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. サブスクリプション ID をクリックします。
  2. 確認応答と削除を行う方法はいくつかあります。
    1. [ メッセージを表示] をクリックして、 [メッセージ] パネルを表示します。[確認応答メッセージを有効にする] チェックボックスをオンにして [PULL] をクリックすると、すべてのメッセージを表示して確認応答できます。
    2. [ PURGE MESSAGES] をクリックすると、表示せずに確認応答することで、既存のすべてのメッセージが削除されます。[PURGE] をクリックして確定します。

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

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

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

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

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

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