建立指令碼自動化

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 行的「device on」時間改為 5 分鐘後的未來時間。
  3. 將第 14 行的「裝置關閉」時間變更為「開啟時間」後不久的時間。
  4. 按一下「驗證」。解決可能出現的錯誤。
  5. 按一下 [儲存]
  6. 確認「啟用」切換鈕已設為「開啟」
  7. 等待兩個開始時間經過。裝置應會在指定時間開啟,然後關閉。

7. 恭喜!

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

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

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

後續步驟

在本程式碼研究室中,我們建立了一個非常簡單的自動化動作。自動化動作的功能不只排定電源開關的切換時間,瞭解如何建立自動化動作的基本概念後,即可探索 Google Home 生態系統中可用的各種啟動條件、限制條件和動作。

請嘗試下列練習:

  • 在自動化動作中新增更多「time.schedule」啟動條件。
  • 修改自動化動作,讓其他裝置在相同時間開啟和關閉。
  • 請勿移除time.schedule啟動條件,修改自動化動作,只在其他裝置開機時開啟裝置。請參閱使用 condition 子句的範例指令碼
  • 修改自動化動作,只在有人在家時開啟裝置。

延伸閱讀

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