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

    [收藏] 範本速查,複製貼上就能用

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    寫自動化的時候一直 Google 很煩,整理一份放這邊。全部都在「開發者工具 → 範本」測過可以跑。




    先講一個很重要的習慣

    任何範本先貼到開發者工具的範本頁面測,右邊會即時顯示結果。改一個字就馬上看到差別,比改 YAML 重啟快一百倍。很多人不知道有這個頁面,土法煉鋼改到懷疑人生。

    ━━ 取值 ━━
    1. {{ states('sensor.溫度') }}                      狀態(回傳文字)
    2. {{ states('sensor.溫度') | float(0) }}          轉成數字,失敗給 0
    3. {{ state_attr('light.客廳', 'brightness') }}     取屬性
    4. {{ is_state('light.客廳', 'on') }}               判斷是否為某狀態
    5. {{ is_state_attr('climate.冷氣', 'hvac_action', 'cooling') }}
    複製代碼

    要知道某個實體有哪些屬性可以拿,去「開發者工具 → 狀態」點它就看得到。

    ━━ 時間 ━━
    1. {{ now().hour }}                     現在幾點(0-23)
    2. {{ now().weekday() }}                星期幾(0=週一,6=週日)
    3. {{ now().weekday() < 5 }}            是不是平日
    4. {{ now().strftime('%H:%M') }}        格式化成 14:30
    5. {{ now().strftime('%m/%d') }}        格式化成 09/21
    複製代碼

    ━━ 某個狀態持續多久了 ━━

    這個超好用,但寫法很多人記不起來:
    1. {{ (as_timestamp(now())
    2.     - as_timestamp(states.binary_sensor.大門.last_changed)) / 60 }}
    複製代碼

    回傳分鐘數。拿來做「門開超過 10 分鐘就提醒」「冷氣連續開超過 4 小時就通知」。

    更好讀的寫法:
    1. {{ relative_time(states.binary_sensor.大門.last_changed) }}
    複製代碼

    會回傳「3 分鐘前」這種人看得懂的文字,放在通知裡很適合。

    ━━ 從一群實體裡篩選 ━━

    這組用熟之後威力很大:
    1. 現在開著的燈有幾盞:
    2. {{ states.light | selectattr('state','eq','on') | list | count }}
    3. 把開著的燈全部列出來:
    4. {{ states.light | selectattr('state','eq','on')
    5.    | map(attribute='name') | join('、') }}
    6. 電量低於 20% 的裝置:
    7. {{ states.sensor
    8.    | selectattr('attributes.device_class','eq','battery')
    9.    | selectattr('state','lt','20')
    10.    | map(attribute='name') | join('、') }}
    複製代碼

    最後那個可以做成每週一次的「該換電池了」通知,比一個一個設門檻方便太多。

    ━━ 條件判斷 ━━
    1. {% if states('sensor.溫度') | float(0) > 28 %}
    2.   有點熱
    3. {% elif states('sensor.溫度') | float(0) < 20 %}
    4.   有點冷
    5. {% else %}
    6.   剛剛好
    7. {% endif %}
    複製代碼

    寫在同一行的簡寫(很常用在通知訊息裡):
    1. {{ '要帶傘' if states('sensor.降雨機率')|float(0) > 60 else '' }}
    複製代碼

    ━━ 通知訊息裡塞變數 ━━
    1. message: >
    2.   現在室內 {{ states('sensor.客廳溫度') }} 度,
    3.   濕度 {{ states('sensor.客廳濕度') }}%。
    4.   {{ '濕度偏高,建議開除濕' if states('sensor.客廳濕度')|float(0) > 70 else '' }}
    複製代碼

    那個 > 符號是 YAML 的多行寫法,讓你可以換行寫比較好讀。

    ━━ 最常見的兩個錯誤 ━━
    1. ❌ {{ states('sensor.溫度') > 28 }}
    2.    → 在比文字,"9" 會大於 "28"
    3. ✅ {{ states('sensor.溫度') | float(0) > 28 }}
    4. ❌ {{ states('sensor.可能不存在的') | float }}
    5.    → 實體不可用的時候整個範本報錯,自動化中斷
    6. ✅ {{ states('sensor.可能不存在的') | float(0) }}
    7.    → 給預設值,不會炸
    複製代碼

    養成習慣:float 後面一律加預設值。 這個習慣可以省掉你很多莫名其妙的失效。

    ---

    有常用但這裡沒有的,留言我加上去。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

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

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