事件非同步資料,是由 Google Cloud Pub/Sub 所管理,每個 Project會有一個主題。事件可為所有裝置和結構提供更新,只要使用者未撤銷存取權杖,且事件訊息未過期,系統就會確保收到事件。
事件是 SDM API 的選用功能。您只要使用 Google Cloud 專案,就能輕鬆實作及驗證這些檔案。
啟用活動功能
您可以在 Device Access 控制台啟用事件。如果尚未在控制台中選取專案,請立即選取。
如果您已啟用事件 (例如在建立專案時),專案資訊部分的 Cloud 發布/訂閱主題欄位應已包含值,也就是主題 ID,格式如下:
projects/sdm-prod/topics/enterprise-project-id
如果尚未啟用事件:
- 按一下 Pub/Sub 主題的 圖示,然後選取「編輯」。
- 勾選「啟用事件」,然後按一下「儲存」。
- 系統會根據上述格式為您產生主題 ID。
複製主題 ID,您需要這個 ID 建立主題訂閱項目,才能擷取事件訊息。
建立提取訂閱項目
提取式訂閱是指訂閱者向 Pub/Sub 伺服器發出要求,要求處理排入佇列的事件訊息。透過這個步驟,您可以快速輕鬆地檢查系統是否正在為授權裝置產生事件。
開啟 Google Cloud 專案的 Cloud Shell:
在 Cloud Shell 提示中執行下列指令,使用您偏好的 subscription-id 和專屬主題 ID,建立主題的拉取訂閱項目:
gcloud pubsub subscriptions create subscription-id --topic=projects/sdm-prod/topics/enterprise-project-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 Thermostat 附近的環境溫度有所變動,系統會自動傳送Temperature 特徵的事件,並附上新的 ambientTemperatureCelsius
值。
如要手動產生,請採取下列任一做法:
- 變更裝置狀態,例如變更 Nest Thermostat 的模式。
- 觸發 Google Nest Cam Indoor 的事件,例如動作、人物或聲音。
- 使用 SDM API 執行裝置指令。
查看訊息
您可以在 Google Cloud 專案的「Pub/Sub 訂閱」區段中查看事件訊息:
- 按一下先前建立的訂閱 ID。
- 在「Subscription details」(訂閱詳細資料) 畫面上,您應該會看到「Unacked message count」(未確認訊息數量) 圖表的活動。這表示訂閱項目已送出事件訊息。如果沒有看到任何活動,請稍待片刻,或是產生更多事件。
- 按一下 VIEW MESSAGES (查看訊息) 以開啟「Messages」面板。
- 按一下「PULL」PULL即可查看訊息。這些事件應對應至您用來產生事件的動作。
您也可以使用基本 pull
指令,在 Cloud Shell 中查看訊息:
gcloud pubsub subscriptions pull subscription-id
如要進一步瞭解訂閱類型,以及 SDM API 傳送的事件類型和使用方式,請參閱「事件」。
管理訊息
您應定期確認及清除訊息,以便維持訂閱項目的清潔狀態,並避免將重複的訊息傳送給其他訂閱者。您可以在 Pub/Sub 訂閱項目部分手動清除所有訂閱訊息:
- 按一下訂閱 ID。
- 您可以透過以下幾種方式確認並清除資料:
- 按一下「查看訊息」 ,即可開啟「訊息」面板。勾選「Enable ack messages」核取方塊,然後按一下「PULL」,即可查看並確認所有訊息。
- 按一下「清除訊息」 ,即可確認所有現有訊息並清除,而無須查看訊息內容。按一下「清除」確認。
您也可以在 Cloud Shell 中使用 --auto-ack
標記搭配基本 pull
指令,清除訊息:
gcloud pubsub subscriptions pull subscription-id --auto-ack
管理訂閱項目
如「使用訂閱屬性」一節所述,您可以透過各種方式設定訂閱項目。
雖然管理訂閱項目和訊息的方式由您決定,但針對正式版應用程式,我們建議您使用服務帳戶進行驗證,而不要使用本快速入門指南內目前為止的使用者帳戶。服務帳戶由應用程式或虛擬機器使用,而非由人使用,且有其專屬的帳戶金鑰。
如要進一步瞭解 Device Access的服務帳戶驗證,請參閱事件。