事件為非同步,由 Google Cloud Pub/Sub 管理,每個 Project都有一個主題。只要使用者未撤銷存取權杖,且事件訊息未過期,事件就會為所有裝置和結構體提供更新,並確保收到事件。
事件是 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 權限失效。
您可以在自己的 Google Cloud 雲端專案中建立或變更自行代管的 Pub/Sub 主題,並須遵守標準的 Google Cloud Pub/Sub 價格 (包括每月 10 GB 的免費方案)。
建立 Pub/Sub 主題:
gcloud pubsub topics create {topic} --message-retention-duration=0s授予必要的 SDM API 權限,以便存取及發布專案主題 ID 的事件資料:
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 才能完成啟用事件。詳情請參閱「建立主題」。
如要啟用活動 (或從由 Google 代管的主題遷移):
- 如要建立新專案,請選取「啟用事件」,然後按一下「建立專案」。如要從 Google 代管主題遷移現有專案,請先在專案的資訊畫面中停用現有 Pub/Sub 主題。
- 按一下「Pub/Sub 主題」的 圖示,然後選取「啟用具有 Pub/Sub 主題的事件」 (或「編輯現有主題」)。
- 輸入您先前建立的自架式 Pub/Sub 主題 ID。
複製主題 ID,您需要這個 ID 才能建立主題訂閱項目,以便擷取事件訊息。
建立提取訂閱項目
提取訂閱項目是指訂閱端向 Pub/Sub 伺服器發出要求,以取得佇列中的事件訊息。這項功能可讓您快速輕鬆地確認授權裝置是否正在產生事件。
開啟 Google Cloud 雲端專案的 Cloud Shell:
在 Cloud Shell 提示中,執行下列指令,使用您喜歡的任何 subscription-id 和專屬主題 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 訂閱後,如要首次啟動事件,請呼叫一次性觸發條件,列出裝置:
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'呼叫這個 API 後,所有住家和裝置的事件都會發布。
產生事件
系統會針對所有特徵欄位變更產生事件,其中部分是自動產生,部分是手動產生。
舉例來說,如果 Nest 溫度控制器附近的室溫發生變化,系統會自動傳送Temperature 特徵的事件,並附上新的 ambientTemperatureCelsius 值。
如要手動產生,請採取下列任一做法:
- 實際變更裝置狀態,例如變更 Nest Thermostat 的模式。
- 在 Google Nest Cam Indoor 觸發事件,例如動作、人物或聲音。
- 使用 SDM API 執行裝置指令。
查看訊息
您可以在 Google Cloud 專案的 Pub/Sub 訂閱項目專區中查看事件訊息:
- 按一下先前建立的訂閱 ID。
- 在「Subscription detail」(訂閱詳細資料) 畫面上,您應該會看到「Unacked message count」(未確認訊息計數) 圖表的活動。這表示訂閱項目已收到事件訊息。如果沒有看到任何活動,請稍候片刻或再產生幾個事件。
- 按一下「查看訊息」,開啟「訊息」面板。
- 按一下「PULL」(提取) 即可查看訊息。這些動作應與您用來產生事件的動作相符。
您也可以使用基本的 pull 指令,在 Cloud Shell 中查看訊息:
gcloud pubsub subscriptions pull subscription-id如要進一步瞭解訂閱類型、SDM API 傳送的事件類型,以及如何使用這些事件,請參閱「事件」。
管理訊息
應定期確認及清除訊息,以維持訂閱項目乾淨,並避免重複傳送訊息給其他訂閱者。您可以在 Pub/Sub 訂閱項目部分手動清除所有訂閱訊息:
- 按一下訂閱 ID。
- 確認並清除警報的方法如下:
- 按一下「查看訊息」,即可開啟「訊息」面板。勾選「Enable ack messages」(啟用確認訊息) 核取方塊,然後按一下「PULL」(提取),即可查看及確認所有訊息。
- 按一下「 清除訊息」,即可在不查看現有訊息的情況下清除所有訊息。按一下「清除」PURGE確認操作。
您也可以在 Cloud Shell 中使用 --auto-ack 旗標搭配基本 pull 指令,清除訊息:
gcloud pubsub subscriptions pull subscription-id --auto-ack管理訂閱項目
如「使用訂閱屬性」一文所述,訂閱項目可透過多種方式設定。
您可以自行決定如何管理訂閱項目和訊息,但對於正式版應用程式,我們建議您使用服務帳戶進行驗證,而不是像本快速入門指南中使用的使用者帳戶。服務帳戶是由應用程式或虛擬機器使用,而非個人,且有專屬的帳戶金鑰。
如要進一步瞭解如何使用 Device Access進行服務帳戶驗證,請參閱「事件」。