|
|
寫自動化的時候一直 Google 很煩,整理一份放這邊。全部都在「開發者工具 → 範本」測過可以跑。

先講一個很重要的習慣
任何範本先貼到開發者工具的範本頁面測,右邊會即時顯示結果。改一個字就馬上看到差別,比改 YAML 重啟快一百倍。很多人不知道有這個頁面,土法煉鋼改到懷疑人生。
━━ 取值 ━━
- {{ states('sensor.溫度') }} 狀態(回傳文字)
- {{ states('sensor.溫度') | float(0) }} 轉成數字,失敗給 0
- {{ state_attr('light.客廳', 'brightness') }} 取屬性
- {{ is_state('light.客廳', 'on') }} 判斷是否為某狀態
- {{ is_state_attr('climate.冷氣', 'hvac_action', 'cooling') }}
複製代碼
要知道某個實體有哪些屬性可以拿,去「開發者工具 → 狀態」點它就看得到。
━━ 時間 ━━
- {{ now().hour }} 現在幾點(0-23)
- {{ now().weekday() }} 星期幾(0=週一,6=週日)
- {{ now().weekday() < 5 }} 是不是平日
- {{ now().strftime('%H:%M') }} 格式化成 14:30
- {{ now().strftime('%m/%d') }} 格式化成 09/21
複製代碼
━━ 某個狀態持續多久了 ━━
這個超好用,但寫法很多人記不起來:
- {{ (as_timestamp(now())
- - as_timestamp(states.binary_sensor.大門.last_changed)) / 60 }}
複製代碼
回傳分鐘數。拿來做「門開超過 10 分鐘就提醒」「冷氣連續開超過 4 小時就通知」。
更好讀的寫法:
- {{ relative_time(states.binary_sensor.大門.last_changed) }}
複製代碼
會回傳「3 分鐘前」這種人看得懂的文字,放在通知裡很適合。
━━ 從一群實體裡篩選 ━━
這組用熟之後威力很大:
- 現在開著的燈有幾盞:
- {{ states.light | selectattr('state','eq','on') | list | count }}
- 把開著的燈全部列出來:
- {{ states.light | selectattr('state','eq','on')
- | map(attribute='name') | join('、') }}
- 電量低於 20% 的裝置:
- {{ states.sensor
- | selectattr('attributes.device_class','eq','battery')
- | selectattr('state','lt','20')
- | map(attribute='name') | join('、') }}
複製代碼
最後那個可以做成每週一次的「該換電池了」通知,比一個一個設門檻方便太多。
━━ 條件判斷 ━━
- {% if states('sensor.溫度') | float(0) > 28 %}
- 有點熱
- {% elif states('sensor.溫度') | float(0) < 20 %}
- 有點冷
- {% else %}
- 剛剛好
- {% endif %}
複製代碼
寫在同一行的簡寫(很常用在通知訊息裡):
- {{ '要帶傘' if states('sensor.降雨機率')|float(0) > 60 else '' }}
複製代碼
━━ 通知訊息裡塞變數 ━━
- message: >
- 現在室內 {{ states('sensor.客廳溫度') }} 度,
- 濕度 {{ states('sensor.客廳濕度') }}%。
- {{ '濕度偏高,建議開除濕' if states('sensor.客廳濕度')|float(0) > 70 else '' }}
複製代碼
那個 > 符號是 YAML 的多行寫法,讓你可以換行寫比較好讀。
━━ 最常見的兩個錯誤 ━━
- ❌ {{ states('sensor.溫度') > 28 }}
- → 在比文字,"9" 會大於 "28"
- ✅ {{ states('sensor.溫度') | float(0) > 28 }}
- ❌ {{ states('sensor.可能不存在的') | float }}
- → 實體不可用的時候整個範本報錯,自動化中斷
- ✅ {{ states('sensor.可能不存在的') | float(0) }}
- → 給預設值,不會炸
複製代碼
養成習慣:float 後面一律加預設值。 這個習慣可以省掉你很多莫名其妙的失效。
---
有常用但這裡沒有的,留言我加上去。 |
|