找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 1|回覆: 0

    腳本、場景、自動化:三個很像的東西,差在哪

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    HA 裡有三種「一連串動作」,很多人分不清楚。



    一句話分辨


    • 場景(Scene) —— 「一組狀態」。客廳燈 30%、色溫 2700K、窗簾關上
    • 腳本(Script) —— 「一串動作」。開燈、等三秒、放音樂、關窗簾
    • 自動化(Automation) —— 「什麼時候做」 + 動作


    最大的差別


    • 場景沒有順序,是同時套用的
    • 腳本有順序,可以有延遲和條件
    • 自動化有觸發條件,場景和腳本沒有


    場景(Scene)

    最簡單的建立方式


    • 先把家裡調成你要的樣子(手動調燈、調窗簾)
    • 設定 → 自動化與場景 → 場景新增場景
    • 把要記住的實體加進去 —— 它會自動抓現在的狀態
    • 存檔


    這比寫 YAML 快太多了。

    YAML 的樣子
    1. scene:
    2.   - name: 看電影
    3.     entities:
    4.       light.客廳主燈:
    5.         state: "off"
    6.       light.客廳氛圍:
    7.         state: "on"
    8.         brightness: 40
    9.         color_temp_kelvin: 2200
    10.       cover.客廳窗簾:
    11.         state: closed
    12.       media_player.電視:
    13.         state: "on"
    複製代碼



    場景最好用的功能:scene.create(暫存現在的狀態)

    需求:門鈴響的時候閃燈提醒,然後恢復原狀
    1. script:
    2.   門鈴閃燈:
    3.     sequence:
    4.       # 1. 把現在的狀態存成一個臨時場景
    5.       - action: scene.create
    6.         data:
    7.           scene_id: 閃燈前
    8.           snapshot_entities:
    9.             - light.客廳
    10.             - light.餐廳
    11.       # 2. 閃三次
    12.       - repeat:
    13.           count: 3
    14.           sequence:
    15.             - action: light.turn_on
    16.               target:
    17.                 entity_id: [light.客廳, light.餐廳]
    18.               data:
    19.                 brightness_pct: 100
    20.                 color_name: white
    21.             - delay: "00:00:00.5"
    22.             - action: light.turn_off
    23.               target:
    24.                 entity_id: [light.客廳, light.餐廳]
    25.             - delay: "00:00:00.5"
    26.       # 3. 恢復原狀
    27.       - action: scene.turn_on
    28.         target:
    29.           entity_id: scene.閃燈前
    複製代碼

    scene.create 是我最常用的功能之一 ——
    任何「臨時改變然後恢復」的需求都靠它。

    用途


    • 通知閃燈
    • 警報時開全屋燈,解除後恢復
    • 有人按門鈴時暫停音樂,然後恢復音量


    場景的轉場時間
    1.       - action: scene.turn_on
    2.         target:
    3.           entity_id: scene.看電影
    4.         data:
    5.           transition: 3
    複製代碼

    三秒內慢慢變過去,比瞬間切換舒服很多。



    腳本(Script)

    腳本 = 自動化的 actions 區塊,但可以單獨呼叫。

    什麼時候用腳本


    • 同一串動作,好幾個自動化都要用
    • 要放在儀表板上當按鈕
    • 要用語音助理呼叫
    • 動作太長,自動化變得難讀


    基本寫法
    1. script:
    2.   睡覺模式:
    3.     alias: 睡覺模式
    4.     icon: mdi:sleep
    5.     sequence:
    6.       - action: light.turn_off
    7.         target:
    8.           entity_id: all
    9.       - action: light.turn_on
    10.         target:
    11.           entity_id: light.走道夜燈
    12.         data:
    13.           brightness_pct: 10
    14.       - action: cover.close_cover
    15.         target:
    16.           entity_id: all
    17.       - action: climate.set_temperature
    18.         target:
    19.           entity_id: climate.主臥
    20.         data:
    21.           temperature: 26
    22.       - action: input_boolean.turn_on
    23.         target:
    24.           entity_id: input_boolean.睡眠模式
    複製代碼

    呼叫的方式
    1.       - action: script.睡覺模式
    2.       # 或者
    3.       - action: script.turn_on
    4.         target:
    5.           entity_id: script.睡覺模式
    複製代碼

    兩者的差別(很重要)


    • action: script.睡覺模式 —— 等腳本跑完才繼續
    • script.turn_on —— 發動之後馬上繼續,不等它


    腳本裡有 delay 的時候,這個差別很大。

    腳本的參數(fields)

    讓腳本可以帶參數,就變成「函式」了
    1. script:
    2.   通知並閃燈:
    3.     fields:
    4.       訊息:
    5.         description: 要顯示的訊息
    6.         example: 門開著
    7.         required: true
    8.         selector:
    9.           text:
    10.       顏色:
    11.         description: 閃什麼顏色
    12.         default: red
    13.         selector:
    14.           select:
    15.             options: [red, blue, green, orange]
    16.     sequence:
    17.       - action: notify.mobile_app_phone
    18.         data:
    19.           message: "{{ 訊息 }}"
    20.       - action: light.turn_on
    21.         target:
    22.           entity_id: light.客廳
    23.         data:
    24.           color_name: "{{ 顏色 }}"
    25.           brightness_pct: 100
    複製代碼

    呼叫的時候
    1.       - action: script.通知並閃燈
    2.         data:
    3.           訊息: 有人按門鈴
    4.           顏色: blue
    複製代碼

    這樣所有通知的邏輯集中在一個地方
    要改通知方式只改一個腳本。



    腳本的 mode(跟自動化一樣)
    1. script:
    2.   我的腳本:
    3.     mode: single      # 預設
    4.     sequence: ...
    複製代碼

    腳本最常需要改的是這個


    • single —— 還在跑的時候再呼叫會失敗並警告
    • restart —— 重新開始
    • queued —— 排隊
    • parallel —— 同時跑好幾份(帶參數的通知腳本一定要用這個


    踩過的坑:通知腳本用 single,
    兩個通知同時來,第二個直接消失

    改成 parallel 就好了
    1. script:
    2.   通知並閃燈:
    3.     mode: parallel
    4.     max: 10
    複製代碼

    三者的組合用法

    最好的架構
    1. 自動化(決定什麼時候)
    2.    ↓ 呼叫
    3. 腳本(決定做什麼,可以有順序和條件)
    4.    ↓ 呼叫
    5. 場景(一次套用一組狀態)
    複製代碼

    實際的例子
    1. automation:
    2.   - alias: 晚上七點進入放鬆模式
    3.     triggers:
    4.       - trigger: time
    5.         at: "19:00:00"
    6.     conditions:
    7.       - condition: state
    8.         entity_id: person.charles
    9.         state: home
    10.     actions:
    11.       - action: script.放鬆模式
    12. script:
    13.   放鬆模式:
    14.     sequence:
    15.       - action: scene.turn_on
    16.         target:
    17.           entity_id: scene.暖光
    18.         data:
    19.           transition: 5
    20.       - delay: "00:00:05"
    21.       - action: media_player.play_media
    22.         target:
    23.           entity_id: media_player.客廳音響
    24.         data:
    25.           media_content_id: 你的播放清單
    26.           media_content_type: playlist
    27.       - action: media_player.volume_set
    28.         target:
    29.           entity_id: media_player.客廳音響
    30.         data:
    31.           volume_level: 0.3
    複製代碼

    好處


    • 腳本可以單獨測試(在開發者工具裡按一下就跑)
    • 可以放在儀表板上當按鈕
    • 自動化只負責「什麼時候」,很好讀


    場景有個限制要知道

    場景只記錄「狀態」,不記錄「怎麼變過去」。


    • 場景不能做「等三秒再做下一件事」
    • 場景不能有條件判斷
    • 需要這些就用腳本


    另外場景會把所有實體同時設定
    如果裡面有十五個 Zigbee 燈,會一次送十五個指令(塞車)。

    解法用 Zigbee 群組,場景裡放群組實體而不是十五盞燈。

    ---

    下一篇:在自己家跑 AI ——
    本地語音助理,資料完全不出門。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

    GMT+8, 2026-9-24 11:28 , Processed in 0.097918 second(s), 24 queries .

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