建立指令碼自動化

1. 簡介

課程內容

  • 如何規劃及編寫自動化動作指令碼。
  • 如何測試自動化動作指令碼。

軟硬體需求

  • 已安裝 Google Home 應用程式的 Android 或 iOS 手機。
  • 具備「支援 Google Home」認證的智慧型燈具或其他裝置,可自行開啟或關閉。

2. 設定裝置

如果尚未設定裝置,請繼續在家中進行設定。

確認該裝置已顯示在 Google Home 應用程式中,您可以透過 Google Home 應用程式開啟或關閉該裝置。

3. 規劃自動化動作指令碼

我們會先思考您希望自動化指令碼執行哪些動作。包括:

  • 要讓系統自動執行哪些裝置。
  • 哪個啟動條件 (或事件) 會觸發自動化動作執行指令碼。
  • 控管自動化動作在觸發後是否要執行其他條件 (如有) 的其他條件。
  • 要執行的動作。

在本程式碼研究室中,我們計畫讓自動化動作指令碼執行以下兩項操作:

  1. 在特定時間開啟燈具 (或其他智慧型裝置)。
  2. 在特定時間關閉裝置。

現在我們已清楚瞭解自動化動作指令碼的作用,要開啟指令碼編輯器,編寫自動化動作的指令碼。

4. 編寫自動化動作指令碼

使用 YAML 資料序列化語言,以宣告式方式編寫自動化動作的指令碼。

自動化動作指令碼由兩個主要部分組成:

  1. 中繼資料 - 自動化動作指令碼的名稱和功能說明。
  2. 自動化規則:定義自動化作業的啟動邏輯和行為。

中繼資料

使用者可透過自動化動作的中繼資料瞭解自動化動作的名稱和用途。中繼資料是在 metadata 區塊中指定,如下所示:

metadata:
  name: Scheduled light
  description: Turn the light on and off at specific times

自動化作業規則

自動化規則是指實際進行作業的位置。其中包含「啟動條件」、「條件」和「動作」三個部分,並依順序評估:

1 啟動條件

2 條件

3 項動作

啟動條件是啟動自動化動作的主因,至少要有一個啟動條件評估為 true,才能評估後續條件。

這些限制為選用項目,包含一或多個其他限制,在啟動條件啟用後需評估。如果條件解析為 true,動作就會執行。如果解析為 false,動作就不會執行。

加入多個限制條件時,請以 andor 關鍵字分隔,構成單一邏輯運算式。這個運算式必須解析為 true,才能執行自動化動作。

條件與狀態變更通知不相同:

  • 條件表示在啟動條件「發射」時,條件必須設為 true以便執行動作
  • 狀態變更通知是一種事件,例如使用者啟用其他裝置。

動作是指在符合啟動條件與任何限制條件時執行的作業。

我們的自動化動作的 automations 區塊包含兩項規則:

automations:
  - starters:
      - type: time.schedule
        at: 1:00 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: true
  - starters:
      - type: time.schedule
        at: 1:05 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: false

注意事項:

  1. 有兩個 automations 規則。第一項會開燈,第二則關燈。
  2. 每項規則只有一個動作。
  3. on: true 表示開燈。同樣地,on: false 也表示關燈
  4. 每項規則都有一個time.schedule啟動條件,向自動化動作指出啟動自動化動作的時間。
  5. 這個自動化動作沒有任何條件。

5. 全指令碼式自動化

現在綜合以上各部分,以下是完整的自動化指令碼範例:

metadata:
  name: Scheduled light
  description: Turn the light on and off at specific times
automations:
  - starters:
      - type: time.schedule
        at: 1:00 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: true
  - starters:
      - type: time.schedule
        at: 1:05 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: false
  1. 複製上方的自動化動作。
  2. 前往 Google Home 網頁版
  3. 選取「自動化動作」分頁標籤,以三顆星的圖示代表:
    「自動化動作」分頁
  4. 按一下 [+ 新增]
  5. 在指令碼編輯器中刪除自動化動作範本。
  6. 貼上自動化動作。
  7. Desk light - Office 替換為裝置的名稱和位置。
  8. 按一下「驗證」。如果是使用指令碼編寫且含有錯誤的自動化指令碼,指令碼編輯器會加上底線。請解決所有發生的錯誤,並持續驗證並修正問題,直到沒有其他錯誤為止。舉例來說,您的裝置名稱可能有所不同。在這種情況下,您可以使用自動完成功能挑選有效的裝置名稱。
  9. 按一下 [儲存]
  10. 確認指令碼文字下方的「啟用」切換鈕位於「開啟」位置:具備通過完整驗證和啟用指令碼的自動化指令碼的指令碼編輯器

6. 測試自動化動作

  1. 請確認裝置已接上電源並顯示在 Google Home 應用程式中。
  2. 如果裝置目前為開啟狀態,請先關機。
  3. Google Home 網頁版的「自動化動作」頁面中,按一下「執行」按鈕。
    指令碼執行按鈕
  4. 這時裝置應該會出現。

現在,讓我們測試自動化功能。

  1. 關閉裝置。
  2. 編輯自動化動作,並變更「開啟裝置」狀態從第 7 行開始到未來 5 分鐘
  3. 變更「關閉裝置」狀態時間排在第 14 行 但在「準時」之後
  4. 按一下「驗證」。解決所有可能發生的錯誤。
  5. 按一下 [儲存]
  6. 確認「啟用」切換按鈕已設為「開啟」位置。
  7. 等待兩個啟動條件通過。裝置應會亮起,並在您指定的時間響起。

7. 恭喜!

您已成功使用指令碼建立自動化動作,太棒了!

在本程式碼研究室中,您瞭解如何:

  • 如何設計及編寫自動化作業。
  • 如何測試自動化作業。

後續步驟

在本程式碼研究室中,我們建立了非常簡單的自動化作業。自動化除了安排切換電源開關外,現在你已瞭解建立自動化動作的基本知識,現在可以探索 Google Home 生態系統中提供的各種啟動條件、限制條件和動作。

請嘗試以下練習:

  • 請在自動化動作中加入更多time.schedule啟動條件。
  • 修改自動化動作,即可在同一個時間表開啟或關閉其他裝置。
  • 如果不移除 time.schedule 啟動條件,請修改自動化動作,只在其他裝置開機時才開啟裝置。請參閱使用 condition 子句的指令碼範例
  • 將自動化動作修改為只在有人在家時才開啟裝置。

延伸閱讀

如要進一步瞭解 Google Home 自動化動作,請參閱自動化動作參考說明文件: