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

    自己寫一個 Blueprint:把你最常複製的自動化變成可重用的藍圖

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    裝別人的藍圖大家都會,這篇講怎麼自己寫一個

    什麼時候該寫?當你發現自己在複製貼上同一個自動化,只改實體名稱的時候。

    我家有五個感應燈(浴室、走道、廚房、陽台、儲藏室),
    一開始是五個自動化複製來的。後來想改「亮度要隨時間變」,
    就得改五次 —— 那時候就知道該寫藍圖了。



    藍圖放哪裡
    1. config/
    2. └── blueprints/
    3.     └── automation/
    4.         └── charles/              ← 自己開一個資料夾
    5.             └── motion_light.yaml
    複製代碼

    用檔案編輯器(File Editor)或 Studio Code Server 附加元件建立就好。

    完整範例:感應燈藍圖
    1. blueprint:
    2.   name: 感應燈(可設定亮度與夜間模式)
    3.   description: >
    4.     人來開燈、人走延遲關燈。
    5.     可以設定白天和夜間用不同亮度,避免半夜被閃瞎。
    6.   domain: automation
    7.   author: charles
    8.   input:
    9.     motion_sensor:
    10.       name: 人體感應器
    11.       selector:
    12.         entity:
    13.           filter:
    14.             domain: binary_sensor
    15.             device_class: motion
    16.     target_light:
    17.       name: 要控制的燈
    18.       selector:
    19.         target:
    20.           entity:
    21.             domain: light
    22.     no_motion_wait:
    23.       name: 沒人多久後關燈
    24.       default: 120
    25.       selector:
    26.         number:
    27.           min: 10
    28.           max: 600
    29.           unit_of_measurement: 秒
    30.     day_brightness:
    31.       name: 白天亮度
    32.       default: 80
    33.       selector:
    34.         number: {min: 1, max: 100, unit_of_measurement: "%"}
    35.     night_brightness:
    36.       name: 夜間亮度
    37.       default: 5
    38.       selector:
    39.         number: {min: 1, max: 100, unit_of_measurement: "%"}
    40.     night_start:
    41.       name: 夜間模式開始
    42.       default: "23:00:00"
    43.       selector:
    44.         time:
    45.     night_end:
    46.       name: 夜間模式結束
    47.       default: "06:00:00"
    48.       selector:
    49.         time:
    50. mode: restart
    51. max_exceeded: silent
    52. triggers:
    53.   - trigger: state
    54.     entity_id: !input motion_sensor
    55.     to: "on"
    56. actions:
    57.   # !input 不能直接塞進範本,一律先用 variables 接出來
    58.   - variables:
    59.       day_bri: !input day_brightness
    60.       night_bri: !input night_brightness
    61.       n_start: !input night_start
    62.       n_end: !input night_end
    63.       is_night: >
    64.         {{ now() >= today_at(n_start) or now() < today_at(n_end) }}
    65.   - action: light.turn_on
    66.     target: !input target_light
    67.     data:
    68.       brightness_pct: "{{ night_bri if is_night else day_bri }}"
    69.   - wait_for_trigger:
    70.       - trigger: state
    71.         entity_id: !input motion_sensor
    72.         to: "off"
    73.   - delay: !input no_motion_wait
    74.   - action: light.turn_off
    75.     target: !input target_light
    複製代碼

    夜間判斷為什麼要這樣寫

    夜間時段是跨午夜的(23:00 到隔天 06:00),
    所以不能寫成「大於開始 而且 小於結束」—— 那樣永遠不成立。

    要用 or:現在比 23:00 晚(今晚),或者 比 06:00 早(凌晨)。
    這個坑我自己踩過,測試時沒發現,因為白天測都正常。



    三個寫藍圖的重點

    1. !input 不能直接放進範本

    這樣不會動
    1. brightness_pct: "{{ !input day_brightness }}"
    複製代碼

    要先用 variables 接出來,再在範本裡用變數名。這是新手最常卡住的地方。

    2. selector 決定使用者介面長什麼樣


    • entity — 下拉選單,可以用 filter 限制網域和裝置類別
    • target — 可以選實體、裝置、或整個區域(比 entity 更彈性)
    • number — 滑桿或數字框
    • time — 時間選擇器
    • boolean — 開關
    • text — 文字框,加 multiline: true 變多行


    filter 一定要加。不加的話使用者的下拉選單會有上千個實體,很難用。

    3. default 要給

    有 default 的輸入項會被視為選填。沒給 default 的是必填,
    使用者不選就不能存檔。

    怎麼用

    存檔後重新載入自動化(開發者工具 → YAML → 重新載入自動化),
    然後 設定 → 自動化 → 建立自動化 → 使用藍圖,就會看到你的藍圖。

    之後每個感應燈就是填表格,五個房間五分鐘搞定。
    要改邏輯的話改藍圖一次,五個自動化全部跟著變。

    除錯技巧

    藍圖語法錯誤時,畫面上只會說「藍圖無效」,不太講哪裡錯。

    我的做法是先把它寫成一般自動化,確定能跑
    再一項一項把寫死的值換成 !input。每換一項就重新載入一次。
    這樣壞掉的時候你知道是剛剛那一行的問題。

    ---

    寫藍圖的門檻其實不高,難的是想清楚「哪些該開放設定、哪些寫死就好」。
    開放太多,使用者要填十幾格;開放太少,又不夠彈性。

    我的原則:只開放「不同房間會不一樣」的那些
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

    GMT+8, 2026-9-24 12:55 , Processed in 0.078173 second(s), 24 queries .

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