找回密碼
 立即註冊
    查看: 149|回覆: 0

    script 跟 automation 差在哪:什麼時候該把動作拆出來,以及那個會咬人的差別

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 08:37:59 | 顯示全部樓層 |閱讀模式
    新手常問:一樣都是「做一連串事情」,為什麼要分成兩種?一句話:automation 管「什麼時候做」,script 管「做什麼」。但真正會咬人的不是這個定義,是呼叫 script 的兩種寫法 —— 一種會等它跑完,一種不會,而且寫錯的症狀是「順序莫名其妙」,不是錯誤訊息。

    新手常問:一樣都是「做一連串事情」,為什麼要分成兩種?一句話:automation 管「什麼時候做」,script 管「做什麼」。但真正會咬

    這一篇會實際做一個 script,從零建到能被自動化、按鈕、儀表板呼叫,中間用一個小實驗把那個「會咬人的差別」親手做出來給你看。

    結構上的差別


    • automation = 觸發器 + 條件 + 動作
    • script = 只有動作


    script 不會自己跑,一定要有東西叫它:自動化、按鈕、語音助理、儀表板、外部 API。

    步驟 1:找到 script 該寫在哪裡

    兩條路,選一條就好:

    路 A:用介面建(推薦新手)

    設定 → 自動化與場景 → 腳本分頁 → 右下角新增腳本。

    你會看到一個跟自動化編輯器很像的畫面,但沒有「當...」那一區(沒有觸發器),只有動作。這就是 script 和 automation 最直觀的差別。

    用介面建的腳本會被寫進設定資料夾的 scripts.yaml,格式跟你手寫的一樣。

    路 B:直接編輯 scripts.yaml

    用 File editor 或 Studio Code Server 打開設定資料夾底下的 scripts.yaml。

    找不到這個檔案 → 這個系統還沒有任何腳本,自己建一個空的即可。另外確認 configuration.yaml 裡有這一行:
    1. script: !include scripts.yaml
    複製代碼

    沒有的話自己加上去,然後完整重新啟動一次 Home Assistant。

    ⚠ 這裡有個跟自動化不一樣的地方:automations.yaml 是清單(每條以 - alias: 開頭),scripts.yaml 是字典(每個腳本以「腳本的鍵名:」開頭,沒有減號)。從自動化複製過來直接貼會壞掉。

    步驟 2:寫第一個 script

    用路 B 的話,把下面這整段貼進 scripts.yaml:
    1. sleep_mode:
    2.   alias: 睡前模式
    3.   icon: mdi:sleep
    4.   description: 關燈、鎖門、冷氣轉睡眠,最後檢查後門
    5.   mode: single
    6.   sequence:
    7.     - action: light.turn_off
    8.       target:
    9.         entity_id: all
    10.     - action: lock.lock
    11.       target:
    12.         entity_id: lock.前門
    13.     - action: climate.set_preset_mode
    14.       target:
    15.         entity_id: climate.主臥
    16.       data:
    17.         preset_mode: sleep
    18.     - action: input_boolean.turn_on
    19.       target:
    20.         entity_id: input_boolean.夜間模式
    21.     - if:
    22.         - condition: state
    23.           entity_id: binary_sensor.後門
    24.           state: "on"
    25.       then:
    26.         - action: notify.persistent_notification
    27.           data:
    28.             title: "睡前模式"
    29.             message: "後門還開著,我沒有幫你鎖"
    複製代碼

    最上面那個 sleep_mode 是「鍵名」,它會變成實體 ID 的後半段:script.sleep_mode。用英文小寫加底線,中文會被轉成拼音,以後引用時很難打。

    alias 才是顯示的名字,那個可以用中文。

    ⚠ 注意最後那段用的是 if / then,不是 condition

    原本很多教學會在 sequence 中間直接放一個 - condition:。那個寫法的意思是「條件不成立就整個腳本停在這裡」——後面的動作全部不執行。

    以下還有約 80% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:37 , Processed in 0.133031 second(s), 25 queries .

    快速回覆 返回頂部 返回列表