|
|
範本(Template)是 Home Assistant 裡最省力的一塊:同一段 Jinja 語法可以放進自動化的條件、通知的訊息、儀表板的標題、或做成一個獨立的感測器。但它也是最容易寫出「不報錯、只是答案不對」的一塊。
這篇的順序就是實際動手的順序:先學會在編輯器裡即時測,再一段一段把語法試過,最後把測好的東西寫進設定檔變成永久的感測器。全部都可以複製貼上。

━━ 步驟 1:打開範本編輯器,這是後面每一步的工作檯 ━━
很多人不知道有這個頁面,土法煉鋼改 YAML、重啟、看結果,一輪要三分鐘;用這個頁面一輪是零點五秒。
路徑:左側選單 → 開發者工具 → 上方分頁 → 範本。
看不到「開發者工具」 → 你的帳號不是管理員。設定 → 人員 → 使用者 → 點自己 → 把「管理員」打開。
你會看到什麼:畫面分成左右兩欄。左邊是可以編輯的文字框,裡面預設塞了一大段範例;右邊是即時算出來的結果。改左邊一個字,右邊立刻跟著變,不用按任何按鈕。
先做一件事:把左邊那一整段預設範例全部刪掉。它很長,會蓋掉你自己要測的東西。
1-1 先測一個一定會動的
在空白的左欄貼上:
- 現在是 {{ now().strftime('%Y-%m-%d %H:%M:%S') }}
- 星期 {{ now().weekday() }}
複製代碼
你會看到什麼(右欄):
- 現在是 2026-09-25 14:30:12
- 星期 3
複製代碼
右邊沒有反應、或顯示紅色錯誤 → 檢查大括號是不是兩個({{ 不是 {),以及中文的全形括號有沒有混進去。
1-2 記住這個頁面的一個限制
範本編輯器不認得 trigger、this、repeat 這些變數,因為它們只在自動化執行的當下才存在。所以自動化裡用到 trigger.to_state 的那幾行,在這裡測會報錯,那是正常的 —— 那部分要用自動化的「追蹤(Traces)」去看。
━━ 步驟 2:取值 —— 四個你每天都會用到的函式 ━━
把下面整段貼進左欄,把實體名稱換成你自己的(不知道名字的話,到 開發者工具 → 狀態 分頁去抄):
- 狀態(一律回傳文字):{{ states('sensor.ke_ting_wen_du') }}
- 轉成數字: {{ states('sensor.ke_ting_wen_du') | float(0) }}
- 取屬性: {{ state_attr('light.ke_ting', 'brightness') }}
- 判斷是不是某狀態: {{ is_state('light.ke_ting', 'on') }}
- 判斷屬性是不是某值: {{ is_state_attr('climate.leng_qi', 'hvac_action', 'cooling') }}
- 這個實體還活著嗎: {{ has_value('sensor.ke_ting_wen_du') }}
複製代碼
你會看到什麼:
- 狀態(一律回傳文字):28.4
- 轉成數字: 28.4
- 取屬性: 180
- 判斷是不是某狀態: True
- 判斷屬性是不是某值: False
- 這個實體還活著嗎: True
複製代碼
幾個判讀重點:
- 前兩行看起來一樣,但型別完全不同。 第一行是文字 "28.4",第二行是數字 28.4。這個差別會在步驟 6 咬人
- 取屬性回傳 None → 那個屬性不存在,或者燈是關的(關燈時 brightness 屬性會消失)
- has_value 回傳 False → 實體不存在、或狀態是 unavailable / unknown
2-1 怎麼知道一個實體有哪些屬性
到 開發者工具 → 狀態 分頁,在「實體」那欄輸入名稱,點下去。
你會看到什麼:下方出現一個表格,列出這個實體的所有屬性名稱和目前的值。那些名稱可以直接抄進 state_attr() 的第二個參數。
━━ 步驟 3:防呆 —— 這一步不做,前面全都是地雷 ━━
Home Assistant 的感測器會不定時變成 unavailable(裝置重開、Wi-Fi 斷一下、Zigbee 掉一次封包)。範本碰到 unavailable 的行為,決定了你的自動化是「暫時不動作」還是「整條炸掉」。
貼這一段測:
|
|